diff --git a/.gitignore b/.gitignore index aa4f887e..2f881e55 100644 --- a/.gitignore +++ b/.gitignore @@ -13,21 +13,40 @@ data/spider data/eval output_pred/ wandb/ -dbgpt_hub/data/* +src/dbgpt-hub-sql/dbgpt_hub_sql/data/* +src/dbgpt-hub-gql/dbgpt_hub_gql/data/* +src/dbgpt-hub-sql/codellama/* +src/dbgpt-hub-gql/codellama/* +src/dbgpt-hub-sql/wandb/* +src/dbgpt-hub-gql/wandb/* # But track the data/eval_data folder itself -!dbgpt_hub/data/eval_data/ -!dbgpt_hub/data/dataset_info.json -!dbgpt_hub/data/example_text2sql.json - -# Ignore everything under dbgpt_hub/ouput/ except the adapter directory -dbgpt_hub/output/adapter/* -!dbgpt_hub/output/adapter/.gitkeep -dbgpt_hub/output/logs/* -!dbgpt_hub/output/logs/.gitkeep -dbgpt_hub/output/pred/* -!dbgpt_hub/output/pred/.gitkeep - - +!src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/ +!src/dbgpt-hub-sql/dbgpt_hub_sql/data/dataset_info.json +!src/dbgpt-hub-sql/dbgpt_hub_sql/data/example_text2sql.json +!src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example +!src/dbgpt-hub-gql/dbgpt_hub_gql/data/dataset_info.json +!src/dbgpt-hub-gql/dbgpt_hub_gql/data/example_text2sql.json + +# Ignore everything under dbgpt_hub_sql/ouput/ except the adapter directory +src/dbgpt-hub-sql/dbgpt_hub_sql/output/ +src/dbgpt-hub-sql/dbgpt_hub_sql/output/adapter/* +!src/dbgpt-hub-sql/dbgpt_hub_sql/output/adapter/.gitkeep +src/dbgpt-hub-sql/dbgpt_hub_sql/output/logs/* +!src/dbgpt-hub-sql/dbgpt_hub_sql/output/logs/.gitkeep +src/dbgpt-hub-sql/dbgpt_hub_sql/output/pred/* +!src/dbgpt-hub-sql/dbgpt_hub_sql/output/pred/.gitkeep + +src/dbgpt-hub-gql/dbgpt_hub_gql/output/ +src/dbgpt-hub-gql/dbgpt_hub_gql/output/adapter/* +!src/dbgpt-hub-gql/dbgpt_hub_gql/output/adapter/.gitkeep +src/dbgpt-hub-gql/dbgpt_hub_gql/output/logs/* +!src/dbgpt-hub-gql/dbgpt_hub_gql/output/logs/.gitkeep +src/dbgpt-hub-gql/dbgpt_hub_gql/output/pred/* +!src/dbgpt-hub-gql/dbgpt_hub_gql/output/pred/.gitkeep + +# Ignore NLU output +src/dbgpt-hub-nlu/output +src/dbgpt-hub-nlu/data # build/ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..a447085d --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +.DEFAULT_GOAL := help + +SHELL=/bin/bash +VENV = venv + +# Detect the operating system and set the virtualenv bin directory +ifeq ($(OS),Windows_NT) + VENV_BIN=$(VENV)/Scripts +else + VENV_BIN=$(VENV)/bin +endif + +setup: $(VENV)/bin/activate + +$(VENV)/bin/activate: $(VENV)/.venv-timestamp + +$(VENV)/.venv-timestamp: src/dbgpt-hub-nlu/setup.py requirements + # Create new virtual environment if setup.py has changed + python3 -m venv $(VENV) + $(VENV_BIN)/pip install --upgrade pip + $(VENV_BIN)/pip install -r requirements/lint-requirements.txt + touch $(VENV)/.venv-timestamp + + +.PHONY: fmt +fmt: setup ## Format Python code + # TODO: Use isort to sort Python imports. + # https://github.com/PyCQA/isort + $(VENV_BIN)/isort src/ + # https://github.com/psf/black + $(VENV_BIN)/black --extend-exclude="examples/notebook" . \ No newline at end of file diff --git a/README.md b/README.md index 098d41d6..eb596293 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,17 @@

-[**简体中文**](README.zh.md) | [**Discord**](https://discord.gg/7uQnPuveTY) | [**Wechat**](https://github.com/eosphoros-ai/DB-GPT/blob/main/README.zh.md#%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC) | [**Huggingface**](https://huggingface.co/eosphoros) | [**Community**](https://github.com/eosphoros-ai/community) | [**Paper**](https://arxiv.org/abs/2406.11434) + +[**简体中文**](README.zh.md) | [**Discord**](https://discord.gg/7uQnPuveTY) | [**Wechat**](https://github.com/eosphoros-ai/DB-GPT/blob/main/README.zh.md#%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC) | [**Huggingface**](https://huggingface.co/eosphoros) | [**Community**](https://github.com/eosphoros-ai/community) +[**Text2SQL**](README.zh.md) | [**Text2GQL**](src/dbgpt-hub-gql/README.zh.md) | [**Text2NLU**](src/dbgpt-hub-nlu/README.zh.md) + + +## 🔥🔥🔥 News +- Support [Text2NLU](src/dbgpt-hub-nlu/README.zh.md) fine-tuning to improve semantic understanding accuracy. +- Support [Text2GQL](src/dbgpt-hub-gql/README.zh.md) fine-tuning to generate graph query. + ## Baseline - update time: 2023/12/08 - metric: execution accuracy (ex) @@ -392,13 +400,13 @@ Firstly, install `dbgpt-hub` with the following command Then, set up the arguments and run the whole process. ```python -from dbgpt_hub.data_process import preprocess_sft_data -from dbgpt_hub.train import start_sft -from dbgpt_hub.predict import start_predict -from dbgpt_hub.eval import start_evaluate +from dbgpt_hub_sql.data_process import preprocess_sft_data +from dbgpt_hub_sql.train import start_sft +from dbgpt_hub_sql.predict import start_predict +from dbgpt_hub_sql.eval import start_evaluate # Config the input datasets -data_folder = "dbgpt_hub/data" +data_folder = "dbgpt_hub_sql/data" data_info = [ { "data_source": "spider", @@ -424,7 +432,7 @@ train_args = { "template": "llama2", "lora_rank": 64, "lora_alpha": 32, - "output_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora", + "output_dir": "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora", "overwrite_cache": True, "overwrite_output_dir": True, "per_device_train_batch_size": 1, @@ -443,20 +451,20 @@ predict_args = { "model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf", "template": "llama2", "finetuning_type": "lora", - "checkpoint_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora", - "predict_file_path": "dbgpt_hub/data/eval_data/dev_sql.json", - "predict_out_dir": "dbgpt_hub/output/", + "checkpoint_dir": "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora", + "predict_file_path": "dbgpt_hub_sql/data/eval_data/dev_sql.json", + "predict_out_dir": "dbgpt_hub_sql/output/", "predicted_out_filename": "pred_sql.sql", } # Config evaluation parameters evaluate_args = { - "input": "./dbgpt_hub/output/pred/pred_sql_dev_skeleton.sql", - "gold": "./dbgpt_hub/data/eval_data/gold.txt", - "gold_natsql": "./dbgpt_hub/data/eval_data/gold_natsql2sql.txt", - "db": "./dbgpt_hub/data/spider/database", - "table": "./dbgpt_hub/data/eval_data/tables.json", - "table_natsql": "./dbgpt_hub/data/eval_data/tables_for_natsql2sql.json", + "input": "./dbgpt_hub_sql/output/pred/pred_sql_dev_skeleton.sql", + "gold": "./dbgpt_hub_sql/data/eval_data/gold.txt", + "gold_natsql": "./dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt", + "db": "./dbgpt_hub_sql/data/spider/database", + "table": "./dbgpt_hub_sql/data/eval_data/tables.json", + "table_natsql": "./dbgpt_hub_sql/data/eval_data/tables_for_natsql2sql.json", "etype": "exec", "plug_value": True, "keep_distict": False, @@ -479,15 +487,15 @@ start_evaluate(evaluate_args) DB-GPT-Hub uses the information matching generation method for data preparation, i.e. the SQL + Repository generation method that combines table information. This method combines data table information to better understand the structure and relationships of the data table, and is suitable for generating SQL statements that meet the requirements. -Download the [Spider dataset]((https://drive.google.com/uc?export=download&id=1TqleXec_OykOYFREKKtschzY29dUcVAQ)) from the Spider dataset link. By default, after downloading and extracting the data, place it in the dbgpt_hub/data directory, i.e., the path should be `dbgpt_hub/data/spider`. +Download the [Spider dataset]((https://drive.google.com/uc?export=download&id=1TqleXec_OykOYFREKKtschzY29dUcVAQ)) from the Spider dataset link. By default, after downloading and extracting the data, place it in the dbgpt_hub_sql/data directory, i.e., the path should be `dbgpt_hub_sql/data/spider`. For the data preprocessing part, simply **run the following script** : ```bash ## generate train and dev(eval) data -poetry run sh dbgpt_hub/scripts/gen_train_eval_data.sh +poetry run sh dbgpt_hub_sql/scripts/gen_train_eval_data.sh ``` -In the directory `dbgpt_hub/data/`, you will find the newly generated training file example_text2sql_train.json and testing file example_text2sql_dev.json, containing 8659 and 1034 entries respectively. For the data used in subsequent fine-tuning, set the parameter `file_name` value to the file name of the training set in dbgpt_hub/data/dataset_info.json, such as example_text2sql_train.json +In the directory `dbgpt_hub_sql/data/`, you will find the newly generated training file example_text2sql_train.json and testing file example_text2sql_dev.json, containing 8659 and 1034 entries respectively. For the data used in subsequent fine-tuning, set the parameter `file_name` value to the file name of the training set in dbgpt_hub_sql/data/dataset_info.json, such as example_text2sql_train.json The data in the generated JSON looks something like this: @@ -500,7 +508,7 @@ The data in the generated JSON looks something like this: "history": [] }, ``` -The data processing code of `chase`, `cosql` and `sparc` has been embedded in the data processing code of the project. After downloading the data set according to the above link, you only need to add ` in `dbgpt_hub/configs/config.py` Just loosen the corresponding code comment in SQL_DATA_INFO`. +The data processing code of `chase`, `cosql` and `sparc` has been embedded in the data processing code of the project. After downloading the data set according to the above link, you only need to add ` in `dbgpt_hub_sql/configs/config.py` Just loosen the corresponding code comment in SQL_DATA_INFO`. ### 3.4. Model fine-tuning @@ -508,35 +516,35 @@ The model fine-tuning supports both LoRA and QLoRA methods. We can run the follo Run the command: ```bash -poetry run sh dbgpt_hub/scripts/train_sft.sh +poetry run sh dbgpt_hub_sql/scripts/train_sft.sh ``` -After fine-tuning, the model weights will be saved by default in the adapter folder, specifically in the dbgpt_hub/output/adapter directory. +After fine-tuning, the model weights will be saved by default in the adapter folder, specifically in the dbgpt_hub_sql/output/adapter directory. If you're using **multi-GPU training and want to utilize deepseed**, you should modify the default content in train_sft.sh. The change is: ``` -CUDA_VISIBLE_DEVICES=0 python dbgpt_hub/train/sft_train.py \ +CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/train/sft_train.py \ --quantization_bit 4 \ ... ``` change to : ``` -deepspeed --num_gpus 2 dbgpt_hub/train/sft_train.py \ - --deepspeed dbgpt_hub/configs/ds_config.json \ +deepspeed --num_gpus 2 dbgpt_hub_sql/train/sft_train.py \ + --deepspeed dbgpt_hub_sql/configs/ds_config.json \ --quantization_bit 4 \ ... ``` if you need order card id ``` -deepspeed --include localhost:0,1 dbgpt_hub/train/sft_train.py \ - --deepspeed dbgpt_hub/configs/ds_config.json \ +deepspeed --include localhost:0,1 dbgpt_hub_sql/train/sft_train.py \ + --deepspeed dbgpt_hub_sql/configs/ds_config.json \ --quantization_bit 4 \ ... ``` -The other parts that are omitted (…) can be kept consistent. If you want to change the default deepseed configuration, go into the `dbgpt_hub/configs` directory and make changes to ds_config.json as needed,the default is stage2. +The other parts that are omitted (…) can be kept consistent. If you want to change the default deepseed configuration, go into the `dbgpt_hub_sql/configs` directory and make changes to ds_config.json as needed,the default is stage2. In the script, during fine-tuning, different models correspond to key parameters lora_target and template, as shown in the following table: @@ -563,10 +571,10 @@ In the script, during fine-tuning, different models correspond to key parameters > quantization_bit: Indicates whether quantization is applied, with valid values being [4 or 8]. > model_name_or_path: The path of the LLM (Large Language Model). -> dataset: Specifies the name of the training dataset configuration, corresponding to the outer key value in dbgpt_hub/data/dataset_info.json, such as example_text2sql. +> dataset: Specifies the name of the training dataset configuration, corresponding to the outer key value in dbgpt_hub_sql/data/dataset_info.json, such as example_text2sql. > max_source_length: The length of the text input into the model. If computing resources allow, it can be set as large as possible, like 1024 or 2048. > max_target_length: The length of the SQL content output by the model; 512 is generally sufficient. -> output_dir: The output path of the Peft module during SFT (Supervised Fine-Tuning), set by default to `dbgpt_hub/output/adapter/` . +> output_dir: The output path of the Peft module during SFT (Supervised Fine-Tuning), set by default to `dbgpt_hub_sql/output/adapter/` . > per_device_train_batch_size: The size of the batch. If computing resources allow, it can be set larger; the default is 1. > gradient_accumulation_steps: The number of steps for accumulating gradients before an update. > save_steps: The number of steps at which model checkpoints are saved; it can be set to 100 by default. @@ -575,10 +583,10 @@ In the script, during fine-tuning, different models correspond to key parameters ### 3.5. Model Predict -Under the project directory ./dbgpt_hub/output/pred/, this folder is the default output location for model predictions(if not exist, just mkdir). +Under the project directory ./dbgpt_hub_sql/output/pred/, this folder is the default output location for model predictions(if not exist, just mkdir). ```bash -poetry run sh ./dbgpt_hub/scripts/predict_sft.sh +poetry run sh ./dbgpt_hub_sql/scripts/predict_sft.sh ``` In the script, by default with the parameter `--quantization_bit`, it predicts using QLoRA. Removing it switches to the LoRA prediction method. @@ -593,7 +601,7 @@ You can find the second corresponding model weights from Huggingface [hg-eospho If you need to merge the weights of the trained base model and the fine-tuned Peft module to export a complete model, execute the following model export script: ```bash -poetry run sh ./dbgpt_hub/scripts/export_merge.sh +poetry run sh ./dbgpt_hub_sql/scripts/export_merge.sh ``` Be sure to replace the parameter path values in the script with the paths corresponding to your project. @@ -602,7 +610,7 @@ Be sure to replace the parameter path values in the script with the paths corres To evaluate model performance on the dataset, default is spider dev dataset. Run the following command: ```bash -poetry run python dbgpt_hub/eval/evaluation.py --plug_value --input Your_model_pred_file +poetry run python dbgpt_hub_sql/eval/evaluation.py --plug_value --input Your_model_pred_file ``` You can find the results of our latest review and part of experiment results [here](docs/eval_llm_result.md) **Note**: The database pointed to by the default code is a 95M database downloaded from [Spider official website] (https://yale-lily.github.io/spider). If you need to use Spider database (size 1.27G) in [test-suite](https://github.com/taoyds/test-suite-sql-eval), please download the database in the link to the custom directory first, and run the above evaluation command which add parameters and values ​​like `--db Your_download_db_path`. diff --git a/README.zh.md b/README.zh.md index 1ebab811..3c6ada86 100644 --- a/README.zh.md +++ b/README.zh.md @@ -23,10 +23,16 @@

-[**英文**](README.md) | [**Discord**](https://discord.gg/7uQnPuveTY) | [**Wechat**](https://github.com/eosphoros-ai/DB-GPT/blob/main/README.zh.md#%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC) | [**Huggingface**](https://huggingface.co/eosphoros) | [**Community**](https://github.com/eosphoros-ai/community) | [**论文**](https://arxiv.org/abs/2406.11434) + +[**英文**](README.md) | [**Discord**](https://discord.gg/7uQnPuveTY) | [**Wechat**](https://github.com/eosphoros-ai/DB-GPT/blob/main/README.zh.md#%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC) | [**Huggingface**](https://huggingface.co/eosphoros) | [**Community**](https://github.com/eosphoros-ai/community) +[**Text2SQL**](README.zh.md) | [**Text2GQL**](src/dbgpt-hub-gql/README.zh.md) | [**Text2NLU**](src/dbgpt-hub-nlu/README.zh.md) +## 🔥🔥🔥 News +- 支持 [Text2NLU](src/dbgpt-hub-nlu/README.zh.md)微调,提升自然语言理解准确率。 +- 支持 [Text2GQL](src/dbgpt-hub-gql/README.zh.md)微调,可以通过自然语言生成图查询语句。 + ## Baseline - 更新日期: 2023/12/08 - 评价指标: execution accuracy (ex) @@ -381,14 +387,14 @@ poetry install ### 3.2、数据准备 DB-GPT-Hub使用的是信息匹配生成法进行数据准备,即结合表信息的 SQL + Repository 生成方式,这种方式结合了数据表信息,能够更好地理解数据表的结构和关系,适用于生成符合需求的 SQL 语句。 -从[spider数据集链接](https://drive.google.com/uc?export=download&id=1TqleXec_OykOYFREKKtschzY29dUcVAQ) 下载spider数据集,默认将数据下载解压后,放在目录dbgpt_hub/data下面,即路径为`dbgpt_hub/data/spider`。 +从[spider数据集链接](https://drive.google.com/uc?export=download&id=1TqleXec_OykOYFREKKtschzY29dUcVAQ) 下载spider数据集,默认将数据下载解压后,放在目录dbgpt_hub_sql/data下面,即路径为`dbgpt_hub_sql/data/spider`。 数据预处理部分,**只需运行如下脚本**即可: ```bash ## 生成train数据 和dev(eval)数据, -poetry run sh dbgpt_hub/scripts/gen_train_eval_data.sh +poetry run sh dbgpt_hub_sql/scripts/gen_train_eval_data.sh ``` -在`dbgpt_hub/data/`目录你会得到新生成的训练文件example_text2sql_train.json 和测试文件example_text2sql_dev.json ,数据量分别为8659和1034条。 对于后面微调时的数据使用在dbgpt_hub/data/dataset_info.json中将参数`file_name`值给为训练集的文件名,如example_text2sql_train.json。 +在`dbgpt_hub_sql/data/`目录你会得到新生成的训练文件example_text2sql_train.json 和测试文件example_text2sql_dev.json ,数据量分别为8659和1034条。 对于后面微调时的数据使用在dbgpt_hub_sql/data/dataset_info.json中将参数`file_name`值给为训练集的文件名,如example_text2sql_train.json。 生成的json中的数据形如: ``` @@ -400,7 +406,7 @@ poetry run sh dbgpt_hub/scripts/gen_train_eval_data.sh "history": [] }, ``` -项目的数据处理代码中已经嵌套了`chase` 、`cosql`、`sparc`的数据处理,可以根据上面链接将数据集下载到data路径后,在`dbgpt_hub/configs/config.py`中将 `SQL_DATA_INFO`中对应的代码注释松开即可。 +项目的数据处理代码中已经嵌套了`chase` 、`cosql`、`sparc`的数据处理,可以根据上面链接将数据集下载到data路径后,在`dbgpt_hub_sql/configs/config.py`中将 `SQL_DATA_INFO`中对应的代码注释松开即可。 ### 3.2 快速开始 @@ -410,13 +416,13 @@ poetry run sh dbgpt_hub/scripts/gen_train_eval_data.sh 然后,指定参数并用几行代码完成整个Text2SQL fine-tune流程: ```python -from dbgpt_hub.data_process import preprocess_sft_data -from dbgpt_hub.train import start_sft -from dbgpt_hub.predict import start_predict -from dbgpt_hub.eval import start_evaluate +from dbgpt_hub_sql.data_process import preprocess_sft_data +from dbgpt_hub_sql.train import start_sft +from dbgpt_hub_sql.predict import start_predict +from dbgpt_hub_sql.eval import start_evaluate # 配置训练和验证集路径和参数 -data_folder = "dbgpt_hub/data" +data_folder = "dbgpt_hub_sql/data" data_info = [ { "data_source": "spider", @@ -442,7 +448,7 @@ train_args = { "template": "llama2", "lora_rank": 64, "lora_alpha": 32, - "output_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora", + "output_dir": "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora", "overwrite_cache": True, "overwrite_output_dir": True, "per_device_train_batch_size": 1, @@ -461,20 +467,20 @@ predict_args = { "model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf", "template": "llama2", "finetuning_type": "lora", - "checkpoint_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora", - "predict_file_path": "dbgpt_hub/data/eval_data/dev_sql.json", - "predict_out_dir": "dbgpt_hub/output/", + "checkpoint_dir": "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora", + "predict_file_path": "dbgpt_hub_sql/data/eval_data/dev_sql.json", + "predict_out_dir": "dbgpt_hub_sql/output/", "predicted_out_filename": "pred_sql.sql", } # 配置评估参数 evaluate_args = { - "input": "./dbgpt_hub/output/pred/pred_sql_dev_skeleton.sql", - "gold": "./dbgpt_hub/data/eval_data/gold.txt", - "gold_natsql": "./dbgpt_hub/data/eval_data/gold_natsql2sql.txt", - "db": "./dbgpt_hub/data/spider/database", - "table": "./dbgpt_hub/data/eval_data/tables.json", - "table_natsql": "./dbgpt_hub/data/eval_data/tables_for_natsql2sql.json", + "input": "./dbgpt_hub_sql/output/pred/pred_sql_dev_skeleton.sql", + "gold": "./dbgpt_hub_sql/data/eval_data/gold.txt", + "gold_natsql": "./dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt", + "db": "./dbgpt_hub_sql/data/spider/database", + "table": "./dbgpt_hub_sql/data/eval_data/tables.json", + "table_natsql": "./dbgpt_hub_sql/data/eval_data/tables_for_natsql2sql.json", "etype": "exec", "plug_value": True, "keep_distict": False, @@ -499,33 +505,33 @@ start_evaluate(evaluate_args) 默认QLoRA微调,运行命令: ```bash -poetry run sh dbgpt_hub/scripts/train_sft.sh +poetry run sh dbgpt_hub_sql/scripts/train_sft.sh ``` -微调后的模型权重会默认保存到adapter文件夹下面,即dbgpt_hub/output/adapter目录中。 +微调后的模型权重会默认保存到adapter文件夹下面,即dbgpt_hub_sql/output/adapter目录中。 **如果使用多卡训练,想要用deepseed** ,则将train_sft.sh中默认的内容进行更改, 调整为: ``` -CUDA_VISIBLE_DEVICES=0 python dbgpt_hub/train/sft_train.py \ +CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/train/sft_train.py \ --quantization_bit 4 \ ... ``` 更改为: ``` -deepspeed --num_gpus 2 dbgpt_hub/train/sft_train.py \ - --deepspeed dbgpt_hub/configs/ds_config.json \ +deepspeed --num_gpus 2 dbgpt_hub_sql/train/sft_train.py \ + --deepspeed dbgpt_hub_sql/configs/ds_config.json \ --quantization_bit 4 \ ... ``` 如果需要指定对应的显卡id而不是默认的前两个如3,4,可以如下 ``` -deepspeed --include localhost:3,4 dbgpt_hub/train/sft_train.py \ - --deepspeed dbgpt_hub/configs/ds_config.json \ +deepspeed --include localhost:3,4 dbgpt_hub_sql/train/sft_train.py \ + --deepspeed dbgpt_hub_sql/configs/ds_config.json \ --quantization_bit 4 \ ... ``` -其他省略(...)的部分均保持一致即可。 如果想要更改默认的deepseed配置,进入 `dbgpt_hub/configs` 目录,在ds_config.json 更改即可,默认为stage2的策略。 +其他省略(...)的部分均保持一致即可。 如果想要更改默认的deepseed配置,进入 `dbgpt_hub_sql/configs` 目录,在ds_config.json 更改即可,默认为stage2的策略。 脚本中微调时不同模型对应的关键参数lora_target 和 template,如下表: @@ -550,10 +556,10 @@ deepspeed --include localhost:3,4 dbgpt_hub/train/sft_train.py \ `train_sft.sh`中其他关键参数含义: > quantization_bit:是否量化,取值为[4或者8] > model_name_or_path: LLM模型的路径 -> dataset: 取值为训练数据集的配置名字,对应在dbgpt_hub/data/dataset_info.json 中外层key值,如example_text2sql。 +> dataset: 取值为训练数据集的配置名字,对应在dbgpt_hub_sql/data/dataset_info.json 中外层key值,如example_text2sql。 > max_source_length: 输入模型的文本长度,如果计算资源支持,可以尽能设大,如1024或者2048。 > max_target_length: 输出模型的sql内容长度,设置为512一般足够。 -> output_dir : SFT微调时Peft模块输出的路径,默认设置在dbgpt_hub/output/adapter/路径下 。 +> output_dir : SFT微调时Peft模块输出的路径,默认设置在dbgpt_hub_sql/output/adapter/路径下 。 > per_device_train_batch_size : batch的大小,如果计算资源支持,可以设置为更大,默认为1。 > gradient_accumulation_steps : 梯度更新的累计steps值 > save_steps : 模型保存的ckpt的steps大小值,默认可以设置为100。 @@ -563,13 +569,13 @@ deepspeed --include localhost:3,4 dbgpt_hub/train/sft_train.py \ ### 3.4、模型预测 -项目目录下`./dbgpt_hub/`下的`output/pred/`,此文件路径为关于模型预测结果默认输出的位置(如果没有则建上)。 +项目目录下`./dbgpt_hub_sql/`下的`output/pred/`,此文件路径为关于模型预测结果默认输出的位置(如果没有则建上)。 预测运行命令: ```bash -poetry run sh ./dbgpt_hub/scripts/predict_sft.sh +poetry run sh ./dbgpt_hub_sql/scripts/predict_sft.sh ``` 脚本中默认带着参数`--quantization_bit `为QLoRA的预测,去掉即为LoRA的预测方式。 -其中参数`predicted_input_filename` 为要预测的数据集文件, `--predicted_out_filename` 的值为模型预测的结果文件名。默认结果保存在`dbgpt_hub/output/pred`目录。 +其中参数`predicted_input_filename` 为要预测的数据集文件, `--predicted_out_filename` 的值为模型预测的结果文件名。默认结果保存在`dbgpt_hub_sql/output/pred`目录。 ### 3.5、模型权重 @@ -578,7 +584,7 @@ poetry run sh ./dbgpt_hub/scripts/predict_sft.sh #### 3.5.1 模型和微调权重合并 如果你需要将训练的基础模型和微调的Peft模块的权重合并,导出一个完整的模型。则运行如下模型导出脚本: ```bash -poetry run sh ./dbgpt_hub/scripts/export_merge.sh +poetry run sh ./dbgpt_hub_sql/scripts/export_merge.sh ``` 注意将脚本中的相关参数路径值替换为你项目所对应的路径。 @@ -588,7 +594,7 @@ poetry run sh ./dbgpt_hub/scripts/export_merge.sh 运行以下命令来: ```bash -poetry run python dbgpt_hub/eval/evaluation.py --plug_value --input Your_model_pred_file +poetry run python dbgpt_hub_sql/eval/evaluation.py --plug_value --input Your_model_pred_file ``` 你可以在[这里](docs/eval_llm_result.md)找到我们最新的评估和实验结果。 **注意**: 默认的代码中指向的数据库为从[Spider官方网站](https://yale-lily.github.io/spider)下载的大小为95M的database,如果你需要使用基于Spider的[test-suite](https://github.com/taoyds/test-suite-sql-eval)中的数据库(大小1.27G),请先下载链接中的数据库到自定义目录,并在上述评估命令中增加参数和值,形如`--db Your_download_db_path`。 diff --git a/dbgpt_hub/eval/evaluation_api.py b/dbgpt_hub/eval/evaluation_api.py deleted file mode 100644 index 77ab00fd..00000000 --- a/dbgpt_hub/eval/evaluation_api.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Optional, Dict, Any - -from dbgpt_hub.eval import evaluation - - -def start_evaluate( - args: Optional[Dict[str, Any]] = None, -): - # Arguments for evaluation - if args is None: - args = { - "input": "./dbgpt_hub/output/pred/pred_sql_dev_skeleton.sql", - "gold": "./dbgpt_hub/data/eval_data/gold.txt", - "gold_natsql": "./dbgpt_hub/data/eval_data/gold_natsql2sql.txt", - "db": "./dbgpt_hub/data/spider/database", - "table": "./dbgpt_hub/data/eval_data/tables.json", - "table_natsql": "./dbgpt_hub/data/eval_data/tables_for_natsql2sql.json", - "etype": "exec", - "plug_value": True, - "keep_distict": False, - "progress_bar_for_each_datapoint": False, - "natsql": False, - } - else: - args = args - - # Execute evaluation - evaluation.evaluate_api(args) - - -if __name__ == "__main__": - start_evaluate() diff --git a/dbgpt_hub/scripts/gen_train_eval_data.sh b/dbgpt_hub/scripts/gen_train_eval_data.sh deleted file mode 100644 index e80e7760..00000000 --- a/dbgpt_hub/scripts/gen_train_eval_data.sh +++ /dev/null @@ -1,2 +0,0 @@ -# base spider dataset ,produce train and dev data -python dbgpt_hub/data_process/sql_data_process.py \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 8f82af68..0f47d43e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "accelerate" @@ -39,92 +39,104 @@ files = [ {file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"}, ] +[[package]] +name = "aiohappyeyeballs" +version = "2.3.5" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.3.5-py3-none-any.whl", hash = "sha256:4d6dea59215537dbc746e93e779caea8178c866856a721c9c660d7a5a7b8be03"}, + {file = "aiohappyeyeballs-2.3.5.tar.gz", hash = "sha256:6fa48b9f1317254f122a07a131a86b71ca6946ca989ce6326fff54a99a920105"}, +] + [[package]] name = "aiohttp" -version = "3.9.1" +version = "3.10.3" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, - {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, - {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, - {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, - {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, - {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, - {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, - {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, - {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, - {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, - {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, - {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, + {file = "aiohttp-3.10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cc36cbdedf6f259371dbbbcaae5bb0e95b879bc501668ab6306af867577eb5db"}, + {file = "aiohttp-3.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85466b5a695c2a7db13eb2c200af552d13e6a9313d7fa92e4ffe04a2c0ea74c1"}, + {file = "aiohttp-3.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71bb1d97bfe7e6726267cea169fdf5df7658831bb68ec02c9c6b9f3511e108bb"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baec1eb274f78b2de54471fc4c69ecbea4275965eab4b556ef7a7698dee18bf2"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13031e7ec1188274bad243255c328cc3019e36a5a907978501256000d57a7201"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bbc55a964b8eecb341e492ae91c3bd0848324d313e1e71a27e3d96e6ee7e8e8"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8cc0564b286b625e673a2615ede60a1704d0cbbf1b24604e28c31ed37dc62aa"}, + {file = "aiohttp-3.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f817a54059a4cfbc385a7f51696359c642088710e731e8df80d0607193ed2b73"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8542c9e5bcb2bd3115acdf5adc41cda394e7360916197805e7e32b93d821ef93"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:671efce3a4a0281060edf9a07a2f7e6230dca3a1cbc61d110eee7753d28405f7"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0974f3b5b0132edcec92c3306f858ad4356a63d26b18021d859c9927616ebf27"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:44bb159b55926b57812dca1b21c34528e800963ffe130d08b049b2d6b994ada7"}, + {file = "aiohttp-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6ae9ae382d1c9617a91647575255ad55a48bfdde34cc2185dd558ce476bf16e9"}, + {file = "aiohttp-3.10.3-cp310-cp310-win32.whl", hash = "sha256:aed12a54d4e1ee647376fa541e1b7621505001f9f939debf51397b9329fd88b9"}, + {file = "aiohttp-3.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:b51aef59370baf7444de1572f7830f59ddbabd04e5292fa4218d02f085f8d299"}, + {file = "aiohttp-3.10.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e021c4c778644e8cdc09487d65564265e6b149896a17d7c0f52e9a088cc44e1b"}, + {file = "aiohttp-3.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:24fade6dae446b183e2410a8628b80df9b7a42205c6bfc2eff783cbeedc224a2"}, + {file = "aiohttp-3.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bc8e9f15939dacb0e1f2d15f9c41b786051c10472c7a926f5771e99b49a5957f"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5a9ec959b5381271c8ec9310aae1713b2aec29efa32e232e5ef7dcca0df0279"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a5d0ea8a6467b15d53b00c4e8ea8811e47c3cc1bdbc62b1aceb3076403d551f"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9ed607dbbdd0d4d39b597e5bf6b0d40d844dfb0ac6a123ed79042ef08c1f87e"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3e66d5b506832e56add66af88c288c1d5ba0c38b535a1a59e436b300b57b23e"}, + {file = "aiohttp-3.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fda91ad797e4914cca0afa8b6cccd5d2b3569ccc88731be202f6adce39503189"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:61ccb867b2f2f53df6598eb2a93329b5eee0b00646ee79ea67d68844747a418e"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6d881353264e6156f215b3cb778c9ac3184f5465c2ece5e6fce82e68946868ef"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b031ce229114825f49cec4434fa844ccb5225e266c3e146cb4bdd025a6da52f1"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5337cc742a03f9e3213b097abff8781f79de7190bbfaa987bd2b7ceb5bb0bdec"}, + {file = "aiohttp-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab3361159fd3dcd0e48bbe804006d5cfb074b382666e6c064112056eb234f1a9"}, + {file = "aiohttp-3.10.3-cp311-cp311-win32.whl", hash = "sha256:05d66203a530209cbe40f102ebaac0b2214aba2a33c075d0bf825987c36f1f0b"}, + {file = "aiohttp-3.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:70b4a4984a70a2322b70e088d654528129783ac1ebbf7dd76627b3bd22db2f17"}, + {file = "aiohttp-3.10.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:166de65e2e4e63357cfa8417cf952a519ac42f1654cb2d43ed76899e2319b1ee"}, + {file = "aiohttp-3.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7084876352ba3833d5d214e02b32d794e3fd9cf21fdba99cff5acabeb90d9806"}, + {file = "aiohttp-3.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d98c604c93403288591d7d6d7d6cc8a63459168f8846aeffd5b3a7f3b3e5e09"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d73b073a25a0bb8bf014345374fe2d0f63681ab5da4c22f9d2025ca3e3ea54fc"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8da6b48c20ce78f5721068f383e0e113dde034e868f1b2f5ee7cb1e95f91db57"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a9dcdccf50284b1b0dc72bc57e5bbd3cc9bf019060dfa0668f63241ccc16aa7"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56fb94bae2be58f68d000d046172d8b8e6b1b571eb02ceee5535e9633dcd559c"}, + {file = "aiohttp-3.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf75716377aad2c718cdf66451c5cf02042085d84522aec1f9246d3e4b8641a6"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6c51ed03e19c885c8e91f574e4bbe7381793f56f93229731597e4a499ffef2a5"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b84857b66fa6510a163bb083c1199d1ee091a40163cfcbbd0642495fed096204"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c124b9206b1befe0491f48185fd30a0dd51b0f4e0e7e43ac1236066215aff272"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3461d9294941937f07bbbaa6227ba799bc71cc3b22c40222568dc1cca5118f68"}, + {file = "aiohttp-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:08bd0754d257b2db27d6bab208c74601df6f21bfe4cb2ec7b258ba691aac64b3"}, + {file = "aiohttp-3.10.3-cp312-cp312-win32.whl", hash = "sha256:7f9159ae530297f61a00116771e57516f89a3de6ba33f314402e41560872b50a"}, + {file = "aiohttp-3.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:e1128c5d3a466279cb23c4aa32a0f6cb0e7d2961e74e9e421f90e74f75ec1edf"}, + {file = "aiohttp-3.10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d1100e68e70eb72eadba2b932b185ebf0f28fd2f0dbfe576cfa9d9894ef49752"}, + {file = "aiohttp-3.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a541414578ff47c0a9b0b8b77381ea86b0c8531ab37fc587572cb662ccd80b88"}, + {file = "aiohttp-3.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d5548444ef60bf4c7b19ace21f032fa42d822e516a6940d36579f7bfa8513f9c"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba2e838b5e6a8755ac8297275c9460e729dc1522b6454aee1766c6de6d56e5e"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48665433bb59144aaf502c324694bec25867eb6630fcd831f7a893ca473fcde4"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bac352fceed158620ce2d701ad39d4c1c76d114255a7c530e057e2b9f55bdf9f"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b0f670502100cdc567188c49415bebba947eb3edaa2028e1a50dd81bd13363f"}, + {file = "aiohttp-3.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b09f38a67679e32d380fe512189ccb0b25e15afc79b23fbd5b5e48e4fc8fd9"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:cd788602e239ace64f257d1c9d39898ca65525583f0fbf0988bcba19418fe93f"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:214277dcb07ab3875f17ee1c777d446dcce75bea85846849cc9d139ab8f5081f"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:32007fdcaab789689c2ecaaf4b71f8e37bf012a15cd02c0a9db8c4d0e7989fa8"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:123e5819bfe1b87204575515cf448ab3bf1489cdeb3b61012bde716cda5853e7"}, + {file = "aiohttp-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:812121a201f0c02491a5db335a737b4113151926a79ae9ed1a9f41ea225c0e3f"}, + {file = "aiohttp-3.10.3-cp38-cp38-win32.whl", hash = "sha256:b97dc9a17a59f350c0caa453a3cb35671a2ffa3a29a6ef3568b523b9113d84e5"}, + {file = "aiohttp-3.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:3731a73ddc26969d65f90471c635abd4e1546a25299b687e654ea6d2fc052394"}, + {file = "aiohttp-3.10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38d91b98b4320ffe66efa56cb0f614a05af53b675ce1b8607cdb2ac826a8d58e"}, + {file = "aiohttp-3.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9743fa34a10a36ddd448bba8a3adc2a66a1c575c3c2940301bacd6cc896c6bf1"}, + {file = "aiohttp-3.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7c126f532caf238031c19d169cfae3c6a59129452c990a6e84d6e7b198a001dc"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:926e68438f05703e500b06fe7148ef3013dd6f276de65c68558fa9974eeb59ad"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:434b3ab75833accd0b931d11874e206e816f6e6626fd69f643d6a8269cd9166a"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d35235a44ec38109b811c3600d15d8383297a8fab8e3dec6147477ec8636712a"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59c489661edbd863edb30a8bd69ecb044bd381d1818022bc698ba1b6f80e5dd1"}, + {file = "aiohttp-3.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50544fe498c81cb98912afabfc4e4d9d85e89f86238348e3712f7ca6a2f01dab"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09bc79275737d4dc066e0ae2951866bb36d9c6b460cb7564f111cc0427f14844"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:af4dbec58e37f5afff4f91cdf235e8e4b0bd0127a2a4fd1040e2cad3369d2f06"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b22cae3c9dd55a6b4c48c63081d31c00fc11fa9db1a20c8a50ee38c1a29539d2"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ba562736d3fbfe9241dad46c1a8994478d4a0e50796d80e29d50cabe8fbfcc3f"}, + {file = "aiohttp-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f25d6c4e82d7489be84f2b1c8212fafc021b3731abdb61a563c90e37cced3a21"}, + {file = "aiohttp-3.10.3-cp39-cp39-win32.whl", hash = "sha256:b69d832e5f5fa15b1b6b2c8eb6a9fd2c0ec1fd7729cb4322ed27771afc9fc2ac"}, + {file = "aiohttp-3.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:673bb6e3249dc8825df1105f6ef74e2eab779b7ff78e96c15cadb78b04a83752"}, + {file = "aiohttp-3.10.3.tar.gz", hash = "sha256:21650e7032cc2d31fc23d353d7123e771354f2a3d5b05a5647fc30fea214e696"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" @@ -133,7 +145,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -151,37 +163,47 @@ frozenlist = ">=1.1.0" [[package]] name = "altair" -version = "5.2.0" +version = "5.4.0" description = "Vega-Altair: A declarative statistical visualization library for Python." optional = false python-versions = ">=3.8" files = [ - {file = "altair-5.2.0-py3-none-any.whl", hash = "sha256:8c4888ad11db7c39f3f17aa7f4ea985775da389d79ac30a6c22856ab238df399"}, - {file = "altair-5.2.0.tar.gz", hash = "sha256:2ad7f0c8010ebbc46319cc30febfb8e59ccf84969a201541c207bc3a4fa6cf81"}, + {file = "altair-5.4.0-py3-none-any.whl", hash = "sha256:86be974867007cfdf5c92d6f89926535546a4d00e0ea6c1745ef4d5937aad9df"}, + {file = "altair-5.4.0.tar.gz", hash = "sha256:27c69e93d85b7bb3c98fa3626ef7e6bc6939a1466a55a8f8bf68c4bff31cf030"}, ] [package.dependencies] jinja2 = "*" jsonschema = ">=3.0" -numpy = "*" +narwhals = ">=1.1.0" packaging = "*" -pandas = ">=0.25" -toolz = "*" -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.10.0", markers = "python_version < \"3.13\""} [package.extras] -dev = ["anywidget", "geopandas", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pyarrow (>=11)", "pytest", "pytest-cov", "ruff (>=0.1.3)", "types-jsonschema", "types-setuptools", "vega-datasets", "vegafusion[embed] (>=1.4.0)", "vl-convert-python (>=1.1.0)"] -doc = ["docutils", "jinja2", "myst-parser", "numpydoc", "pillow (>=9,<10)", "pydata-sphinx-theme (>=0.14.1)", "scipy", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] +all = ["altair-tiles (>=0.3.0)", "anywidget (>=0.9.0)", "numpy", "pandas (>=0.25.3)", "pyarrow (>=11)", "vega-datasets (>=0.9.0)", "vegafusion[embed] (>=1.6.6)", "vl-convert-python (>=1.6.0)"] +dev = ["geopandas", "hatch", "ibis-framework[polars]", "ipython[kernel]", "mistune", "mypy", "pandas (>=0.25.3)", "pandas-stubs", "polars (>=0.20.3)", "pytest", "pytest-cov", "pytest-xdist[psutil] (>=3.5,<4.0)", "ruff (>=0.5.7)", "types-jsonschema", "types-setuptools"] +doc = ["docutils", "jinja2", "myst-parser", "numpydoc", "pillow (>=9,<10)", "pydata-sphinx-theme (>=0.14.1)", "scipy", "sphinx (>=8.0.0)", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.2" +description = "ANTLR 4.13.2 runtime for Python 3" +optional = false +python-versions = "*" +files = [ + {file = "antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8"}, + {file = "antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916"}, +] [[package]] name = "anyio" -version = "4.2.0" +version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, - {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] [package.dependencies] @@ -208,13 +230,13 @@ files = [ [[package]] name = "astroid" -version = "3.0.2" +version = "3.2.4" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.8.0" files = [ - {file = "astroid-3.0.2-py3-none-any.whl", hash = "sha256:d6e62862355f60e716164082d6b4b041d38e2a8cf1c7cd953ded5108bac8ff5c"}, - {file = "astroid-3.0.2.tar.gz", hash = "sha256:4a61cf0a59097c7bb52689b0fd63717cd2a8a14dc9f1eee97b82d814881c8c91"}, + {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, + {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, ] [package.dependencies] @@ -233,22 +255,22 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "bitsandbytes" @@ -309,13 +331,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -444,64 +466,64 @@ files = [ [[package]] name = "contourpy" -version = "1.2.0" +version = "1.2.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, ] [package.dependencies] -numpy = ">=1.20,<2.0" +numpy = ">=1.20" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] @@ -648,13 +670,13 @@ files = [ [[package]] name = "docstring-parser" -version = "0.15" +version = "0.16" description = "Parse Python docstrings in reST, Google and Numpydoc format" optional = false python-versions = ">=3.6,<4.0" files = [ - {file = "docstring_parser-0.15-py3-none-any.whl", hash = "sha256:d1679b86250d269d06a99670924d6bce45adc00b08069dae8c47d98e89b667a9"}, - {file = "docstring_parser-0.15.tar.gz", hash = "sha256:48ddc093e8b1865899956fcc03b03e66bb7240c310fac5af81814580c55bf682"}, + {file = "docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637"}, + {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"}, ] [[package]] @@ -706,13 +728,13 @@ torch = ["torch"] [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -741,86 +763,87 @@ test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==23.1.0)", "coverage[toml] (>=6 [[package]] name = "ffmpy" -version = "0.3.1" -description = "A simple Python wrapper for ffmpeg" +version = "0.4.0" +description = "A simple Python wrapper for FFmpeg" optional = false -python-versions = "*" +python-versions = "<4.0.0,>=3.8.1" files = [ - {file = "ffmpy-0.3.1.tar.gz", hash = "sha256:a173b8f42c7c669ff722df7fb31e1e870067713697f745224fa6e621b82f0004"}, + {file = "ffmpy-0.4.0-py3-none-any.whl", hash = "sha256:39c0f20c5b465e7f8d29a5191f3a7d7675a8c546d9d985de8921151cd9b59e14"}, + {file = "ffmpy-0.4.0.tar.gz", hash = "sha256:131b57794e802ad555f579007497f7a3d0cab0583d37496c685b8acae4837b1d"}, ] [[package]] name = "filelock" -version = "3.13.1" +version = "3.15.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "fonttools" -version = "4.47.2" +version = "4.53.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, - {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, - {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, - {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, - {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, - {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, - {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, - {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, - {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, - {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, - {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, - {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, - {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, + {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, + {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, + {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, + {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, + {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, + {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, + {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, + {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, + {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, + {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, + {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, + {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] @@ -981,20 +1004,21 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.41" +version = "3.1.43" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, - {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, + {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, + {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] +doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] [[package]] name = "gradio" @@ -1081,13 +1105,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.2" +version = "1.0.5" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"}, - {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] [package.dependencies] @@ -1098,17 +1122,17 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.23.0)"] +trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" -version = "0.26.0" +version = "0.27.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"}, - {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"}, + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, ] [package.dependencies] @@ -1159,29 +1183,29 @@ typing = ["pydantic (<2.0)", "types-PyYAML", "types-requests", "types-simplejson [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] name = "importlib-resources" -version = "6.1.1" +version = "6.4.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, + {file = "importlib_resources-6.4.2-py3-none-any.whl", hash = "sha256:8bba8c54a8a3afaa1419910845fa26ebd706dc716dd208d9b158b4b6966f5c5c"}, + {file = "importlib_resources-6.4.2.tar.gz", hash = "sha256:6cbfbefc449cc6e2095dd184691b7a12a04f40bc75dd4c55d31c34f174cdf57a"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "isort" @@ -1197,6 +1221,16 @@ files = [ [package.extras] colors = ["colorama (>=0.4.6)"] +[[package]] +name = "jaro-winkler" +version = "2.0.3" +description = "Original, standard and customisable versions of the Jaro-Winkler functions." +optional = false +python-versions = "*" +files = [ + {file = "jaro_winkler-2.0.3-py3-none-any.whl", hash = "sha256:9ad42a94eb110351e72dd5b9e0a0f1053b0760761d676f9be35da19ea80d511b"}, +] + [[package]] name = "jieba" version = "0.42.1" @@ -1209,13 +1243,13 @@ files = [ [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1224,17 +1258,126 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jiter" +version = "0.5.0" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, + {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, + {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, + {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, + {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, + {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, + {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, + {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, + {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, + {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, + {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, + {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, +] + [[package]] name = "joblib" -version = "1.3.2" +version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false +python-versions = ">=3.8" +files = [ + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, +] + +[[package]] +name = "jpype1" +version = "1.5.0" +description = "A Python to Java bridge." +optional = false python-versions = ">=3.7" files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, + {file = "JPype1-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7b6b1af3f9e0033080e3532c2686a224cd14706f36c14ef36160a2a1db751a17"}, + {file = "JPype1-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ed36803734b812c78ca9228dd3291128ac80b2a1d06c293d60b5c2f049040b4"}, + {file = "JPype1-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a02b2f05621c119d35f4acc501b4261eeb48a4af7cc13d9afc2e9eb316c4bd29"}, + {file = "JPype1-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:0b40c76e075d4fed2c83340bb30b7b95bbc396fd370c564c6b608faab00ea4ef"}, + {file = "JPype1-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:85a31b30b482eaf788b21af421e0750aa0be7758307314178143a76632b0ad04"}, + {file = "JPype1-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20f0229d7aaa04c480a7fa271cbd161ded58cecd838ba52a4e01bea21b60a058"}, + {file = "JPype1-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ef976e0f3b2e9604469f449f30bb2031941a159a0637f4c16adb2c5076f3e81"}, + {file = "JPype1-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:2bc987205ff8d2d8e36dfbef05430e0638e85d4fee1166ba58ebfa6f7a67cdf8"}, + {file = "JPype1-1.5.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8714bfaf09d6877160bc7ac97812016ccb09f6d7ba5ea2a9f519178aefcca93f"}, + {file = "JPype1-1.5.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1696196a8b6ea2f8ad3280249014406de919088494b94a84581da01752d98dca"}, + {file = "JPype1-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8649b526eccb4047881ad60bdb1974eb71a09cdb7f8bda17c96fdc0f9a3f2d1e"}, + {file = "JPype1-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:9aafc00b00bf8c1b624081e5d4ab87f7752e6c7ee6a141cfc332250b05c6d42f"}, + {file = "JPype1-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccb9c786e9b709c6390c89e200036b2080bf668cce118561a0cfd74eae43903f"}, + {file = "JPype1-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa5a27cba59865f034259657fd322ca0a5cde82e691a1180c6a8040d2e0c0788"}, + {file = "JPype1-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cff64ac1980d899841cbc561b097eeec8106b34d70c42342b211b83005562f88"}, + {file = "JPype1-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:439e006a3a74bd26e15ab6bca873e3572087667b5525cb82244a1945dd607d80"}, + {file = "JPype1-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b437ce6fadaf5562576b2b5919fa0a5174a92f70a7d903f0faf8dff6f34199fa"}, + {file = "JPype1-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:a01eba1fdf5869e46dc7336a8ff2a97a66d209c8d5f23a64f7f23b70e55ffc0f"}, + {file = "JPype1-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8d9bdd137e7cecabebd46ce7d3539fd53745018974d0bc3ec0a3634c2e53af5"}, + {file = "JPype1-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9f8f01474186bf69bf05dd9a5ef4d5b2159980cfc9d8da91e021d682cc32552"}, + {file = "JPype1-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7aa1469d75f9b310f709b61bb2faa4cef4cbd4d670531ad1d1bb53e29cfda05"}, + {file = "JPype1-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:6bfdc101c56cab0b6b16e974fd8cbb0b3f7f14178286b8b55413c5d82d5f2bea"}, + {file = "JPype1-1.5.0.tar.gz", hash = "sha256:425a6e1966afdd5848b60c2688bcaeb7e40ba504a686f1114589668e0631e878"}, ] +[package.dependencies] +packaging = "*" + +[package.extras] +docs = ["readthedocs-sphinx-ext", "sphinx", "sphinx-rtd-theme"] +tests = ["pytest"] + [[package]] name = "jsonlines" version = "4.0.0" @@ -1251,13 +1394,13 @@ attrs = ">=19.2.0" [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] [package.dependencies] @@ -1268,7 +1411,7 @@ rpds-py = ">=0.7.1" [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] [[package]] name = "jsonschema-specifications" @@ -1492,39 +1635,51 @@ files = [ [[package]] name = "matplotlib" -version = "3.8.2" +version = "3.9.2" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, ] [package.dependencies] @@ -1532,12 +1687,15 @@ contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" +numpy = ">=1.23" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + [[package]] name = "mccabe" version = "0.7.0" @@ -1579,85 +1737,101 @@ tests = ["pytest (>=4.6)"] [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" optional = false python-versions = ">=3.7" files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] [[package]] @@ -1699,22 +1873,39 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "narwhals" +version = "1.4.1" +description = "Extremely lightweight compatibility layer between dataframe libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "narwhals-1.4.1-py3-none-any.whl", hash = "sha256:333bd36999d380926d463f62254ba9a5a6860949d83105edd910b6fff84de253"}, + {file = "narwhals-1.4.1.tar.gz", hash = "sha256:9e77fc5f11e03995344c2323cd0eea17efc5e6c54a659790e7004fa4fbf02a28"}, +] + +[package.extras] +dask = ["dask[dataframe] (>=2024.7)"] +pandas = ["pandas (>=0.25.3)"] +polars = ["polars (>=0.20.3)"] +pyarrow = ["pyarrow (>=11.0.0)"] + [[package]] name = "networkx" -version = "3.2.1" +version = "3.3" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, + {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, + {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, ] [package.extras] -default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] @@ -1771,61 +1962,58 @@ twitter = ["twython"] [[package]] name = "nodeenv" -version = "1.8.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[package.dependencies] -setuptools = "*" - [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] @@ -1949,13 +2137,14 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.3.101" +version = "12.6.20" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl", hash = "sha256:64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c"}, - {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-win_amd64.whl", hash = "sha256:1b2e317e437433753530792f13eece58f0aec21a2b05903be7bffe58a606cbd1"}, + {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_aarch64.whl", hash = "sha256:84fb38465a5bc7c70cbc320cfd0963eb302ee25a5e939e9f512bbba55b6072fb"}, + {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_x86_64.whl", hash = "sha256:562ab97ea2c23164823b2a89cb328d01d45cb99634b8c65fe7cd60d14562bd79"}, + {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-win_amd64.whl", hash = "sha256:ed3c43a17f37b0c922a919203d2d36cbef24d41cc3e6b625182f8b58203644f6"}, ] [[package]] @@ -1971,140 +2160,148 @@ files = [ [[package]] name = "openai" -version = "1.9.0" +version = "1.40.6" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.9.0-py3-none-any.whl", hash = "sha256:5774a0582ed82f6de92200ed5024e03e272b93e04e9d31caeda5fb80f63df50d"}, - {file = "openai-1.9.0.tar.gz", hash = "sha256:3e9947a544556c051fa138a4def5bd8b468364ec52803c6628532ab949ddce55"}, + {file = "openai-1.40.6-py3-none-any.whl", hash = "sha256:b36372124a779381a420a34dd96f762baa748b6bdfaf83a6b9f2745f72ccc1c5"}, + {file = "openai-1.40.6.tar.gz", hash = "sha256:2239232bcb7f4bd4ce8e02544b5769618582411cf399816d96686d1b6c1e5c8d"}, ] [package.dependencies] anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" tqdm = ">4" -typing-extensions = ">=4.7,<5" +typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "orjson" -version = "3.9.12" +version = "3.10.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6b4e2bed7d00753c438e83b613923afdd067564ff7ed696bfe3a7b073a236e07"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd1b8ec63f0bf54a50b498eedeccdca23bd7b658f81c524d18e410c203189365"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab8add018a53665042a5ae68200f1ad14c7953fa12110d12d41166f111724656"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12756a108875526b76e505afe6d6ba34960ac6b8c5ec2f35faf73ef161e97e07"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:890e7519c0c70296253660455f77e3a194554a3c45e42aa193cdebc76a02d82b"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d664880d7f016efbae97c725b243b33c2cbb4851ddc77f683fd1eec4a7894146"}, - {file = "orjson-3.9.12-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cfdaede0fa5b500314ec7b1249c7e30e871504a57004acd116be6acdda3b8ab3"}, - {file = "orjson-3.9.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6492ff5953011e1ba9ed1bf086835fd574bd0a3cbe252db8e15ed72a30479081"}, - {file = "orjson-3.9.12-cp310-none-win32.whl", hash = "sha256:29bf08e2eadb2c480fdc2e2daae58f2f013dff5d3b506edd1e02963b9ce9f8a9"}, - {file = "orjson-3.9.12-cp310-none-win_amd64.whl", hash = "sha256:0fc156fba60d6b50743337ba09f052d8afc8b64595112996d22f5fce01ab57da"}, - {file = "orjson-3.9.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2849f88a0a12b8d94579b67486cbd8f3a49e36a4cb3d3f0ab352c596078c730c"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3186b18754befa660b31c649a108a915493ea69b4fc33f624ed854ad3563ac65"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbbf313c9fb9d4f6cf9c22ced4b6682230457741daeb3d7060c5d06c2e73884a"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e8cd005b3926c3db9b63d264bd05e1bf4451787cc79a048f27f5190a9a0311"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59feb148392d9155f3bfed0a2a3209268e000c2c3c834fb8fe1a6af9392efcbf"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4ae815a172a1f073b05b9e04273e3b23e608a0858c4e76f606d2d75fcabde0c"}, - {file = "orjson-3.9.12-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed398f9a9d5a1bf55b6e362ffc80ac846af2122d14a8243a1e6510a4eabcb71e"}, - {file = "orjson-3.9.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d3cfb76600c5a1e6be91326b8f3b83035a370e727854a96d801c1ea08b708073"}, - {file = "orjson-3.9.12-cp311-none-win32.whl", hash = "sha256:a2b6f5252c92bcab3b742ddb3ac195c0fa74bed4319acd74f5d54d79ef4715dc"}, - {file = "orjson-3.9.12-cp311-none-win_amd64.whl", hash = "sha256:c95488e4aa1d078ff5776b58f66bd29d628fa59adcb2047f4efd3ecb2bd41a71"}, - {file = "orjson-3.9.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d6ce2062c4af43b92b0221ed4f445632c6bf4213f8a7da5396a122931377acd9"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:950951799967558c214cd6cceb7ceceed6f81d2c3c4135ee4a2c9c69f58aa225"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2dfaf71499d6fd4153f5c86eebb68e3ec1bf95851b030a4b55c7637a37bbdee4"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:659a8d7279e46c97661839035a1a218b61957316bf0202674e944ac5cfe7ed83"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af17fa87bccad0b7f6fd8ac8f9cbc9ee656b4552783b10b97a071337616db3e4"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd52dec9eddf4c8c74392f3fd52fa137b5f2e2bed1d9ae958d879de5f7d7cded"}, - {file = "orjson-3.9.12-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:640e2b5d8e36b970202cfd0799d11a9a4ab46cf9212332cd642101ec952df7c8"}, - {file = "orjson-3.9.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:daa438bd8024e03bcea2c5a92cd719a663a58e223fba967296b6ab9992259dbf"}, - {file = "orjson-3.9.12-cp312-none-win_amd64.whl", hash = "sha256:1bb8f657c39ecdb924d02e809f992c9aafeb1ad70127d53fb573a6a6ab59d549"}, - {file = "orjson-3.9.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f4098c7674901402c86ba6045a551a2ee345f9f7ed54eeffc7d86d155c8427e5"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5586a533998267458fad3a457d6f3cdbddbcce696c916599fa8e2a10a89b24d3"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54071b7398cd3f90e4bb61df46705ee96cb5e33e53fc0b2f47dbd9b000e238e1"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:67426651faa671b40443ea6f03065f9c8e22272b62fa23238b3efdacd301df31"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a0cd56e8ee56b203abae7d482ac0d233dbfb436bb2e2d5cbcb539fe1200a312"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a84a0c3d4841a42e2571b1c1ead20a83e2792644c5827a606c50fc8af7ca4bee"}, - {file = "orjson-3.9.12-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:09d60450cda3fa6c8ed17770c3a88473a16460cd0ff2ba74ef0df663b6fd3bb8"}, - {file = "orjson-3.9.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bc82a4db9934a78ade211cf2e07161e4f068a461c1796465d10069cb50b32a80"}, - {file = "orjson-3.9.12-cp38-none-win32.whl", hash = "sha256:61563d5d3b0019804d782137a4f32c72dc44c84e7d078b89d2d2a1adbaa47b52"}, - {file = "orjson-3.9.12-cp38-none-win_amd64.whl", hash = "sha256:410f24309fbbaa2fab776e3212a81b96a1ec6037259359a32ea79fbccfcf76aa"}, - {file = "orjson-3.9.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e773f251258dd82795fd5daeac081d00b97bacf1548e44e71245543374874bcf"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b159baecfda51c840a619948c25817d37733a4d9877fea96590ef8606468b362"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:975e72e81a249174840d5a8df977d067b0183ef1560a32998be340f7e195c730"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06e42e899dde61eb1851a9fad7f1a21b8e4be063438399b63c07839b57668f6c"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c157e999e5694475a5515942aebeed6e43f7a1ed52267c1c93dcfde7d78d421"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dde1bc7c035f2d03aa49dc8642d9c6c9b1a81f2470e02055e76ed8853cfae0c3"}, - {file = "orjson-3.9.12-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0e9d73cdbdad76a53a48f563447e0e1ce34bcecef4614eb4b146383e6e7d8c9"}, - {file = "orjson-3.9.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:96e44b21fe407b8ed48afbb3721f3c8c8ce17e345fbe232bd4651ace7317782d"}, - {file = "orjson-3.9.12-cp39-none-win32.whl", hash = "sha256:cbd0f3555205bf2a60f8812133f2452d498dbefa14423ba90fe89f32276f7abf"}, - {file = "orjson-3.9.12-cp39-none-win_amd64.whl", hash = "sha256:03ea7ee7e992532c2f4a06edd7ee1553f0644790553a118e003e3c405add41fa"}, - {file = "orjson-3.9.12.tar.gz", hash = "sha256:da908d23a3b3243632b523344403b128722a5f45e278a8343c2bb67538dff0e4"}, + {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, + {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, + {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, + {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, + {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, + {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, + {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, + {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, + {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, + {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, + {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, + {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, + {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, + {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, + {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, + {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, + {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, + {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, + {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, + {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, ] [[package]] name = "packaging" -version = "23.2" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] name = "pandas" -version = "2.2.0" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8108ee1712bb4fa2c16981fba7e68b3f6ea330277f5ca34fa8d557e986a11670"}, - {file = "pandas-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:736da9ad4033aeab51d067fc3bd69a0ba36f5a60f66a527b3d72e2030e63280a"}, - {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e0b4fc3ddceb56ec8a287313bc22abe17ab0eb184069f08fc6a9352a769b18"}, - {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20404d2adefe92aed3b38da41d0847a143a09be982a31b85bc7dd565bdba0f4e"}, - {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ea3ee3f125032bfcade3a4cf85131ed064b4f8dd23e5ce6fa16473e48ebcaf5"}, - {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9670b3ac00a387620489dfc1bca66db47a787f4e55911f1293063a78b108df1"}, - {file = "pandas-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a946f210383c7e6d16312d30b238fd508d80d927014f3b33fb5b15c2f895430"}, - {file = "pandas-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a1b438fa26b208005c997e78672f1aa8138f67002e833312e6230f3e57fa87d5"}, - {file = "pandas-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ce2fbc8d9bf303ce54a476116165220a1fedf15985b09656b4b4275300e920b"}, - {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2707514a7bec41a4ab81f2ccce8b382961a29fbe9492eab1305bb075b2b1ff4f"}, - {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85793cbdc2d5bc32620dc8ffa715423f0c680dacacf55056ba13454a5be5de88"}, - {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cfd6c2491dc821b10c716ad6776e7ab311f7df5d16038d0b7458bc0b67dc10f3"}, - {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a146b9dcacc3123aa2b399df1a284de5f46287a4ab4fbfc237eac98a92ebcb71"}, - {file = "pandas-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbc1b53c0e1fdf16388c33c3cca160f798d38aea2978004dd3f4d3dec56454c9"}, - {file = "pandas-2.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a41d06f308a024981dcaa6c41f2f2be46a6b186b902c94c2674e8cb5c42985bc"}, - {file = "pandas-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:159205c99d7a5ce89ecfc37cb08ed179de7783737cea403b295b5eda8e9c56d1"}, - {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1e1f3861ea9132b32f2133788f3b14911b68102d562715d71bd0013bc45440"}, - {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:761cb99b42a69005dec2b08854fb1d4888fdf7b05db23a8c5a099e4b886a2106"}, - {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a20628faaf444da122b2a64b1e5360cde100ee6283ae8effa0d8745153809a2e"}, - {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f5be5d03ea2073627e7111f61b9f1f0d9625dc3c4d8dda72cc827b0c58a1d042"}, - {file = "pandas-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:a626795722d893ed6aacb64d2401d017ddc8a2341b49e0384ab9bf7112bdec30"}, - {file = "pandas-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f66419d4a41132eb7e9a73dcec9486cf5019f52d90dd35547af11bc58f8637d"}, - {file = "pandas-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57abcaeda83fb80d447f28ab0cc7b32b13978f6f733875ebd1ed14f8fbc0f4ab"}, - {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60f1f7dba3c2d5ca159e18c46a34e7ca7247a73b5dd1a22b6d59707ed6b899a"}, - {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb61dc8567b798b969bcc1fc964788f5a68214d333cade8319c7ab33e2b5d88a"}, - {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:52826b5f4ed658fa2b729264d63f6732b8b29949c7fd234510d57c61dbeadfcd"}, - {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bde2bc699dbd80d7bc7f9cab1e23a95c4375de615860ca089f34e7c64f4a8de7"}, - {file = "pandas-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:3de918a754bbf2da2381e8a3dcc45eede8cd7775b047b923f9006d5f876802ae"}, - {file = "pandas-2.2.0.tar.gz", hash = "sha256:30b83f7c3eb217fb4d1b494a57a2fda5444f17834f5df2de6b2ffff68dc3c8e2"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, ] [package.dependencies] numpy = [ - {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -2129,6 +2326,7 @@ parquet = ["pyarrow (>=10.0.1)"] performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] plot = ["matplotlib (>=3.6.3)"] postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] spss = ["pyreadstat (>=1.2.0)"] sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] @@ -2184,83 +2382,95 @@ test = ["black (>=22.0,<23.0)", "datasets", "diffusers", "hf-doc-builder", "para [[package]] name = "pillow" -version = "10.2.0" +version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] @@ -2269,79 +2479,81 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.1.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "prettytable" -version = "3.9.0" +version = "3.11.0" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" optional = false python-versions = ">=3.8" files = [ - {file = "prettytable-3.9.0-py3-none-any.whl", hash = "sha256:a71292ab7769a5de274b146b276ce938786f56c31cf7cea88b6f3775d82fe8c8"}, - {file = "prettytable-3.9.0.tar.gz", hash = "sha256:f4ed94803c23073a90620b201965e5dc0bccf1760b7a7eaf3158cab8aaffdf34"}, + {file = "prettytable-3.11.0-py3-none-any.whl", hash = "sha256:aa17083feb6c71da11a68b2c213b04675c4af4ce9c541762632ca3f2cb3546dd"}, + {file = "prettytable-3.11.0.tar.gz", hash = "sha256:7e23ca1e68bbfd06ba8de98bf553bf3493264c96d5e8a615c0471025deeba722"}, ] [package.dependencies] wcwidth = "*" [package.extras] -tests = ["pytest", "pytest-cov", "pytest-lazy-fixture"] +tests = ["pytest", "pytest-cov", "pytest-lazy-fixtures"] [[package]] name = "protobuf" -version = "4.25.2" +version = "4.25.4" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, - {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, - {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, - {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, - {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, - {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, - {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, - {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, - {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, - {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, - {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, + {file = "protobuf-4.25.4-cp310-abi3-win32.whl", hash = "sha256:db9fd45183e1a67722cafa5c1da3e85c6492a5383f127c86c4c4aa4845867dc4"}, + {file = "protobuf-4.25.4-cp310-abi3-win_amd64.whl", hash = "sha256:ba3d8504116a921af46499471c63a85260c1a5fc23333154a427a310e015d26d"}, + {file = "protobuf-4.25.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:eecd41bfc0e4b1bd3fa7909ed93dd14dd5567b98c941d6c1ad08fdcab3d6884b"}, + {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4c8a70fdcb995dcf6c8966cfa3a29101916f7225e9afe3ced4395359955d3835"}, + {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3319e073562e2515c6ddc643eb92ce20809f5d8f10fead3332f71c63be6a7040"}, + {file = "protobuf-4.25.4-cp38-cp38-win32.whl", hash = "sha256:7e372cbbda66a63ebca18f8ffaa6948455dfecc4e9c1029312f6c2edcd86c4e1"}, + {file = "protobuf-4.25.4-cp38-cp38-win_amd64.whl", hash = "sha256:051e97ce9fa6067a4546e75cb14f90cf0232dcb3e3d508c448b8d0e4265b61c1"}, + {file = "protobuf-4.25.4-cp39-cp39-win32.whl", hash = "sha256:90bf6fd378494eb698805bbbe7afe6c5d12c8e17fca817a646cd6a1818c696ca"}, + {file = "protobuf-4.25.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac79a48d6b99dfed2729ccccee547b34a1d3d63289c71cef056653a846a2240f"}, + {file = "protobuf-4.25.4-py3-none-any.whl", hash = "sha256:bfbebc1c8e4793cfd58589acfb8a1026be0003e852b9da7db5a4285bde996978"}, + {file = "protobuf-4.25.4.tar.gz", hash = "sha256:0dc4a62cc4052a036ee2204d26fe4d835c62827c855c8a03f29fe6da146b380d"}, ] [[package]] name = "psutil" -version = "5.9.8" +version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, ] [package.extras] @@ -2360,51 +2572,54 @@ files = [ [[package]] name = "pyarrow" -version = "15.0.0" +version = "17.0.0" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.8" files = [ - {file = "pyarrow-15.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:0a524532fd6dd482edaa563b686d754c70417c2f72742a8c990b322d4c03a15d"}, - {file = "pyarrow-15.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a6bdb314affa9c2e0d5dddf3d9cbb9ef4a8dddaa68669975287d47ece67642"}, - {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66958fd1771a4d4b754cd385835e66a3ef6b12611e001d4e5edfcef5f30391e2"}, - {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f500956a49aadd907eaa21d4fff75f73954605eaa41f61cb94fb008cf2e00c6"}, - {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6f87d9c4f09e049c2cade559643424da84c43a35068f2a1c4653dc5b1408a929"}, - {file = "pyarrow-15.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85239b9f93278e130d86c0e6bb455dcb66fc3fd891398b9d45ace8799a871a1e"}, - {file = "pyarrow-15.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b8d43e31ca16aa6e12402fcb1e14352d0d809de70edd185c7650fe80e0769e3"}, - {file = "pyarrow-15.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:fa7cd198280dbd0c988df525e50e35b5d16873e2cdae2aaaa6363cdb64e3eec5"}, - {file = "pyarrow-15.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8780b1a29d3c8b21ba6b191305a2a607de2e30dab399776ff0aa09131e266340"}, - {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0ec198ccc680f6c92723fadcb97b74f07c45ff3fdec9dd765deb04955ccf19"}, - {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036a7209c235588c2f07477fe75c07e6caced9b7b61bb897c8d4e52c4b5f9555"}, - {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2bd8a0e5296797faf9a3294e9fa2dc67aa7f10ae2207920dbebb785c77e9dbe5"}, - {file = "pyarrow-15.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e8ebed6053dbe76883a822d4e8da36860f479d55a762bd9e70d8494aed87113e"}, - {file = "pyarrow-15.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:17d53a9d1b2b5bd7d5e4cd84d018e2a45bc9baaa68f7e6e3ebed45649900ba99"}, - {file = "pyarrow-15.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9950a9c9df24090d3d558b43b97753b8f5867fb8e521f29876aa021c52fda351"}, - {file = "pyarrow-15.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:003d680b5e422d0204e7287bb3fa775b332b3fce2996aa69e9adea23f5c8f970"}, - {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f75fce89dad10c95f4bf590b765e3ae98bcc5ba9f6ce75adb828a334e26a3d40"}, - {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca9cb0039923bec49b4fe23803807e4ef39576a2bec59c32b11296464623dc2"}, - {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ed5a78ed29d171d0acc26a305a4b7f83c122d54ff5270810ac23c75813585e4"}, - {file = "pyarrow-15.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6eda9e117f0402dfcd3cd6ec9bfee89ac5071c48fc83a84f3075b60efa96747f"}, - {file = "pyarrow-15.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a3a6180c0e8f2727e6f1b1c87c72d3254cac909e609f35f22532e4115461177"}, - {file = "pyarrow-15.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:19a8918045993349b207de72d4576af0191beef03ea655d8bdb13762f0cd6eac"}, - {file = "pyarrow-15.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0ec076b32bacb6666e8813a22e6e5a7ef1314c8069d4ff345efa6246bc38593"}, - {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5db1769e5d0a77eb92344c7382d6543bea1164cca3704f84aa44e26c67e320fb"}, - {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2617e3bf9df2a00020dd1c1c6dce5cc343d979efe10bc401c0632b0eef6ef5b"}, - {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:d31c1d45060180131caf10f0f698e3a782db333a422038bf7fe01dace18b3a31"}, - {file = "pyarrow-15.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:c8c287d1d479de8269398b34282e206844abb3208224dbdd7166d580804674b7"}, - {file = "pyarrow-15.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:07eb7f07dc9ecbb8dace0f58f009d3a29ee58682fcdc91337dfeb51ea618a75b"}, - {file = "pyarrow-15.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:47af7036f64fce990bb8a5948c04722e4e3ea3e13b1007ef52dfe0aa8f23cf7f"}, - {file = "pyarrow-15.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93768ccfff85cf044c418bfeeafce9a8bb0cee091bd8fd19011aff91e58de540"}, - {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6ee87fd6892700960d90abb7b17a72a5abb3b64ee0fe8db6c782bcc2d0dc0b4"}, - {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:001fca027738c5f6be0b7a3159cc7ba16a5c52486db18160909a0831b063c4e4"}, - {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:d1c48648f64aec09accf44140dccb92f4f94394b8d79976c426a5b79b11d4fa7"}, - {file = "pyarrow-15.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:972a0141be402bb18e3201448c8ae62958c9c7923dfaa3b3d4530c835ac81aed"}, - {file = "pyarrow-15.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:f01fc5cf49081426429127aa2d427d9d98e1cb94a32cb961d583a70b7c4504e6"}, - {file = "pyarrow-15.0.0.tar.gz", hash = "sha256:876858f549d540898f927eba4ef77cd549ad8d24baa3207cf1b72e5788b50e83"}, + {file = "pyarrow-17.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07"}, + {file = "pyarrow-17.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8"}, + {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047"}, + {file = "pyarrow-17.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087"}, + {file = "pyarrow-17.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977"}, + {file = "pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420"}, + {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4"}, + {file = "pyarrow-17.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03"}, + {file = "pyarrow-17.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22"}, + {file = "pyarrow-17.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a"}, + {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b"}, + {file = "pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7"}, + {file = "pyarrow-17.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204"}, + {file = "pyarrow-17.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c"}, + {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c"}, + {file = "pyarrow-17.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca"}, + {file = "pyarrow-17.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb"}, + {file = "pyarrow-17.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5"}, + {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda"}, + {file = "pyarrow-17.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204"}, + {file = "pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28"}, ] [package.dependencies] -numpy = ">=1.16.6,<2" +numpy = ">=1.16.6" + +[package.extras] +test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] [[package]] name = "pyarrow-hotfix" @@ -2482,32 +2697,31 @@ files = [ [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" -version = "3.0.3" +version = "3.2.6" description = "python code static checker" optional = false python-versions = ">=3.8.0" files = [ - {file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"}, - {file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"}, + {file = "pylint-3.2.6-py3-none-any.whl", hash = "sha256:03c8e3baa1d9fb995b12c1dbe00aa6c4bcef210c2a2634374aedeb22fb4a8f8f"}, + {file = "pylint-3.2.6.tar.gz", hash = "sha256:a5d01678349454806cff6d886fb072294f56a58c4761278c97fb557d708e1eb3"}, ] [package.dependencies] -astroid = ">=3.0.1,<=3.1.0-dev0" +astroid = ">=3.2.4,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -2541,13 +2755,13 @@ rsa = ["cryptography"] [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] [package.extras] @@ -2555,13 +2769,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.348" +version = "1.1.376" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.348-py3-none-any.whl", hash = "sha256:e7d4df504c4c082b5c3725a8c15fc3fda62da5d09fc77994baa77f359a1b62f2"}, - {file = "pyright-1.1.348.tar.gz", hash = "sha256:1c6994546f7ab130b9da8c357f8b2a99bef268b6d8ae2eae292bde66923aa7af"}, + {file = "pyright-1.1.376-py3-none-any.whl", hash = "sha256:0f2473b12c15c46b3207f0eec224c3cea2bdc07cd45dd4a037687cbbca0fbeff"}, + {file = "pyright-1.1.376.tar.gz", hash = "sha256:bffd63b197cd0810395bb3245c06b01f95a85ddf6bfa0e5644ed69c841e954dd"}, ] [package.dependencies] @@ -2573,13 +2787,13 @@ dev = ["twine (>=3.4.1)"] [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -2587,27 +2801,27 @@ six = ">=1.5" [[package]] name = "python-multipart" -version = "0.0.6" +version = "0.0.9" description = "A streaming multipart parser for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, - {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, + {file = "python_multipart-0.0.9-py3-none-any.whl", hash = "sha256:97ca7b8ea7b05f977dc3849c3ba99d51689822fab725c3703af7c866a0c2b215"}, + {file = "python_multipart-0.0.9.tar.gz", hash = "sha256:03f54688c663f1b7977105f021043b0793151e4cb1c1a9d4a11fc13d622c4026"}, ] [package.extras] -dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] +dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatch", "invoke (==2.2.0)", "more-itertools (==10.2.0)", "pbr (==6.0.0)", "pluggy (==1.4.0)", "py (==1.11.0)", "pytest (==8.0.0)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.2.0)", "pyyaml (==6.0.1)", "ruff (==0.2.1)"] [[package]] name = "pytz" -version = "2023.3.post1" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -2672,101 +2886,119 @@ files = [ [[package]] name = "rapidfuzz" -version = "3.6.1" +version = "3.9.6" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" files = [ - {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ac434fc71edda30d45db4a92ba5e7a42c7405e1a54cb4ec01d03cc668c6dcd40"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a791168e119cfddf4b5a40470620c872812042f0621e6a293983a2d52372db0"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a2f3e9df346145c2be94e4d9eeffb82fab0cbfee85bd4a06810e834fe7c03fa"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23de71e7f05518b0bbeef55d67b5dbce3bcd3e2c81e7e533051a2e9401354eb0"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d056e342989248d2bdd67f1955bb7c3b0ecfa239d8f67a8dfe6477b30872c607"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01835d02acd5d95c1071e1da1bb27fe213c84a013b899aba96380ca9962364bc"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed0f712e0bb5fea327e92aec8a937afd07ba8de4c529735d82e4c4124c10d5a0"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96cd19934f76a1264e8ecfed9d9f5291fde04ecb667faef5f33bdbfd95fe2d1f"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e06c4242a1354cf9d48ee01f6f4e6e19c511d50bb1e8d7d20bcadbb83a2aea90"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d73dcfe789d37c6c8b108bf1e203e027714a239e50ad55572ced3c004424ed3b"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:06e98ff000e2619e7cfe552d086815671ed09b6899408c2c1b5103658261f6f3"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:08b6fb47dd889c69fbc0b915d782aaed43e025df6979b6b7f92084ba55edd526"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1788ebb5f5b655a15777e654ea433d198f593230277e74d51a2a1e29a986283"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c65f92881753aa1098c77818e2b04a95048f30edbe9c3094dc3707d67df4598b"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:4243a9c35667a349788461aae6471efde8d8800175b7db5148a6ab929628047f"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-win_arm64.whl", hash = "sha256:f59d19078cc332dbdf3b7b210852ba1f5db8c0a2cd8cc4c0ed84cc00c76e6802"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fbc07e2e4ac696497c5f66ec35c21ddab3fc7a406640bffed64c26ab2f7ce6d6"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cced1a8852652813f30fb5d4b8f9b237112a0bbaeebb0f4cc3611502556764"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:82300e5f8945d601c2daaaac139d5524d7c1fdf719aa799a9439927739917460"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf97c321fd641fea2793abce0e48fa4f91f3c202092672f8b5b4e781960b891"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7420e801b00dee4a344ae2ee10e837d603461eb180e41d063699fb7efe08faf0"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060bd7277dc794279fa95522af355034a29c90b42adcb7aa1da358fc839cdb11"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7e3375e4f2bfec77f907680328e4cd16cc64e137c84b1886d547ab340ba6928"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a490cd645ef9d8524090551016f05f052e416c8adb2d8b85d35c9baa9d0428ab"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2e03038bfa66d2d7cffa05d81c2f18fd6acbb25e7e3c068d52bb7469e07ff382"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b19795b26b979c845dba407fe79d66975d520947b74a8ab6cee1d22686f7967"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:064c1d66c40b3a0f488db1f319a6e75616b2e5fe5430a59f93a9a5e40a656d15"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3c772d04fb0ebeece3109d91f6122b1503023086a9591a0b63d6ee7326bd73d9"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:841eafba6913c4dfd53045835545ba01a41e9644e60920c65b89c8f7e60c00a9"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-win32.whl", hash = "sha256:266dd630f12696ea7119f31d8b8e4959ef45ee2cbedae54417d71ae6f47b9848"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:d79aec8aeee02ab55d0ddb33cea3ecd7b69813a48e423c966a26d7aab025cdfe"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-win_arm64.whl", hash = "sha256:484759b5dbc5559e76fefaa9170147d1254468f555fd9649aea3bad46162a88b"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b2ef4c0fd3256e357b70591ffb9e8ed1d439fb1f481ba03016e751a55261d7c1"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:588c4b20fa2fae79d60a4e438cf7133d6773915df3cc0a7f1351da19eb90f720"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7142ee354e9c06e29a2636b9bbcb592bb00600a88f02aa5e70e4f230347b373e"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dfc557c0454ad22382373ec1b7df530b4bbd974335efe97a04caec936f2956a"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03f73b381bdeccb331a12c3c60f1e41943931461cdb52987f2ecf46bfc22f50d"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b0ccc2ec1781c7e5370d96aef0573dd1f97335343e4982bdb3a44c133e27786"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da3e8c9f7e64bb17faefda085ff6862ecb3ad8b79b0f618a6cf4452028aa2222"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fde9b14302a31af7bdafbf5cfbb100201ba21519be2b9dedcf4f1048e4fbe65d"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1a23eee225dfb21c07f25c9fcf23eb055d0056b48e740fe241cbb4b22284379"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e49b9575d16c56c696bc7b06a06bf0c3d4ef01e89137b3ddd4e2ce709af9fe06"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:0a9fc714b8c290261669f22808913aad49553b686115ad0ee999d1cb3df0cd66"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a3ee4f8f076aa92184e80308fc1a079ac356b99c39408fa422bbd00145be9854"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f056ba42fd2f32e06b2c2ba2443594873cfccc0c90c8b6327904fc2ddf6d5799"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-win32.whl", hash = "sha256:5d82b9651e3d34b23e4e8e201ecd3477c2baa17b638979deeabbb585bcb8ba74"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:dad55a514868dae4543ca48c4e1fc0fac704ead038dafedf8f1fc0cc263746c1"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-win_arm64.whl", hash = "sha256:3c84294f4470fcabd7830795d754d808133329e0a81d62fcc2e65886164be83b"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e19d519386e9db4a5335a4b29f25b8183a1c3f78cecb4c9c3112e7f86470e37f"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01eb03cd880a294d1bf1a583fdd00b87169b9cc9c9f52587411506658c864d73"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:be368573255f8fbb0125a78330a1a40c65e9ba3c5ad129a426ff4289099bfb41"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e5af946f419c30f5cb98b69d40997fe8580efe78fc83c2f0f25b60d0e56efb"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f382f7ffe384ce34345e1c0b2065451267d3453cadde78946fbd99a59f0cc23c"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be156f51f3a4f369e758505ed4ae64ea88900dcb2f89d5aabb5752676d3f3d7e"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1936d134b6c513fbe934aeb668b0fee1ffd4729a3c9d8d373f3e404fbb0ce8a0"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ff8eaf4a9399eb2bebd838f16e2d1ded0955230283b07376d68947bbc2d33d"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae598a172e3a95df3383634589660d6b170cc1336fe7578115c584a99e0ba64d"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cd4ba4c18b149da11e7f1b3584813159f189dc20833709de5f3df8b1342a9759"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:0402f1629e91a4b2e4aee68043a30191e5e1b7cd2aa8dacf50b1a1bcf6b7d3ab"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:1e12319c6b304cd4c32d5db00b7a1e36bdc66179c44c5707f6faa5a889a317c0"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0bbfae35ce4de4c574b386c43c78a0be176eeddfdae148cb2136f4605bebab89"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-win32.whl", hash = "sha256:7fec74c234d3097612ea80f2a80c60720eec34947066d33d34dc07a3092e8105"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:a553cc1a80d97459d587529cc43a4c7c5ecf835f572b671107692fe9eddf3e24"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:757dfd7392ec6346bd004f8826afb3bf01d18a723c97cbe9958c733ab1a51791"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2963f4a3f763870a16ee076796be31a4a0958fbae133dbc43fc55c3968564cf5"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2f0274595cc5b2b929c80d4e71b35041104b577e118cf789b3fe0a77b37a4c5"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f211e366e026de110a4246801d43a907cd1a10948082f47e8a4e6da76fef52"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a59472b43879012b90989603aa5a6937a869a72723b1bf2ff1a0d1edee2cc8e6"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a03863714fa6936f90caa7b4b50ea59ea32bb498cc91f74dc25485b3f8fccfe9"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd95b6b7bfb1584f806db89e1e0c8dbb9d25a30a4683880c195cc7f197eaf0c"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7183157edf0c982c0b8592686535c8b3e107f13904b36d85219c77be5cefd0d8"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ad9d74ef7c619b5b0577e909582a1928d93e07d271af18ba43e428dc3512c2a1"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b53137d81e770c82189e07a8f32722d9e4260f13a0aec9914029206ead38cac3"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:49b9ed2472394d306d5dc967a7de48b0aab599016aa4477127b20c2ed982dbf9"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:dec307b57ec2d5054d77d03ee4f654afcd2c18aee00c48014cb70bfed79597d6"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4381023fa1ff32fd5076f5d8321249a9aa62128eb3f21d7ee6a55373e672b261"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-win32.whl", hash = "sha256:8d7a072f10ee57c8413c8ab9593086d42aaff6ee65df4aa6663eecdb7c398dca"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ebcfb5bfd0a733514352cfc94224faad8791e576a80ffe2fd40b2177bf0e7198"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-win_arm64.whl", hash = "sha256:1c47d592e447738744905c18dda47ed155620204714e6df20eb1941bb1ba315e"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eef8b346ab331bec12bbc83ac75641249e6167fab3d84d8f5ca37fd8e6c7a08c"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53251e256017e2b87f7000aee0353ba42392c442ae0bafd0f6b948593d3f68c6"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dede83a6b903e3ebcd7e8137e7ff46907ce9316e9d7e7f917d7e7cdc570ee05"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4da90e4c2b444d0a171d7444ea10152e07e95972bb40b834a13bdd6de1110c"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ca3dfcf74f2b6962f411c33dd95b0adf3901266e770da6281bc96bb5a8b20de9"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bcc957c0a8bde8007f1a8a413a632a1a409890f31f73fe764ef4eac55f59ca87"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:692c9a50bea7a8537442834f9bc6b7d29d8729a5b6379df17c31b6ab4df948c2"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c23ceaea27e790ddd35ef88b84cf9d721806ca366199a76fd47cfc0457a81b"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b155e67fff215c09f130555002e42f7517d0ea72cbd58050abb83cb7c880cec"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3028ee8ecc48250607fa8a0adce37b56275ec3b1acaccd84aee1f68487c8557b"}, - {file = "rapidfuzz-3.6.1.tar.gz", hash = "sha256:35660bee3ce1204872574fa041c7ad7ec5175b3053a4cb6e181463fc07013de7"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7ed0d0b9c85720f0ae33ac5efc8dc3f60c1489dad5c29d735fbdf2f66f0431f"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f3deff6ab7017ed21b9aec5874a07ad13e6b2a688af055837f88b743c7bfd947"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3f9fc060160507b2704f7d1491bd58453d69689b580cbc85289335b14fe8ca"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e86c2b3827fa6169ad6e7d4b790ce02a20acefb8b78d92fa4249589bbc7a2c"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f982e1aafb4bd8207a5e073b1efef9e68a984e91330e1bbf364f9ed157ed83f0"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9196a51d0ec5eaaaf5bca54a85b7b1e666fc944c332f68e6427503af9fb8c49e"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb5a514064e02585b1cc09da2fe406a6dc1a7e5f3e92dd4f27c53e5f1465ec81"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3a4244f65dbc3580b1275480118c3763f9dc29fc3dd96610560cb5e140a4d4a"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f6ebb910a702e41641e1e1dada3843bc11ba9107a33c98daef6945a885a40a07"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:624fbe96115fb39addafa288d583b5493bc76dab1d34d0ebba9987d6871afdf9"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1c59f1c1507b7a557cf3c410c76e91f097460da7d97e51c985343798e9df7a3c"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f6f0256cb27b6a0fb2e1918477d1b56473cd04acfa245376a342e7c15806a396"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-win32.whl", hash = "sha256:24d473d00d23a30a85802b502b417a7f5126019c3beec91a6739fe7b95388b24"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:248f6d2612e661e2b5f9a22bbd5862a1600e720da7bb6ad8a55bb1548cdfa423"}, + {file = "rapidfuzz-3.9.6-cp310-cp310-win_arm64.whl", hash = "sha256:e03fdf0e74f346ed7e798135df5f2a0fb8d6b96582b00ebef202dcf2171e1d1d"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:52e4675f642fbc85632f691b67115a243cd4d2a47bdcc4a3d9a79e784518ff97"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1f93a2f13038700bd245b927c46a2017db3dcd4d4ff94687d74b5123689b873b"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b70500bca460264b8141d8040caee22e9cf0418c5388104ff0c73fb69ee28f"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1e037fb89f714a220f68f902fc6300ab7a33349f3ce8ffae668c3b3a40b0b06"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6792f66d59b86ccfad5e247f2912e255c85c575789acdbad8e7f561412ffed8a"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68d9cffe710b67f1969cf996983608cee4490521d96ea91d16bd7ea5dc80ea98"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63daaeeea76da17fa0bbe7fb05cba8ed8064bb1a0edf8360636557f8b6511961"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d214e063bffa13e3b771520b74f674b22d309b5720d4df9918ff3e0c0f037720"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ed443a2062460f44c0346cb9d269b586496b808c2419bbd6057f54061c9b9c75"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5b0c9b227ee0076fb2d58301c505bb837a290ae99ee628beacdb719f0626d749"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:82c9722b7dfaa71e8b61f8c89fed0482567fb69178e139fe4151fc71ed7df782"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c18897c95c0a288347e29537b63608a8f63a5c3cb6da258ac46fcf89155e723e"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-win32.whl", hash = "sha256:3e910cf08944da381159587709daaad9e59d8ff7bca1f788d15928f3c3d49c2a"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:59c4a61fab676d37329fc3a671618a461bfeef53a4d0b8b12e3bc24a14e166f8"}, + {file = "rapidfuzz-3.9.6-cp311-cp311-win_arm64.whl", hash = "sha256:8b4afea244102332973377fddbe54ce844d0916e1c67a5123432291717f32ffa"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:70591b28b218fff351b88cdd7f2359a01a71f9f7f5a2e465ce3715ed4b3c422b"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee2d8355c7343c631a03e57540ea06e8717c19ecf5ff64ea07e0498f7f161457"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:708fb675de0f47b9635d1cc6fbbf80d52cb710d0a1abbfae5c84c46e3abbddc3"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d66c247c2d3bb7a9b60567c395a15a929d0ebcc5f4ceedb55bfa202c38c6e0c"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15146301b32e6e3d2b7e8146db1a26747919d8b13690c7f83a4cb5dc111b3a08"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7a03da59b6c7c97e657dd5cd4bcaab5fe4a2affd8193958d6f4d938bee36679"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2c2fe19e392dbc22695b6c3b2510527e2b774647e79936bbde49db7742d6f1"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:91aaee4c94cb45930684f583ffc4e7c01a52b46610971cede33586cf8a04a12e"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3f5702828c10768f9281180a7ff8597da1e5002803e1304e9519dd0f06d79a85"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ccd1763b608fb4629a0b08f00b3c099d6395e67c14e619f6341b2c8429c2f310"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc7a0d4b2cb166bc46d02c8c9f7551cde8e2f3c9789df3827309433ee9771163"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7496f53d40560a58964207b52586783633f371683834a8f719d6d965d223a2eb"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-win32.whl", hash = "sha256:5eb1a9272ca71bc72be5415c2fa8448a6302ea4578e181bb7da9db855b367df0"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-win_amd64.whl", hash = "sha256:0d21fc3c0ca507a1180152a6dbd129ebaef48facde3f943db5c1055b6e6be56a"}, + {file = "rapidfuzz-3.9.6-cp312-cp312-win_arm64.whl", hash = "sha256:43bb27a57c29dc5fa754496ba6a1a508480d21ae99ac0d19597646c16407e9f3"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:83a5ac6547a9d6eedaa212975cb8f2ce2aa07e6e30833b40e54a52b9f9999aa4"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:10f06139142ecde67078ebc9a745965446132b998f9feebffd71acdf218acfcc"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74720c3f24597f76c7c3e2c4abdff55f1664f4766ff5b28aeaa689f8ffba5fab"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2bce52b5c150878e558a0418c2b637fb3dbb6eb38e4eb27d24aa839920483e"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1611199f178793ca9a060c99b284e11f6d7d124998191f1cace9a0245334d219"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0308b2ad161daf502908a6e21a57c78ded0258eba9a8f5e2545e2dafca312507"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3eda91832201b86e3b70835f91522587725bec329ec68f2f7faf5124091e5ca7"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ece873c093aedd87fc07c2a7e333d52e458dc177016afa1edaf157e82b6914d8"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d97d3c9d209d5c30172baea5966f2129e8a198fec4a1aeb2f92abb6e82a2edb1"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6c4550d0db4931f5ebe9f0678916d1b06f06f5a99ba0b8a48b9457fd8959a7d4"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b6b8dd4af6324fc325d9483bec75ecf9be33e590928c9202d408e4eafff6a0a6"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16122ae448bc89e2bea9d81ce6cb0f751e4e07da39bd1e70b95cae2493857853"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-win32.whl", hash = "sha256:71cc168c305a4445109cd0d4925406f6e66bcb48fde99a1835387c58af4ecfe9"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-win_amd64.whl", hash = "sha256:59ee78f2ecd53fef8454909cda7400fe2cfcd820f62b8a5d4dfe930102268054"}, + {file = "rapidfuzz-3.9.6-cp313-cp313-win_arm64.whl", hash = "sha256:58b4ce83f223605c358ae37e7a2d19a41b96aa65b1fede99cc664c9053af89ac"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f469dbc9c4aeaac7dd005992af74b7dff94aa56a3ea063ce64e4b3e6736dd2f"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a9ed7ad9adb68d0fe63a156fe752bbf5f1403ed66961551e749641af2874da92"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ffe48ffbeedf78d120ddfb9d583f2ca906712159a4e9c3c743c9f33e7b1775"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8502ccdea9084d54b6f737d96a3b60a84e3afed9d016686dc979b49cdac71613"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a4bec4956e06b170ca896ba055d08d4c457dac745548172443982956a80e118"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c0488b1c273be39e109ff885ccac0448b2fa74dea4c4dc676bcf756c15f16d6"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0542c036cb6acf24edd2c9e0411a67d7ba71e29e4d3001a082466b86fc34ff30"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0a96b52c9f26857bf009e270dcd829381e7a634f7ddd585fa29b87d4c82146d9"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:6edd3cd7c4aa8c68c716d349f531bd5011f2ca49ddade216bb4429460151559f"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:50b2fb55d7ed58c66d49c9f954acd8fc4a3f0e9fd0ff708299bd8abb68238d0e"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:32848dfe54391636b84cda1823fd23e5a6b1dbb8be0e9a1d80e4ee9903820994"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:29146cb7a1bf69c87e928b31bffa54f066cb65639d073b36e1425f98cccdebc6"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-win32.whl", hash = "sha256:aed13e5edacb0ecadcc304cc66e93e7e77ff24f059c9792ee602c0381808e10c"}, + {file = "rapidfuzz-3.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:af440e36b828922256d0b4d79443bf2cbe5515fc4b0e9e96017ec789b36bb9fc"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:efa674b407424553024522159296690d99d6e6b1192cafe99ca84592faff16b4"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0b40ff76ee19b03ebf10a0a87938f86814996a822786c41c3312d251b7927849"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16a6c7997cb5927ced6f617122eb116ba514ec6b6f60f4803e7925ef55158891"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3f42504bdc8d770987fc3d99964766d42b2a03e4d5b0f891decdd256236bae0"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9462aa2be9f60b540c19a083471fdf28e7cf6434f068b631525b5e6251b35e"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1629698e68f47609a73bf9e73a6da3a4cac20bc710529215cbdf111ab603665b"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68bc7621843d8e9a7fd1b1a32729465bf94b47b6fb307d906da168413331f8d6"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c6254c50f15bc2fcc33cb93a95a81b702d9e6590f432a7f7822b8c7aba9ae288"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7e535a114fa575bc143e175e4ca386a467ec8c42909eff500f5f0f13dc84e3e0"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d50acc0e9d67e4ba7a004a14c42d1b1e8b6ca1c515692746f4f8e7948c673167"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fa742ec60bec53c5a211632cf1d31b9eb5a3c80f1371a46a23ac25a1fa2ab209"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c256fa95d29cbe5aa717db790b231a9a5b49e5983d50dc9df29d364a1db5e35b"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-win32.whl", hash = "sha256:89acbf728b764421036c173a10ada436ecca22999851cdc01d0aa904c70d362d"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:c608fcba8b14d86c04cb56b203fed31a96e8a1ebb4ce99e7b70313c5bf8cf497"}, + {file = "rapidfuzz-3.9.6-cp39-cp39-win_arm64.whl", hash = "sha256:d41c00ded0e22e9dba88ff23ebe0dc9d2a5f21ba2f88e185ea7374461e61daa9"}, + {file = "rapidfuzz-3.9.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a65c2f63218ea2dedd56fc56361035e189ca123bd9c9ce63a9bef6f99540d681"}, + {file = "rapidfuzz-3.9.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:680dc78a5f889d3b89f74824b89fe357f49f88ad10d2c121e9c3ad37bac1e4eb"}, + {file = "rapidfuzz-3.9.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8ca862927a0b05bd825e46ddf82d0724ea44b07d898ef639386530bf9b40f15"}, + {file = "rapidfuzz-3.9.6-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2116fa1fbff21fa52cd46f3cfcb1e193ba1d65d81f8b6e123193451cd3d6c15e"}, + {file = "rapidfuzz-3.9.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dcb7d9afd740370a897c15da61d3d57a8d54738d7c764a99cedb5f746d6a003"}, + {file = "rapidfuzz-3.9.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1a5bd6401bb489e14cbb5981c378d53ede850b7cc84b2464cad606149cc4e17d"}, + {file = "rapidfuzz-3.9.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:29fda70b9d03e29df6fc45cc27cbcc235534b1b0b2900e0a3ae0b43022aaeef5"}, + {file = "rapidfuzz-3.9.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:88144f5f52ae977df9352029488326afadd7a7f42c6779d486d1f82d43b2b1f2"}, + {file = "rapidfuzz-3.9.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:715aeaabafba2709b9dd91acb2a44bad59d60b4616ef90c08f4d4402a3bbca60"}, + {file = "rapidfuzz-3.9.6-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af26ebd3714224fbf9bebbc27bdbac14f334c15f5d7043699cd694635050d6ca"}, + {file = "rapidfuzz-3.9.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101bd2df438861a005ed47c032631b7857dfcdb17b82beeeb410307983aac61d"}, + {file = "rapidfuzz-3.9.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2185e8e29809b97ad22a7f99281d1669a89bdf5fa1ef4ef1feca36924e675367"}, + {file = "rapidfuzz-3.9.6-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9e53c72d08f0e9c6e4a369e52df5971f311305b4487690c62e8dd0846770260c"}, + {file = "rapidfuzz-3.9.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a0cb157162f0cdd62e538c7bd298ff669847fc43a96422811d5ab933f4c16c3a"}, + {file = "rapidfuzz-3.9.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bb5ff2bd48132ed5e7fbb8f619885facb2e023759f2519a448b2c18afe07e5d"}, + {file = "rapidfuzz-3.9.6-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dc37f601865e8407e3a8037ffbc3afe0b0f837b2146f7632bd29d087385babe"}, + {file = "rapidfuzz-3.9.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a657eee4b94668faf1fa2703bdd803654303f7e468eb9ba10a664d867ed9e779"}, + {file = "rapidfuzz-3.9.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:51be6ab5b1d5bb32abd39718f2a5e3835502e026a8272d139ead295c224a6f5e"}, + {file = "rapidfuzz-3.9.6.tar.gz", hash = "sha256:5cf2a7d621e4515fee84722e93563bf77ff2cbe832a77a48b81f88f9e23b9e8d"}, ] [package.extras] @@ -2774,13 +3006,13 @@ full = ["numpy"] [[package]] name = "referencing" -version = "0.32.1" +version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.32.1-py3-none-any.whl", hash = "sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554"}, - {file = "referencing-0.32.1.tar.gz", hash = "sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] @@ -2789,115 +3021,101 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2023.12.25" +version = "2024.7.24" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, - {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, - {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, - {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, - {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, - {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, - {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, - {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, - {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, - {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, - {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, - {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, - {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, - {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, - {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, ] [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -2930,13 +3148,13 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=4.6)", "pytest-cov", [[package]] name = "rich" -version = "13.7.0" +version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, - {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, ] [package.dependencies] @@ -2962,229 +3180,233 @@ six = "*" [[package]] name = "rpds-py" -version = "0.17.1" +version = "0.20.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, - {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, - {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, - {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, - {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, - {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, - {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, - {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, - {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, - {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, - {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, - {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, - {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, - {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, - {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, - {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, - {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, - {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, - {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, - {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, - {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, + {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, + {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, + {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, + {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, + {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, + {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, + {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, + {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, + {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, + {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, + {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, + {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, + {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, ] [[package]] name = "safetensors" -version = "0.4.2" +version = "0.4.4" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "safetensors-0.4.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:69d8bb8384dc2cb5b72c36c4d6980771b293d1a1377b378763f5e37b6bb8d133"}, - {file = "safetensors-0.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3d420e19fcef96d0067f4de4699682b4bbd85fc8fea0bd45fcd961fdf3e8c82c"}, - {file = "safetensors-0.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ca54742122fa3c4821754adb67318e1cd25c3a22bbf0c5520d5176e77a099ac"}, - {file = "safetensors-0.4.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b47aa643afdfd66cf7ce4c184092ae734e15d10aba2c2948f24270211801c3c"}, - {file = "safetensors-0.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d88a16bbc330f27e7f2d4caaf6fb061ad0b8a756ecc4033260b0378e128ce8a2"}, - {file = "safetensors-0.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9223b8ac21085db614a510eb3445e7083cae915a9202357555fa939695d4f57"}, - {file = "safetensors-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6cb86133dc8930a7ab5e7438545a7f205f7a1cdd5aaf108c1d0da6bdcfbc2b"}, - {file = "safetensors-0.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8a628e0ae2bbc334b62952c384aa5f41621d01850f8d67b04a96b9c39dd7326"}, - {file = "safetensors-0.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:88d6beb7f811a081e0e5f1d9669fdac816c45340c04b1eaf7ebfda0ce93ea403"}, - {file = "safetensors-0.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b57fc5b1b54cb12d8690a58a4cf4b7144730d4bde9d98aa0e1dab6295a1cd579"}, - {file = "safetensors-0.4.2-cp310-none-win32.whl", hash = "sha256:9d87a1c98803c16cf113b9ba03f07b2dce5e8eabfd1811a7f7323fcaa2a1bf47"}, - {file = "safetensors-0.4.2-cp310-none-win_amd64.whl", hash = "sha256:18930ec1d1ecb526d3d9835abc2489b8f1530877518f0c541e77ef0b7abcbd99"}, - {file = "safetensors-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c5dd2ed788730ed56b415d1a11c62026b8cc8c573f55a2092afb3ab383e94fff"}, - {file = "safetensors-0.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc41791b33efb9c83a59b731619f3d15f543dfe71f3a793cb8fbf9bd5d0d5d71"}, - {file = "safetensors-0.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c888bf71d5ca12a720f1ed87d407c4918afa022fb247a6546d8fac15b1f112b"}, - {file = "safetensors-0.4.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e6b2feb4b47226a16a792e6fac3f49442714884a3d4c1008569d5068a3941be9"}, - {file = "safetensors-0.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f41cc0ee4b838ae8f4d8364a1b162067693d11a3893f0863be8c228d40e4d0ee"}, - {file = "safetensors-0.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:51b7228e46c0a483c40ba4b9470dea00fb1ff8685026bb4766799000f6328ac2"}, - {file = "safetensors-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02697f8f2be8ca3c37a4958702dbdb1864447ef765e18b5328a1617022dcf164"}, - {file = "safetensors-0.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:27fd8f65cf7c80e4280cae1ee6bcd85c483882f6580821abe71ee1a0d3dcfca7"}, - {file = "safetensors-0.4.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c487b5f113b0924c9534a07dc034830fb4ef05ce9bb6d78cfe016a7dedfe281f"}, - {file = "safetensors-0.4.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:da7f6483f3fe67ff39b3a55552552c67930ea10a36e9f2539d36fc205273d767"}, - {file = "safetensors-0.4.2-cp311-none-win32.whl", hash = "sha256:52a7012f6cb9cb4a132760b6308daede18a9f5f8952ce08adc7c67a7d865c2d8"}, - {file = "safetensors-0.4.2-cp311-none-win_amd64.whl", hash = "sha256:4d1361a097ac430b310ce9eed8ed4746edee33ddafdfbb965debc8966fc34dc2"}, - {file = "safetensors-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:77af8aa0edcc2863760fd6febbfdb82e88fd75d0e60c1ce4ba57208ba5e4a89b"}, - {file = "safetensors-0.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846666c1c5a8c8888d2dfda8d3921cb9cb8e2c5f78365be756c11021e75a0a2a"}, - {file = "safetensors-0.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f4bfc7ea19b446bfad41510d4b4c76101698c00caaa8a332c8edd8090a412ef"}, - {file = "safetensors-0.4.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:233436fd30f27ffeb3c3780d0b84f496518868445c7a8db003639a649cc98453"}, - {file = "safetensors-0.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a09237a795d11cd11f9dae505d170a29b5616151db1e10c14f892b11caadc7d"}, - {file = "safetensors-0.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de01c9a3a3b7b69627d624ff69d9f11d28ce9908eea2fb6245adafa4b1d43df6"}, - {file = "safetensors-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1f25c5069ee42a5bcffdc66c300a407941edd73f3239e9fdefd26216407391"}, - {file = "safetensors-0.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a73b3649456d09ca8506140d44484b63154a7378434cc1e8719f8056550b224"}, - {file = "safetensors-0.4.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e1625a8d07d046e968bd5c4961810aba1225984e4fb9243626f9d04a06ed3fee"}, - {file = "safetensors-0.4.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f74c86b25615cb24ad4cff765a2eefc09d71bf0fed97588cf585aad9c38fbb4"}, - {file = "safetensors-0.4.2-cp312-none-win32.whl", hash = "sha256:8523b9c5777d771bcde5c2389c03f1cdf7ebe8797432a1bd5e345efe25c55987"}, - {file = "safetensors-0.4.2-cp312-none-win_amd64.whl", hash = "sha256:dcff0243e1737a21f83d664c63fed89d1f532c23fc6830d0427279fabd789ccb"}, - {file = "safetensors-0.4.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:96ad3d7d472612e26cbe413922b4fb13933310f0511d346ea5cc9a1e856e52eb"}, - {file = "safetensors-0.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:88250922401b5ae4e37de929178caf46be47ed16c817b2237b81679bec07c120"}, - {file = "safetensors-0.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d40443554142fc0ab30652d5cc8554c4b7a613513bde00373e18afd5de8cbe4b"}, - {file = "safetensors-0.4.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27f53f70106224d32d874aacecbeb4a6e4c5b16a1d2006d0e876d97229086d71"}, - {file = "safetensors-0.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc068afe23734dfb26ce19db0a7877499ddf73b1d55ceb762417e8da4a1b05fb"}, - {file = "safetensors-0.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9be1918eb8d43a11a6f8806759fccfa0eeb0542b12924caba66af8a7800ad01a"}, - {file = "safetensors-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41911087d20a7bbd78cb4ad4f98aab0c431533107584df6635d8b54b99945573"}, - {file = "safetensors-0.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50771c662aab909f31e94d048e76861fd027d66076ea773eef2e66c717766e24"}, - {file = "safetensors-0.4.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:13f2e57be007b7ea9329133d2399e6bdfcf1910f655440a4da17df3a45afcd30"}, - {file = "safetensors-0.4.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c772147e6395bc829842e0a98e1b30c67fe25d816299c28196488511d5a5e951"}, - {file = "safetensors-0.4.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:36239a0060b537a3e8c473df78cffee14c3ec4f51d5f1a853af99371a2fb2a35"}, - {file = "safetensors-0.4.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:d0cbb7664fad2c307f95195f951b7059e95dc23e0e1822e5978c8b500098543c"}, - {file = "safetensors-0.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b3e55adb6bd9dc1c2a341e72f48f075953fa35d173dd8e29a95b3b02d0d1462"}, - {file = "safetensors-0.4.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42f743b3cca863fba53ca57a193f510e5ec359b97f38c282437716b6768e4a25"}, - {file = "safetensors-0.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04e6af4a6dbeb06c4e6e7d46cf9c716cbc4cc5ef62584fd8a7c0fe558562df45"}, - {file = "safetensors-0.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a492ba21b5c8f14ee5ec9b20f42ba969e53ca1f909a4d04aad736b66a341dcc2"}, - {file = "safetensors-0.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b25b8233a1a85dc67e39838951cfb01595d792f3b7b644add63edb652992e030"}, - {file = "safetensors-0.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd27e063fbdafe776f7b1714da59110e88f270e86db00788a8fd65f4eacfeba7"}, - {file = "safetensors-0.4.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1b6fa399f251bbeb52029bf5a0ac2878d7705dd3612a2f8895b48e9c11f0367d"}, - {file = "safetensors-0.4.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de642d46b459e4afd5c2020b26c0d6d869a171ea00411897d5776c127cac74f0"}, - {file = "safetensors-0.4.2-cp37-none-win32.whl", hash = "sha256:77b72d17754c93bb68f3598182f14d78776e0b9b31682ca5bb2c7c5bd9a75267"}, - {file = "safetensors-0.4.2-cp37-none-win_amd64.whl", hash = "sha256:d36ee3244d461cd655aeef493792c3bccf4875282f8407fd9af99e9a41cf2530"}, - {file = "safetensors-0.4.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:16b6b3884f7876c6b3b23a742428223a7170a5a9dac819d8c12a1569422c4b5a"}, - {file = "safetensors-0.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ee25d311493fbbe0be9d395faee46e9d79e8948f461e388ff39e59875ed9a350"}, - {file = "safetensors-0.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eed8097968585cd752a1171f86fce9aa1d89a29033e5cd8bec5a502e29f6b7af"}, - {file = "safetensors-0.4.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:880e6865cf72cb67f9ab8d04a3c4b49dd95ae92fb1583929ce65aed94e1f685f"}, - {file = "safetensors-0.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91290f83daf80ce6d1a7f629b244443c200060a80f908b29d879021409e5ea94"}, - {file = "safetensors-0.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3517d568486ab3508a7acc360b82d7a4a3e26b86efdf210a9ecd9d233c40708a"}, - {file = "safetensors-0.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1f43a77eb38540f782999e5dc5645164fe9027d3f0194f6c9a5126168017efa"}, - {file = "safetensors-0.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b684d9818aa5d63fddc65f7d0151968037d255d91adf74eba82125b41c680aaa"}, - {file = "safetensors-0.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ab1f5d84185f9fefaf21413efb764e4908057b8a9a0b987ede890c353490fd70"}, - {file = "safetensors-0.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bd979642e6c3a517ef4b84ff36c2fee4015664fea05a61154fc565978347553"}, - {file = "safetensors-0.4.2-cp38-none-win32.whl", hash = "sha256:11be6e7afed29e5a5628f0aa6214e34bc194da73f558dc69fc7d56e07037422a"}, - {file = "safetensors-0.4.2-cp38-none-win_amd64.whl", hash = "sha256:2f7a6e5d29bd2cc340cffaa391fa437b1be9d21a2bd8b8724d2875d13a6ef2a9"}, - {file = "safetensors-0.4.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a5a921b4fe6925f9942adff3ebae8c16e0487908c54586a5a42f35b59fd69794"}, - {file = "safetensors-0.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b691727228c28f2d82d8a92b2bc26e7a1f129ee40b2f2a3185b5974e038ed47c"}, - {file = "safetensors-0.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91ca1056decc4e981248786e87b2a202d4841ee5f99d433f1adf3d44d4bcfa0e"}, - {file = "safetensors-0.4.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:55969fd2e6fdb38dc221b0ab380668c21b0efa12a7562db9924759faa3c51757"}, - {file = "safetensors-0.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ae429bfaecc10ab5fe78c93009b3d1656c1581da560041e700eadb497dbe7a4"}, - {file = "safetensors-0.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff88f194fe4ac50b463a4a6f0c03af9ad72eb5d24ec6d6730af59522e37fedb"}, - {file = "safetensors-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80cb48d0a447f8dd18e61813efa7d3f8f8d52edf0f05806abc0c59b83431f57"}, - {file = "safetensors-0.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b286fb7adfee70a4189898ac2342b8a67d5f493e6b21b0af89ca8eac1b967cbf"}, - {file = "safetensors-0.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ceeff9ddbab4f78738489eb6682867ae946178776f33699737b2129b5394dc1"}, - {file = "safetensors-0.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a26fae748a7488cb3aac381eddfa818c42052c87b5e689fb4c6e82ed58cec209"}, - {file = "safetensors-0.4.2-cp39-none-win32.whl", hash = "sha256:039a42ab33c9d68b39706fd38f1922ace26866eff246bf20271edb619f5f848b"}, - {file = "safetensors-0.4.2-cp39-none-win_amd64.whl", hash = "sha256:b3a3e1f5b85859e398773f064943b62a4059f225008a2a8ee6add1edcf77cacf"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4e70d442ad17e8b153ef9095bf48ea64f15a66bf26dc2b6ca94660c154edbc24"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b90f1d9809caf4ff395951b4703295a68d12907f6945bbc3129e934ff8ae46f6"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c7ac9ad3728838006598e296b3ae9f27d80b489effd4685b92d97b3fc4c98f6"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5730d77e6ff7f4c7039e20913661ad0ea2f86c09e71c039e73dfdd1f394f08"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44feb8cb156d6803dcd19fc6b81b27235f29b877660605a6ac35e1da7d64f0e4"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:523a241c33e7c827ab9a3a23760d75c7d062f43dfe55b6b019409f89b0fb52d1"}, - {file = "safetensors-0.4.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fb18300e8eb74291225214f26c9a8ae2110fd61a6c9b5a2ff4c4e0eb1bb9a998"}, - {file = "safetensors-0.4.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fe5437ff9fb116e44f2ab558981249ae63f978392b4576e62fcfe167d353edbc"}, - {file = "safetensors-0.4.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9304a0934ced5a5d272f39de36291dc141dfc152d277f03fb4d65f2fb2ffa7c"}, - {file = "safetensors-0.4.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:160ba1b1e11cf874602c233ab80a14f588571d09556cbc3586900121d622b5ed"}, - {file = "safetensors-0.4.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04fcd6fcf7d9c13c7e5dc7e08de5e492ee4daa8f4ad74b4d8299d3eb0224292f"}, - {file = "safetensors-0.4.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:906d14c4a677d35834fb0f3a5455ef8305e1bba10a5e0f2e0f357b3d1ad989f2"}, - {file = "safetensors-0.4.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:df3fcdec0cd543084610d1f09c65cdb10fb3079f79bceddc092b0d187c6a265b"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5ca76f13fb1cef242ea3ad2cb37388e7d005994f42af8b44bee56ba48b2d45ce"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:278a1a3414c020785decdcd741c578725721274d2f9f787fcc930882e83b89cc"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b5a461cc68ecd42d9d546e5e1268a39d8ede7934a68d1ce17c3c659cb829d6"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2341411412a41671d25e26bed59ec121e46bf4fadb8132895e610411c4b9681"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3497ac3895acf17c5f98197f1fa4769f09c5e7ede07fcb102f1c201e663e052c"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:01b5e71d3754d2201294f1eb7a6d59cce3a5702ff96d83d226571b2ca2183837"}, - {file = "safetensors-0.4.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3627dbd1ea488dd8046a0491de5087f3c0d641e7acc80c0189a33c69398f1cd1"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9d56f0ef53afad26ec54ceede78a43e9a23a076dadbbda7b44d304c591abf4c1"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b259ca73d42daf658a1bda463f1f83885ae4d93a60869be80d7f7dfcc9d8bbb5"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebc3cd401e4eb54e7c0a70346be565e81942d9a41fafd5f4bf7ab3a55d10378"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bc384a0309b706aa0425c93abb0390508a61bf029ce99c7d9df4220f25871a5"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af2d8f7235d8a08fbccfb8394387890e7fa38942b349a94e6eff13c52ac98087"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0911315bbcc5289087d063c2c2c7ccd711ea97a7e557a7bce005ac2cf80146aa"}, - {file = "safetensors-0.4.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1efe31673be91832d73439a2af426743e1395fc9ef7b081914e9e1d567bd7b5f"}, - {file = "safetensors-0.4.2.tar.gz", hash = "sha256:acc85dcb09ec5e8aa787f588d7ad4d55c103f31e4ff060e17d92cc0e8b8cac73"}, + {file = "safetensors-0.4.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2adb497ada13097f30e386e88c959c0fda855a5f6f98845710f5bb2c57e14f12"}, + {file = "safetensors-0.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7db7fdc2d71fd1444d85ca3f3d682ba2df7d61a637dfc6d80793f439eae264ab"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d4f0eed76b430f009fbefca1a0028ddb112891b03cb556d7440d5cd68eb89a9"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:57d216fab0b5c432aabf7170883d7c11671622bde8bd1436c46d633163a703f6"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d9b76322e49c056bcc819f8bdca37a2daa5a6d42c07f30927b501088db03309"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32f0d1f6243e90ee43bc6ee3e8c30ac5b09ca63f5dd35dbc985a1fc5208c451a"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d464bdc384874601a177375028012a5f177f1505279f9456fea84bbc575c7f"}, + {file = "safetensors-0.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63144e36209ad8e4e65384dbf2d52dd5b1866986079c00a72335402a38aacdc5"}, + {file = "safetensors-0.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:051d5ecd490af7245258000304b812825974d5e56f14a3ff7e1b8b2ba6dc2ed4"}, + {file = "safetensors-0.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51bc8429d9376224cd3cf7e8ce4f208b4c930cd10e515b6ac6a72cbc3370f0d9"}, + {file = "safetensors-0.4.4-cp310-none-win32.whl", hash = "sha256:fb7b54830cee8cf9923d969e2df87ce20e625b1af2fd194222ab902d3adcc29c"}, + {file = "safetensors-0.4.4-cp310-none-win_amd64.whl", hash = "sha256:4b3e8aa8226d6560de8c2b9d5ff8555ea482599c670610758afdc97f3e021e9c"}, + {file = "safetensors-0.4.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bbaa31f2cb49013818bde319232ccd72da62ee40f7d2aa532083eda5664e85ff"}, + {file = "safetensors-0.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fdcb80f4e9fbb33b58e9bf95e7dbbedff505d1bcd1c05f7c7ce883632710006"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55c14c20be247b8a1aeaf3ab4476265e3ca83096bb8e09bb1a7aa806088def4f"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:949aaa1118660f992dbf0968487b3e3cfdad67f948658ab08c6b5762e90cc8b6"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c11a4ab7debc456326a2bac67f35ee0ac792bcf812c7562a4a28559a5c795e27"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0cea44bba5c5601b297bc8307e4075535b95163402e4906b2e9b82788a2a6df"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9d752c97f6bbe327352f76e5b86442d776abc789249fc5e72eacb49e6916482"}, + {file = "safetensors-0.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03f2bb92e61b055ef6cc22883ad1ae898010a95730fa988c60a23800eb742c2c"}, + {file = "safetensors-0.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:87bf3f91a9328a941acc44eceffd4e1f5f89b030985b2966637e582157173b98"}, + {file = "safetensors-0.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:20d218ec2b6899d29d6895419a58b6e44cc5ff8f0cc29fac8d236a8978ab702e"}, + {file = "safetensors-0.4.4-cp311-none-win32.whl", hash = "sha256:8079486118919f600c603536e2490ca37b3dbd3280e3ad6eaacfe6264605ac8a"}, + {file = "safetensors-0.4.4-cp311-none-win_amd64.whl", hash = "sha256:2f8c2eb0615e2e64ee27d478c7c13f51e5329d7972d9e15528d3e4cfc4a08f0d"}, + {file = "safetensors-0.4.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:baec5675944b4a47749c93c01c73d826ef7d42d36ba8d0dba36336fa80c76426"}, + {file = "safetensors-0.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f15117b96866401825f3e94543145028a2947d19974429246ce59403f49e77c6"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a13a9caea485df164c51be4eb0c87f97f790b7c3213d635eba2314d959fe929"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b54bc4ca5f9b9bba8cd4fb91c24b2446a86b5ae7f8975cf3b7a277353c3127c"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08332c22e03b651c8eb7bf5fc2de90044f3672f43403b3d9ac7e7e0f4f76495e"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb62841e839ee992c37bb75e75891c7f4904e772db3691c59daaca5b4ab960e1"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5b927acc5f2f59547270b0309a46d983edc44be64e1ca27a7fcb0474d6cd67"}, + {file = "safetensors-0.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a69c71b1ae98a8021a09a0b43363b0143b0ce74e7c0e83cacba691b62655fb8"}, + {file = "safetensors-0.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23654ad162c02a5636f0cd520a0310902c4421aab1d91a0b667722a4937cc445"}, + {file = "safetensors-0.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0677c109d949cf53756859160b955b2e75b0eefe952189c184d7be30ecf7e858"}, + {file = "safetensors-0.4.4-cp312-none-win32.whl", hash = "sha256:a51d0ddd4deb8871c6de15a772ef40b3dbd26a3c0451bb9e66bc76fc5a784e5b"}, + {file = "safetensors-0.4.4-cp312-none-win_amd64.whl", hash = "sha256:2d065059e75a798bc1933c293b68d04d79b586bb7f8c921e0ca1e82759d0dbb1"}, + {file = "safetensors-0.4.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9d625692578dd40a112df30c02a1adf068027566abd8e6a74893bb13d441c150"}, + {file = "safetensors-0.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7cabcf39c81e5b988d0adefdaea2eb9b4fd9bd62d5ed6559988c62f36bfa9a89"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8359bef65f49d51476e9811d59c015f0ddae618ee0e44144f5595278c9f8268c"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1a32c662e7df9226fd850f054a3ead0e4213a96a70b5ce37b2d26ba27004e013"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c329a4dcc395364a1c0d2d1574d725fe81a840783dda64c31c5a60fc7d41472c"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:239ee093b1db877c9f8fe2d71331a97f3b9c7c0d3ab9f09c4851004a11f44b65"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd574145d930cf9405a64f9923600879a5ce51d9f315443a5f706374841327b6"}, + {file = "safetensors-0.4.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6784eed29f9e036acb0b7769d9e78a0dc2c72c2d8ba7903005350d817e287a4"}, + {file = "safetensors-0.4.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:65a4a6072436bf0a4825b1c295d248cc17e5f4651e60ee62427a5bcaa8622a7a"}, + {file = "safetensors-0.4.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:df81e3407630de060ae8313da49509c3caa33b1a9415562284eaf3d0c7705f9f"}, + {file = "safetensors-0.4.4-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:e4a0f374200e8443d9746e947ebb346c40f83a3970e75a685ade0adbba5c48d9"}, + {file = "safetensors-0.4.4-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:181fb5f3dee78dae7fd7ec57d02e58f7936498d587c6b7c1c8049ef448c8d285"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb4ac1d8f6b65ec84ddfacd275079e89d9df7c92f95675ba96c4f790a64df6e"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76897944cd9239e8a70955679b531b9a0619f76e25476e57ed373322d9c2075d"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a9e9d1a27e51a0f69e761a3d581c3af46729ec1c988fa1f839e04743026ae35"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:005ef9fc0f47cb9821c40793eb029f712e97278dae84de91cb2b4809b856685d"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26987dac3752688c696c77c3576f951dbbdb8c57f0957a41fb6f933cf84c0b62"}, + {file = "safetensors-0.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c05270b290acd8d249739f40d272a64dd597d5a4b90f27d830e538bc2549303c"}, + {file = "safetensors-0.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:068d3a33711fc4d93659c825a04480ff5a3854e1d78632cdc8f37fee917e8a60"}, + {file = "safetensors-0.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:063421ef08ca1021feea8b46951251b90ae91f899234dd78297cbe7c1db73b99"}, + {file = "safetensors-0.4.4-cp37-none-win32.whl", hash = "sha256:d52f5d0615ea83fd853d4e1d8acf93cc2e0223ad4568ba1e1f6ca72e94ea7b9d"}, + {file = "safetensors-0.4.4-cp37-none-win_amd64.whl", hash = "sha256:88a5ac3280232d4ed8e994cbc03b46a1807ce0aa123867b40c4a41f226c61f94"}, + {file = "safetensors-0.4.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3467ab511bfe3360967d7dc53b49f272d59309e57a067dd2405b4d35e7dcf9dc"}, + {file = "safetensors-0.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2ab4c96d922e53670ce25fbb9b63d5ea972e244de4fa1dd97b590d9fd66aacef"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87df18fce4440477c3ef1fd7ae17c704a69a74a77e705a12be135ee0651a0c2d"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e5fe345b2bc7d88587149ac11def1f629d2671c4c34f5df38aed0ba59dc37f8"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f1a3e01dce3cd54060791e7e24588417c98b941baa5974700eeb0b8eb65b0a0"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6bf35e9a8998d8339fd9a05ac4ce465a4d2a2956cc0d837b67c4642ed9e947"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:166c0c52f6488b8538b2a9f3fbc6aad61a7261e170698779b371e81b45f0440d"}, + {file = "safetensors-0.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87e9903b8668a16ef02c08ba4ebc91e57a49c481e9b5866e31d798632805014b"}, + {file = "safetensors-0.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9c421153aa23c323bd8483d4155b4eee82c9a50ac11cccd83539104a8279c64"}, + {file = "safetensors-0.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a4b8617499b2371c7353302c5116a7e0a3a12da66389ce53140e607d3bf7b3d3"}, + {file = "safetensors-0.4.4-cp38-none-win32.whl", hash = "sha256:c6280f5aeafa1731f0a3709463ab33d8e0624321593951aefada5472f0b313fd"}, + {file = "safetensors-0.4.4-cp38-none-win_amd64.whl", hash = "sha256:6ceed6247fc2d33b2a7b7d25d8a0fe645b68798856e0bc7a9800c5fd945eb80f"}, + {file = "safetensors-0.4.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5cf6c6f6193797372adf50c91d0171743d16299491c75acad8650107dffa9269"}, + {file = "safetensors-0.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:419010156b914a3e5da4e4adf992bee050924d0fe423c4b329e523e2c14c3547"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88f6fd5a5c1302ce79993cc5feeadcc795a70f953c762544d01fb02b2db4ea33"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d468cffb82d90789696d5b4d8b6ab8843052cba58a15296691a7a3df55143cd2"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9353c2af2dd467333d4850a16edb66855e795561cd170685178f706c80d2c71e"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83c155b4a33368d9b9c2543e78f2452090fb030c52401ca608ef16fa58c98353"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9850754c434e636ce3dc586f534bb23bcbd78940c304775bee9005bf610e98f1"}, + {file = "safetensors-0.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:275f500b4d26f67b6ec05629a4600645231bd75e4ed42087a7c1801bff04f4b3"}, + {file = "safetensors-0.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5c2308de665b7130cd0e40a2329278226e4cf083f7400c51ca7e19ccfb3886f3"}, + {file = "safetensors-0.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e06a9ebc8656e030ccfe44634f2a541b4b1801cd52e390a53ad8bacbd65f8518"}, + {file = "safetensors-0.4.4-cp39-none-win32.whl", hash = "sha256:ef73df487b7c14b477016947c92708c2d929e1dee2bacdd6fff5a82ed4539537"}, + {file = "safetensors-0.4.4-cp39-none-win_amd64.whl", hash = "sha256:83d054818a8d1198d8bd8bc3ea2aac112a2c19def2bf73758321976788706398"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1d1f34c71371f0e034004a0b583284b45d233dd0b5f64a9125e16b8a01d15067"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a8043a33d58bc9b30dfac90f75712134ca34733ec3d8267b1bd682afe7194f5"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8db8f0c59c84792c12661f8efa85de160f80efe16b87a9d5de91b93f9e0bce3c"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfc1fc38e37630dd12d519bdec9dcd4b345aec9930bb9ce0ed04461f49e58b52"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c9d86d9b13b18aafa88303e2cd21e677f5da2a14c828d2c460fe513af2e9a5"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:43251d7f29a59120a26f5a0d9583b9e112999e500afabcfdcb91606d3c5c89e3"}, + {file = "safetensors-0.4.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:2c42e9b277513b81cf507e6121c7b432b3235f980cac04f39f435b7902857f91"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3daacc9a4e3f428a84dd56bf31f20b768eb0b204af891ed68e1f06db9edf546f"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218bbb9b883596715fc9997bb42470bf9f21bb832c3b34c2bf744d6fa8f2bbba"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bd5efc26b39f7fc82d4ab1d86a7f0644c8e34f3699c33f85bfa9a717a030e1b"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ad9776b65d8743f86698a1973292c966cf3abff627efc44ed60e66cc538ddd"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:30f23e6253c5f43a809dea02dc28a9f5fa747735dc819f10c073fe1b605e97d4"}, + {file = "safetensors-0.4.4-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5512078d00263de6cb04e9d26c9ae17611098f52357fea856213e38dc462f81f"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b96c3d9266439d17f35fc2173111d93afc1162f168e95aed122c1ca517b1f8f1"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:08d464aa72a9a13826946b4fb9094bb4b16554bbea2e069e20bd903289b6ced9"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:210160816d5a36cf41f48f38473b6f70d7bcb4b0527bedf0889cc0b4c3bb07db"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb276a53717f2bcfb6df0bcf284d8a12069002508d4c1ca715799226024ccd45"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a2c28c6487f17d8db0089e8b2cdc13de859366b94cc6cdc50e1b0a4147b56551"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7915f0c60e4e6e65d90f136d85dd3b429ae9191c36b380e626064694563dbd9f"}, + {file = "safetensors-0.4.4-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:00eea99ae422fbfa0b46065acbc58b46bfafadfcec179d4b4a32d5c45006af6c"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb1ed4fcb0b3c2f3ea2c5767434622fe5d660e5752f21ac2e8d737b1e5e480bb"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:73fc9a0a4343188bdb421783e600bfaf81d0793cd4cce6bafb3c2ed567a74cd5"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c37e6b714200824c73ca6eaf007382de76f39466a46e97558b8dc4cf643cfbf"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f75698c5c5c542417ac4956acfc420f7d4a2396adca63a015fd66641ea751759"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca1a209157f242eb183e209040097118472e169f2e069bfbd40c303e24866543"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:177f2b60a058f92a3cec7a1786c9106c29eca8987ecdfb79ee88126e5f47fa31"}, + {file = "safetensors-0.4.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ee9622e84fe6e4cd4f020e5fda70d6206feff3157731df7151d457fdae18e541"}, + {file = "safetensors-0.4.4.tar.gz", hash = "sha256:5fe3e9b705250d0172ed4e100a811543108653fb2b66b9e702a088ad03772a07"}, ] [package.extras] @@ -3197,7 +3419,7 @@ paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"] quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] -testing = ["h5py (>=3.7.0)", "huggingface_hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools_rust (>=1.5.2)"] +testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] torch = ["safetensors[numpy]", "torch (>=1.10)"] [[package]] @@ -3244,45 +3466,45 @@ tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy ( [[package]] name = "scipy" -version = "1.12.0" +version = "1.14.0" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, +python-versions = ">=3.10" +files = [ + {file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"}, + {file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"}, + {file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74"}, + {file = "scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb"}, + {file = "scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14"}, + {file = "scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159"}, + {file = "scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20"}, + {file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"}, ] [package.dependencies] -numpy = ">=1.22.4,<1.29.0" +numpy = ">=1.23.5,<2.3" [package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "semantic-version" @@ -3355,39 +3577,45 @@ files = [ [[package]] name = "sentry-sdk" -version = "1.39.2" +version = "2.13.0" description = "Python client for Sentry (https://sentry.io)" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "sentry-sdk-1.39.2.tar.gz", hash = "sha256:24c83b0b41c887d33328a9166f5950dc37ad58f01c9f2fbff6b87a6f1094170c"}, - {file = "sentry_sdk-1.39.2-py2.py3-none-any.whl", hash = "sha256:acaf597b30258fc7663063b291aa99e58f3096e91fe1e6634f4b79f9c1943e8e"}, + {file = "sentry_sdk-2.13.0-py2.py3-none-any.whl", hash = "sha256:6beede8fc2ab4043da7f69d95534e320944690680dd9a963178a49de71d726c6"}, + {file = "sentry_sdk-2.13.0.tar.gz", hash = "sha256:8d4a576f7a98eb2fdb40e13106e41f330e5c79d72a68be1316e7852cf4995260"}, ] [package.dependencies] certifi = "*" -urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} +urllib3 = ">=1.26.11" [package.extras] aiohttp = ["aiohttp (>=3.5)"] +anthropic = ["anthropic (>=0.16)"] arq = ["arq (>=0.23)"] asyncpg = ["asyncpg (>=0.23)"] beam = ["apache-beam (>=2.12)"] bottle = ["bottle (>=0.12.13)"] celery = ["celery (>=3)"] +celery-redbeat = ["celery-redbeat (>=2)"] chalice = ["chalice (>=1.16.0)"] clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] django = ["django (>=1.8)"] falcon = ["falcon (>=1.4)"] fastapi = ["fastapi (>=0.79.0)"] flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] -grpcio = ["grpcio (>=1.21.1)"] +grpcio = ["grpcio (>=1.21.1)", "protobuf (>=3.8.0)"] httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] +huggingface-hub = ["huggingface-hub (>=0.22)"] +langchain = ["langchain (>=0.0.210)"] +litestar = ["litestar (>=2.0.0)"] loguru = ["loguru (>=0.5)"] +openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] -pure-eval = ["asttokens", "executing", "pure_eval"] +opentelemetry-experimental = ["opentelemetry-distro"] +pure-eval = ["asttokens", "executing", "pure-eval"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] @@ -3396,7 +3624,7 @@ sanic = ["sanic (>=0.8)"] sqlalchemy = ["sqlalchemy (>=1.2)"] starlette = ["starlette (>=0.19.1)"] starlite = ["starlite (>=1.48)"] -tornado = ["tornado (>=5)"] +tornado = ["tornado (>=6)"] [[package]] name = "setproctitle" @@ -3500,29 +3728,29 @@ test = ["pytest"] [[package]] name = "setuptools" -version = "69.0.3" +version = "72.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, - {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, + {file = "setuptools-72.2.0-py3-none-any.whl", hash = "sha256:f11dd94b7bae3a156a95ec151f24e4637fb4fa19c878e4d191bfb8b2d82728c4"}, + {file = "setuptools-72.2.0.tar.gz", hash = "sha256:80aacbf633704e9c8bfa1d99fa5dd4dc59573efcf9e4042c13d3bcef91ac2ef9"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "ordered-set (>=3.1.1)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "shtab" -version = "1.6.5" +version = "1.7.1" description = "Automagic shell tab completion for Python CLI applications" optional = false python-versions = ">=3.7" files = [ - {file = "shtab-1.6.5-py3-none-any.whl", hash = "sha256:3c7be25ab65a324ed41e9c2964f2146236a5da6e6a247355cfea56f65050f220"}, - {file = "shtab-1.6.5.tar.gz", hash = "sha256:cf4ab120183e84cce041abeb6f620f9560739741dfc31dd466315550c08be9ec"}, + {file = "shtab-1.7.1-py3-none-any.whl", hash = "sha256:32d3d2ff9022d4c77a62492b6ec875527883891e33c6b479ba4d41a51e259983"}, + {file = "shtab-1.7.1.tar.gz", hash = "sha256:4e4bcb02eeb82ec45920a5d0add92eac9c9b63b2804c9196c1f1fdc2d039243c"}, ] [package.extras] @@ -3552,13 +3780,13 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] @@ -3613,27 +3841,30 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam [[package]] name = "sympy" -version = "1.12" +version = "1.13.2" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, + {file = "sympy-1.13.2-py3-none-any.whl", hash = "sha256:c51d75517712f1aed280d4ce58506a4a88d635d6b5dd48b39102a7ae1f3fcfe9"}, + {file = "sympy-1.13.2.tar.gz", hash = "sha256:401449d84d07be9d0c7a46a64bd54fe097667d5e7181bfe67ec777be9e01cb13"}, ] [package.dependencies] -mpmath = ">=0.19" +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] [[package]] name = "threadpoolctl" -version = "3.2.0" +version = "3.5.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, - {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, + {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, + {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, ] [[package]] @@ -3816,24 +4047,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.3" +version = "0.13.2" description = "Style preserving TOML library" optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, - {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, -] - -[[package]] -name = "toolz" -version = "0.12.1" -description = "List processing tools and functional utilities" -optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "toolz-0.12.1-py3-none-any.whl", hash = "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85"}, - {file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"}, + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] [[package]] @@ -3891,13 +4111,13 @@ opt-einsum = ["opt-einsum (>=3.3)"] [[package]] name = "tqdm" -version = "4.66.1" +version = "4.66.5" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, ] [package.dependencies] @@ -4018,19 +4238,18 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "trl" -version = "0.7.10" +version = "0.9.6" description = "Train transformer language models with reinforcement learning." optional = false python-versions = ">=3.7" files = [ - {file = "trl-0.7.10-py3-none-any.whl", hash = "sha256:2ad418c8db76ee3e712218ecee1ab1e6bf625b8722c3beb228365aaa595cb249"}, - {file = "trl-0.7.10.tar.gz", hash = "sha256:5e3815521fdbbe0939fcfa6c57561317081700c62d386c4e08a2e04dcce4a9f7"}, + {file = "trl-0.9.6-py3-none-any.whl", hash = "sha256:4753f190c94c11488fcc46ec74b2128e53fbc61d51f0887b7204ec4dc333af4b"}, ] [package.dependencies] accelerate = "*" datasets = "*" -numpy = ">=1.18.2" +numpy = ">=1.18.2,<2.0.0" torch = ">=1.4.0" transformers = ">=4.31.0" tyro = ">=0.5.11" @@ -4038,68 +4257,69 @@ tyro = ">=0.5.11" [package.extras] benchmark = ["deepspeed", "ghapi", "openrlbenchmark (==0.2.1a5)", "requests", "wandb"] deepspeed = ["deepspeed (>=0.9.5)"] -dev = ["accelerate", "bitsandbytes (<=0.41.1)", "deepspeed", "deepspeed (>=0.9.5)", "diffusers (>=0.18.0)", "ghapi", "openrlbenchmark (==0.2.1a5)", "parameterized", "peft (>=0.4.0)", "pytest", "pytest-cov", "pytest-xdist", "requests", "wandb"] +dev = ["Pillow", "accelerate", "bitsandbytes (<=0.41.1)", "deepspeed", "deepspeed (>=0.9.5)", "diffusers (>=0.18.0)", "ghapi", "openrlbenchmark (==0.2.1a5)", "parameterized", "peft (>=0.4.0)", "pytest", "pytest-cov", "pytest-xdist", "requests", "scikit-learn", "wandb"] diffusers = ["diffusers (>=0.18.0)"] peft = ["peft (>=0.4.0)"] quantization = ["bitsandbytes (<=0.41.1)"] -test = ["accelerate", "parameterized", "pytest", "pytest-cov", "pytest-xdist"] +test = ["Pillow", "accelerate", "parameterized", "pytest", "pytest-cov", "pytest-xdist", "scikit-learn"] [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "tyro" -version = "0.7.0" +version = "0.8.6" description = "Strongly typed, zero-effort CLI interfaces" optional = false python-versions = ">=3.7" files = [ - {file = "tyro-0.7.0-py3-none-any.whl", hash = "sha256:9c80473ecb5acea22ce31c27176af4274e5236ae064ecfb75ac4c9bcd759f601"}, - {file = "tyro-0.7.0.tar.gz", hash = "sha256:86a8341aca7934aa00c8b96189d18fb83dce22ed6bb1d05f079c3bbb3066a925"}, + {file = "tyro-0.8.6-py3-none-any.whl", hash = "sha256:b94a4bd53b0536aa7ecfffa6cbb15ee5db8bae546efde1a5ec5c62109269d352"}, + {file = "tyro-0.8.6.tar.gz", hash = "sha256:4cf519126078c9b1373ae6445cde13e5b3465ac4bfc1a26633d5915a5f6be5ff"}, ] [package.dependencies] colorama = {version = ">=0.4.0", markers = "platform_system == \"Windows\""} -docstring-parser = ">=0.14.1" +docstring-parser = ">=0.16" rich = ">=11.1.0" shtab = ">=1.5.6" -typing-extensions = ">=4.3.0" +typing-extensions = ">=4.7.0" [package.extras] -dev = ["PyYAML (>=6.0)", "attrs (>=21.4.0)", "coverage[toml] (>=6.5.0)", "flax (>=0.6.9)", "frozendict (>=2.3.4)", "mypy (>=1.4.1)", "numpy (>=1.20.0)", "omegaconf (>=2.2.2)", "pydantic (>=2.5.2)", "pyright (>=1.1.264)", "pytest (>=7.1.2)", "pytest-cov (>=3.0.0)", "ruff (>=0.1.13)", "torch (>=1.10.0)"] +dev = ["PyYAML (>=6.0)", "attrs (>=21.4.0)", "coverage[toml] (>=6.5.0)", "eval-type-backport (>=0.1.3)", "flax (>=0.6.9)", "frozendict (>=2.3.4)", "mypy (>=1.4.1)", "numpy (>=1.20.0)", "omegaconf (>=2.2.2)", "pydantic (>=2.5.2)", "pyright (>=1.1.349)", "pytest (>=7.1.2)", "pytest-cov (>=3.0.0)", "ruff (>=0.1.13)", "torch (>=1.10.0)"] [[package]] name = "tzdata" -version = "2023.4" +version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, - {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -4483,4 +4703,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "b58f8a6e886b15491dad60bf5d490872440a6d5890a6cedfa853bf2a2f032164" +content-hash = "1d147fa6bd03afebd76ff30bdd5fb50b36cde84c4ef4e410f2856b3633bcd285" diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index aaa65d39..00000000 --- a/pyproject.toml +++ /dev/null @@ -1,67 +0,0 @@ -[tool.poetry] -name = "dbgpt_hub" -version = "0.3.1" -description = "DB-GPT-Hub: Text-to-SQL parsing with LLMs" -authors = ["Your Name "] -license = "MIT" -readme = "README.md" -include = ["dbgpt_hub/baseline/baseline.json"] - -[tool.poetry.dependencies] -python = ">=3.10,<3.13" -transformers = "4.34.1" -peft = "0.4.0" -accelerate = "0.21.0" -einops = "0.6.1" -evaluate = "0.4.0" -scikit-learn = "1.2.2" -sentencepiece = "0.1.99" -wandb = "0.15.3" -func-timeout = "4.3.5" -datasets = ">=2.14.6" -trl = ">=0.5.0" -pydantic = "1.10.11" -deepspeed = "0.10.2" -gradio = ">=3.36.0" -uvicorn-http2 = "^0.0.0" -uvicorn = "^0.24.0.post1" -fastapi = "0.95.1" -transformers-stream-generator = "^0.0.4" -matplotlib = "^3.8.1" -sse-starlette = "^1.6.5" -tiktoken = "^0.5.1" -jieba = "^0.42.1" -rouge-chinese = "^1.0.3" -rapidfuzz = "^3.5.2" -scipy = "^1.11.3" -sqlparse = "^0.4.4" -nltk = "^3.8.1" -jsonlines = "^4.0.0" -pymysql = "1.1.0" -pyyaml = "6.0.1" -black = "^23.11.0" -pyright = "^1.1.335" -pylint = "^3.0.2" -torch = "^2.0.0" -markupsafe = "2.1.3" -nvidia-cuda-nvrtc-cu12 = "12.1.105" -nvidia-cuda-runtime-cu12 = "12.1.105" -nvidia-cuda-cupti-cu12 = "12.1.105" -nvidia-cudnn-cu12 = "8.9.2.26" -nvidia-cublas-cu12 = "12.1.3.1" -nvidia-cufft-cu12 = "11.0.2.54" -nvidia-curand-cu12 = "10.3.2.106" -nvidia-cusolver-cu12 = "11.4.5.107" -nvidia-cusparse-cu12 = "12.1.0.106" -nvidia-nccl-cu12 = "2.18.1" -nvidia-nvtx-cu12 = "12.1.105" -triton = "2.1.0" -nvidia-nvjitlink-cu12 = "^12.3.52" -prettytable = "^3.9.0" -docopt = "^0.6.2" -bitsandbytes = "0.41.3.post2" -openai = "^1.6.1" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/requirements/lint-requirements.txt b/requirements/lint-requirements.txt new file mode 100644 index 00000000..ad8c1529 --- /dev/null +++ b/requirements/lint-requirements.txt @@ -0,0 +1,4 @@ +black==23.11.0 +blackdoc==0.3.7 +isort==5.10.1 +pylint==3.0.2 \ No newline at end of file diff --git a/src/dbgpt-hub-gql/README.zh.md b/src/dbgpt-hub-gql/README.zh.md new file mode 100644 index 00000000..081e76d1 --- /dev/null +++ b/src/dbgpt-hub-gql/README.zh.md @@ -0,0 +1,237 @@ +# DB-GPT-GQL:利用LLMs实现Text-to-GQL + +## Baseline + +- 更新日期: 2024/08/26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LanguageDatasetModelMethodSimilarityGrammar
base0.7690.703
Cypher (tugraph-db)TuGraph-DB Cypher数据集CodeLlama-7B-Instructlora0.9280.946
base0.4930.002
GQL(tugraph-analytics)TuGraph-Analytics GQL数据集CodeLlama-7B-Instructlora0.9350.984
+ +## Contents +- [DB-GPT-GQL](#db-gpt-gql利用llms实现text-to-gql) + - [Baseline](#baseline) + - [Contents](#contents) + - [一、简介](#一简介) + - [二、Text-to-GQL微调](#二text-to-gql微调) + - [2.1、数据集](#21数据集) + - [2.2、基座模型](#22基座模型) + - [三、使用方法](#三使用方法) + - [3.1、环境准备](#31环境准备) + - [3.2、模型准备](#32模型准备) + - [3.3、模型微调](#33模型微调) + - [3.4、模型预测](#34模型预测) + - [3.5、模型评估](#35模型评估) + - [3.5.1、文本相似度评估](#351文本相似度评估) + - [3.5.2、语法正确性评估](#352语法正确性评估) + - [3.6、模型权重合并](#36模型权重合并) + +# 一、简介 + +DB-GPT-GQL是一个面向图数据库查询语言的,利用LLMs实现Text-to-GQL翻译的模块。主要包含模型微调、Text-to-GQL预测,预测结果评估等步骤。关系型数据库领域的Text-to-SQL翻译任务发展至如今已经拥有了大量的数据集以及多维度的翻译结果评估流程。不同于已经逐渐成熟的Text-to-SQL翻译任务,Text-to-GQL翻译任务由于图查询语言缺乏统一规范、目标成为国际标准的ISOGQL尚未真正落地等原因,使得建立属于各类图查询语言的完整语料数据集和建立Text-to-GQL翻译结果评估机制成为了两个颇具挑战性的任务。 + +DB-GPT-GQL不仅支持了基于多个大模型的微调、预测流程,在翻译结果评估方面也提供了两种评估方式,第一种是基于翻译结果与标准答案之间近似程度的文本相似度评估,这一评估方式适用于任何图查询语言,第二种则是基于不同图查询语言的语法解析器对翻译结果进行语法解析的语法正确性评估,目前已支持tugraph-db与tugraph-analytics两个数据库的图查询语言。 + +未来DB-GPT-GQL将会实现基于翻译结果的执行计划正确性评估(不需要实际数据),以及更进一步的执行正确性评估(需要实际数据),并参考Text-to-SQL领域的spider数据集中的方法实现对数据集中查询语言复杂程度的分级。 + +## 二、Text-to-GQL微调 + + 我们基于大语言模型的SFT来提升Text-to-GQL的效果。 + +### 2.1、数据集 + +本项目样例数据集为`tugraph-db-example`,其中包含tugraph-db提供的,可在tugraph-db上可执行的185条语料,存放在`/dbgpt_hub_gql/data/tugraph-db-example`文件夹中,同时提供下列可下载的数据集: + +- [tugraph-analytics](https://tugraph-web.oss-cn-beijing.aliyuncs.com/tugraph/datasets/text2gql/tugraph-analytics/tugraph-analytics.zip): 符合tugraph-analytics的GQL语法的数据集,采用“ [语法制导的语料生成策略](https://mp.weixin.qq.com/s/rZdj8TEoHZg_f4C-V4lq2A)”,将查询语言模板结合多样化的schema生成查询语言,并使用大模型泛化与之对应的自然语言问题描述后生成的语料。 + +请将下载并解压完成后的数据集放置在`/dbgpt_hub_gql/data/`目录下使用。 + +### 2.2、基座模型 + +DB-GPT-GQL目前已经支持的base模型有: + + - [x] CodeLlama + - [x] Baichuan2 + - [x] LLaMa/LLaMa2 + - [x] Falcon + - [x] Qwen + - [x] XVERSE + - [x] ChatGLM2 + - [x] ChatGLM3 + - [x] internlm + - [x] Falcon + - [x] sqlcoder-7b(mistral) + - [x] sqlcoder2-15b(starcoder) + + + +模型可以基于quantization_bit为4的量化微调(QLoRA)所需的最低硬件资源,可以参考如下: + +| 模型参数 | GPU RAM | CPU RAM | DISK | +| -------- | ------- | ------- | ------ | +| 7b | 6GB | 3.6GB | 36.4GB | +| 13b | 13.4GB | 5.9GB | 60.2GB | + +其中相关参数均设置的为最小,batch_size为1,max_length为512。根据经验,如果计算资源足够,为了效果更好,建议相关长度值设置为1024或者2048。 + +## 三、使用方法 +本章将以仓库中自带的`/dbgpt_hub_gql/data/tugraph-db-example`文件夹中共计185条语料以及`CodeLlama-7B-Instruct`(需要额外下载)为样例,展示DB-GPT-GQL的完整功能。 + +### 3.1、环境准备 + +克隆项目并创建 conda 环境, +```bash +git clone https://github.com/eosphoros-ai/DB-GPT-Hub.git +cd DB-GPT-Hub +conda create -n dbgpt_hub python=3.10 +conda activate dbgpt_hub +pip install poetry +poetry install +``` + +进入DB-GPT-GQL项目目录,并使用poetry安装依赖 +```bash +cd src/dbgpt-hub-gql +pip install poetry +poetry install +``` + +### 3.2、模型准备 +创建并进入codellama模型存放目录 +```bash +mkdir codellama +cd ./codellama +``` + +在`codellama`文件夹下创建`download.py`文件并将如下内容复制进入python文件中 +```python +from modelscope import snapshot_download + +model_dir = snapshot_download("AI-ModelScope/CodeLlama-7b-Instruct-hf") +``` + +安装python依赖并下载模型 +```bash +pip install modelscope +python3 download.py +``` + +下载完成后,将模型文件软链接到`codellama`目录下 +```bash +ln -s /root/.cache/modelscope/hub/AI-ModelScope/CodeLlama-7b-Instruct-hf ./ +``` + +### 3.3、模型微调 +开始语料微调前需要手动将训练数据集在`./dbgpt_hub_gql/data/dataset_info.json`中注册,`./dbgpt_hub_gql/data/tugraph-db-example`文件夹中的训练数据集已经注册在其中,格式如下 + +```json +"tugraph_db_example_train": { + "file_name": "./tugraph-db-example/train.json", + "columns": { + "prompt": "instruction", + "query": "input", + "response": "output", + "history": "history" + } + } +``` + +在`dbgpt_hub_gql/scripts/train_sft.sh`中设置数据集,模型,以及微调结果输出路径,当前默认值适配`./dbgpt_hub_gql/data/tugraph-db-example`中的训练数据集以及`CodeLlama-7B-Instruct`模型,使用LoRA方法微调 + +```shell script +dataset="tugraph_db_example_train" +model_name_or_path=${model_name_or_path-"codellama/CodeLlama-7b-Instruct-hf"} +output_dir="dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora" +``` + +运行微调脚本,开始微调 +```bash +poetry run sh dbgpt_hub_gql/scripts/train_sft.sh +``` + +### 3.4、模型预测 + +在`./dbgpt_hub_gql/scripts/predict_sft.sh`中设置需要预测的数据集,模型,模型微调结果路径以及预测结果路径,当前默认值适配`./dbgpt_hub_gql/data/tugraph-db-example`中的开发数据集以及LoRA方法微调后的`CodeLlama-7B-Instruct`模型 + +```shell script +CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub_gql/predict/predict.py \ + --model_name_or_path codellama/CodeLlama-7b-Instruct-hf \ + --template llama2 \ + --finetuning_type lora \ + --predicted_input_filename dbgpt_hub_gql/data/tugraph-db-example/dev.json \ + --checkpoint_dir dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora \ + --predicted_out_filename dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt >> ${pred_log} +``` + +运行预测脚本,获取预测结果 + +```bash +poetry run sh ./dbgpt_hub_gql/scripts/predict_sft.sh +``` + +### 3.5、模型评估 + +目前版本支持两种预测结果评估方法,第一种是基于Jaro–Winkler distance的文本相似度评估,第二种是基于`.g4`语法文件或图数据库现有语法解析器的语法正确性评估。 + +#### 3.5.1、文本相似度评估 + +文本相似度评估直接统计预测结果与标准结果的Jaro–Winkler distance + +```bash +poetry run python dbgpt_hub_gql/eval/evaluation.py --input ./dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt --gold ./dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt --etype similarity +``` + +#### 3.5.2、语法正确性评估 + +`tugraph-db-example`是符合`tugraph-db`的LCypher语法规则的语料数据集,语法正确性评估使用ANTLR4工具,基于`./dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.g4`文件生成了语法解析器,用于评估模型预测结果的语法正确性。 + +```bash +poetry run python dbgpt_hub_gql/eval/evaluation.py --input ./dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt --gold ./dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt --etype grammar --impl tugraph-db +``` + +### 3.6、模型权重合并 + +如果你需要将训练的基础模型和微调的Peft模块的权重合并,导出一个完整的模型。则运行如下模型导出脚本: + +```bash +poetry run sh ./dbgpt_hub_gql/scripts/export_merge.sh +``` \ No newline at end of file diff --git a/dbgpt_hub/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/__init__.py similarity index 100% rename from dbgpt_hub/__init__.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/__init__.py diff --git a/dbgpt_hub/configs/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/__init__.py similarity index 68% rename from dbgpt_hub/configs/__init__.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/configs/__init__.py index c1898b43..34e8a997 100644 --- a/dbgpt_hub/configs/__init__.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/__init__.py @@ -1,8 +1,5 @@ -from .model_args import ( - ModelArguments, - TrainingArguments, -) from .data_args import DataArguments, Llama2Template +from .model_args import ModelArguments, TrainingArguments __all__ = [ "DataArguments", diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/config.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/config.py new file mode 100644 index 00000000..a59315ed --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/config.py @@ -0,0 +1,53 @@ +import os + +### path config +ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# ROOT_PATH = "/root/autodl-tmp" +# MODELS_PARENT_PATH = "/home/model_files/codellama/" +# DEFAULT_FT_MODEL_NAME = "CodeLlama-7b-Instruct-hf" +MODELS_PARENT_PATH = "/home/model/" +DEFAULT_FT_MODEL_NAME = "Baichuan2-13B-Chat" +MODEL_PATH = os.path.join(MODELS_PARENT_PATH, DEFAULT_FT_MODEL_NAME) + +# MODEL_PATH = os.path.join(ROOT_PATH, "model") +ADAPTER_PATH = os.path.join(ROOT_PATH, "dbgpt_hub_gql/output/adapter") +MERGED_MODELS = os.path.join(ROOT_PATH, "dbgpt_hub_gql/output/merged_models") + +# DATA_PATH = "/root/autodl-tmp/data/spider/pre_processed_data" +# OUT_DIR= "/root/autodl-tmp/codellama" + +DATA_PATH = os.path.join(ROOT_PATH, "dbgpt_hub_gql/data") +PREDICTED_DATA_PATH = os.path.join( + ROOT_PATH, "dbgpt_hub_gql/data/tugraph-db-example/dev.json" +) +PREDICTED_OUT_FILENAME = "pred_gql.txt" +# OUT_DIR = os.path.join(DATA_PATH, "out_pred") +OUT_DIR = os.path.join(ROOT_PATH, "dbgpt_hub_gql/output/") + +## model constants +IGNORE_INDEX = -100 +DEFAULT_PAD_TOKEN = "[PAD]" +DEFAULT_EOS_TOKEN = "" +DEFAULT_BOS_TOKEN = "" +DEFAULT_UNK_TOKEN = "" + + +LOG_FILE_NAME = "trainer_log.jsonl" + +# head_state_dict,model save name +VALUE_HEAD_FILE_NAME = "value_head.bin" + +# output ,finetuning_args save_to_json name +FINETUNING_ARGS_NAME = "finetuning_args.json" + +# when prepare_model_for_training ,layer_norm_names +LAYERNORM_NAMES = ["norm", "ln_f", "ln_attn", "ln_mlp"] +EXT2TYPE = {"csv": "csv", "json": "json", "jsonl": "json", "txt": "text"} + +INSTRUCTION_PROMPT = """\ +I want you to act as a GQL terminal in front of an example database, \ +you need only to return the gql command to me.Below is an instruction that describes a task, \ +Write a response that appropriately completes the request.\n" +##Instruction:\n{}\n""" +INPUT_PROMPT = "###Input:\n{}\n\n###Response:" diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/data_args.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/data_args.py new file mode 100644 index 00000000..d54968f9 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/data_args.py @@ -0,0 +1,406 @@ +import json +import os +from dataclasses import dataclass, field +from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple, Union + +import tiktoken + +if TYPE_CHECKING: + from transformers import PreTrainedTokenizer + + +DEFAULT_PROMPT_DICT = { + "prompt_input": ("{instruction}\n\n{input}\n\n"), + "prompt_no_input": ("{instruction}\n\n"), +} + + +ALPACA_PROMPT_DICT = { + "prompt_input": ( + "Below is an instruction that describes a task, paired with an input that provides further context. " + "Write a response that appropriately completes the request.\n\n" + "### Instruction:\n{instruction}\n\n### Input:\n{input}\n\n### Response: " + ), + "prompt_no_input": ( + "Below is an instruction that describes a task. " + "Write a response that appropriately completes the request.\n\n" + "### Instruction:\n{instruction}\n\n### Response: " + ), +} + +SQL_PROMPT_DICT = { + "prompt_input": ( + "I want you to act as a GQL terminal in front of an example database, \ + you need only to return the gql command to me.Below is an instruction that describes a task, \ + Write a response that appropriately completes the request.\n" + "##Instruction:\n{instruction}\n###Input:\n{input}\n\n###Response:" + ), + "prompt_no_input": ( + "I want you to act as a GQL terminal in front of an example database, \ + you need only to return the gql command to me.Below is an instruction that describes a task, \ + Write a response that appropriately completes the request.\n" + "####Instruction:\n{instruction}\n\###Response: " + ), +} + + +@dataclass +class DatasetAttr: + load_from: str + dataset_name: Optional[str] = None + dataset_sha1: Optional[str] = None + system_prompt: Optional[str] = None + stage: Optional[str] = None + + def __repr__(self) -> str: + return self.dataset_name + + def __post_init__(self): + self.prompt = "instruction" + self.query = "input" + self.response = "output" + self.history = None + + +@dataclass +class DataArguments: + r""" + Arguments pertaining to what data we are going to input our model for training and evaluation. + """ + template: str = field( + metadata={ + "help": "Which template to use for constructing prompts in training and inference." + } + ) + dataset: Optional[str] = field( + default="tugraph_db_example_train", + metadata={ + "help": "The name of provided dataset(s) to use. Use commas to separate multiple datasets." + }, + ) + dataset_dir: Optional[str] = field( + default="dbgpt_hub_gql/data/", + metadata={"help": "The name of the folder containing datasets."}, + ) + cutoff_len: Optional[int] = field( + default=1024, + metadata={"help": "The maximum length of the model inputs after tokenization."}, + ) + reserved_label_len: Optional[int] = field( + default=1, + metadata={"help": "The maximum length reserved for label after tokenization."}, + ) + split: Optional[str] = field( + default="train", + metadata={"help": "Which dataset split to use for training and evaluation."}, + ) + streaming: Optional[bool] = field( + default=False, metadata={"help": "Enable streaming mode."} + ) + buffer_size: Optional[int] = field( + default=16384, + metadata={ + "help": "Size of the buffer to randomly sample examples from in streaming mode." + }, + ) + mix_strategy: Optional[ + Literal["concat", "interleave_under", "interleave_over"] + ] = field(default="concat", metadata={"help": "Strategy to use in dataset mixing."}) + interleave_probs: Optional[str] = field( + default=None, + metadata={ + "help": "Probabilities to sample data from datasets. Use commas to separate multiple datasets." + }, + ) + overwrite_cache: Optional[bool] = field( + default=False, + metadata={"help": "Overwrite the cached training and evaluation sets."}, + ) + preprocessing_num_workers: Optional[int] = field( + default=None, + metadata={"help": "The number of processes to use for the preprocessing."}, + ) + max_source_length: Optional[int] = field( + default=512, + metadata={ + "help": "The maximum total input sequence length after tokenization." + }, + ) + max_target_length: Optional[int] = field( + default=512, + metadata={ + "help": "The maximum total output sequence length after tokenization." + }, + ) + max_samples: Optional[int] = field( + default=None, + metadata={ + "help": "For debugging purposes, truncate the number of examples for each dataset." + }, + ) + eval_num_beams: Optional[int] = field( + default=None, + metadata={ + "help": "Number of beams to use for evaluation. This argument will be passed to `model.generate`" + }, + ) + ignore_pad_token_for_loss: Optional[bool] = field( + default=True, + metadata={ + "help": "Whether to ignore the tokens corresponding to padded labels in the loss computation or not." + }, + ) + system_prompt: Optional[str] = field( + default=None, + metadata={ + "help": "System prompt to add before the user query. Use `|` to separate multiple prompts in training." + }, + ) + val_size: Optional[float] = field( + default=0, + metadata={ + "help": "Size of the development set, should be an integer or a float in range `[0,1)`." + }, + ) + predicted_input_filename: Optional[str] = field( + default="dbgpt_hub_gql/data/tugraph-db-example/dev.json", + metadata={"help": "Predict input filename to do pred "}, + ) + predicted_out_filename: Optional[str] = field( + default="pred_gql.txt", + metadata={"help": "Filename to save predicted outcomes"}, + ) + + def init_for_training(self): # support mixing multiple datasets + dataset_names = [ds.strip() for ds in self.dataset.split(",")] + with open(os.path.join(self.dataset_dir, "dataset_info.json"), "r") as f: + dataset_info = json.load(f) + + prompt_list = self.system_prompt.split("|") if self.system_prompt else [None] + prompt_list = prompt_list * (len(dataset_names) // len(prompt_list)) + assert len(prompt_list) == len( + dataset_names + ), "Number of system prompts should be equal to datasets or 1." + + if self.interleave_probs is not None: + self.interleave_probs = [ + float(prob.strip()) for prob in self.interleave_probs.split(",") + ] + + self.dataset_list: List[DatasetAttr] = [] + for i, name in enumerate(dataset_names): + if name not in dataset_info: + raise ValueError( + "Undefined dataset {} in dataset_info.json.".format(name) + ) + + if "hf_hub_url" in dataset_info[name]: + dataset_attr = DatasetAttr( + "hf_hub", + dataset_name=dataset_info[name]["hf_hub_url"], + stage=dataset_info[name].get("stage", None), + ) + elif "script_url" in dataset_info[name]: + dataset_attr = DatasetAttr( + "script", + dataset_name=dataset_info[name]["script_url"], + stage=dataset_info[name].get("stage", None), + ) + else: + dataset_attr = DatasetAttr( + "file", + dataset_name=dataset_info[name]["file_name"], + dataset_sha1=dataset_info[name].get("file_sha1", None), + stage=dataset_info[name].get("stage", None), + ) + + if "columns" in dataset_info[name]: + dataset_attr.prompt = dataset_info[name]["columns"].get("prompt", None) + dataset_attr.query = dataset_info[name]["columns"].get("query", None) + dataset_attr.response = dataset_info[name]["columns"].get( + "response", None + ) + dataset_attr.history = dataset_info[name]["columns"].get( + "history", None + ) + + dataset_attr.system_prompt = prompt_list[i] + self.dataset_list.append(dataset_attr) + + +@dataclass +class Template: + prefix: List[Union[str, Dict[str, str]]] + prompt: List[Union[str, Dict[str, str]]] + system: str + sep: List[Union[str, Dict[str, str]]] + stop_words: List[str] + use_history: bool + + def encode_oneturn( + self, + tokenizer: "PreTrainedTokenizer", + query: str, + resp: str, + history: Optional[List[Tuple[str, str]]] = None, + system: Optional[str] = None, + ) -> Tuple[List[int], List[int]]: + r""" + Returns a single pair of token ids representing prompt and response respectively. + """ + system, history = self._format(query, resp, history, system) + encoded_pairs = self._encode(tokenizer, system, history) + prompt_ids = [] + for query_ids, resp_ids in encoded_pairs[:-1]: + prompt_ids = prompt_ids + query_ids + resp_ids + prompt_ids, answer_ids = prompt_ids + encoded_pairs[-1][0], encoded_pairs[-1][1] + return prompt_ids, answer_ids + + def encode_multiturn( + self, + tokenizer: "PreTrainedTokenizer", + query: str, + resp: str, + history: Optional[List[Tuple[str, str]]] = None, + system: Optional[str] = None, + ) -> List[Tuple[List[int], List[int]]]: + r""" + Returns multiple pairs of token ids representing prompts and responses respectively. + """ + system, history = self._format(query, resp, history, system) + encoded_pairs = self._encode(tokenizer, system, history) + return encoded_pairs + + def _format( + self, + query: str, + resp: str, + history: Optional[List[Tuple[str, str]]] = None, + system: Optional[str] = None, + ) -> Tuple[str, List[Tuple[str, str]]]: + r""" + Aligns inputs to the standard format. + """ + system = system or self.system # use system if provided + history = history if (history and self.use_history) else [] + history = history + [(query, resp)] + return system, history + + def _get_special_ids( + self, tokenizer: "PreTrainedTokenizer" + ) -> Tuple[List[int], List[int]]: + if tokenizer.bos_token_id is not None and getattr( + tokenizer, "add_bos_token", True + ): # baichuan-13b has no bos token + bos_ids = [tokenizer.bos_token_id] + else: + bos_ids = [] # bos token is optional + + if tokenizer.eos_token_id is not None: + eos_ids = [tokenizer.eos_token_id] + else: + raise ValueError("EOS token is required.") + + return bos_ids, eos_ids + + def _encode( + self, + tokenizer: "PreTrainedTokenizer", + system: str, + history: List[Tuple[str, str]], + ) -> List[Tuple[List[int], List[int]]]: + r""" + Encodes formatted inputs to pairs of token ids. + Turn 0: bos + prefix + sep + query resp + eos + Turn t: sep + bos + query resp + eos + """ + bos_ids, eos_ids = self._get_special_ids(tokenizer) + sep_ids = self._convert_inputs_to_ids(tokenizer, context=self.sep) + encoded_pairs = [] + for turn_idx, (query, resp) in enumerate(history): + if turn_idx == 0: + prefix_ids = self._convert_inputs_to_ids( + tokenizer, context=self.prefix, system=system + ) + if len(prefix_ids) != 0: # has prefix + prefix_ids = bos_ids + prefix_ids + sep_ids + else: + prefix_ids = bos_ids + else: + prefix_ids = sep_ids + bos_ids + + query_ids = self._convert_inputs_to_ids( + tokenizer, context=self.prompt, query=query, idx=str(turn_idx) + ) + resp_ids = self._convert_inputs_to_ids(tokenizer, context=[resp]) + encoded_pairs.append((prefix_ids + query_ids, resp_ids + eos_ids)) + return encoded_pairs + + def _convert_inputs_to_ids( + self, + tokenizer: "PreTrainedTokenizer", + context: List[Union[str, Dict[str, str]]], + system: Optional[str] = None, + query: Optional[str] = None, + idx: Optional[str] = None, + ) -> List[int]: + r""" + Converts context to token ids. + """ + if isinstance( + getattr(tokenizer, "tokenizer", None), tiktoken.Encoding + ): # for tiktoken tokenizer (Qwen) + kwargs = dict(allowed_special="all") + else: + kwargs = dict(add_special_tokens=False) + + token_ids = [] + for elem in context: + if isinstance(elem, str): + elem = ( + elem.replace("{{system}}", system, 1) + if system is not None + else elem + ) + elem = ( + elem.replace("{{query}}", query, 1) if query is not None else elem + ) + elem = elem.replace("{{idx}}", idx, 1) if idx is not None else elem + token_ids = token_ids + tokenizer.encode(elem, **kwargs) + elif isinstance(elem, dict): + token_ids = token_ids + [ + tokenizer.convert_tokens_to_ids(elem.get("token")) + ] + else: + raise NotImplementedError + + return token_ids + + +@dataclass +class Llama2Template(Template): + def _encode( + self, + tokenizer: "PreTrainedTokenizer", + system: str, + history: List[Tuple[str, str]], + ) -> List[Tuple[List[int], List[int]]]: + r""" + Encodes formatted inputs to pairs of token ids. + Turn 0: bos + prefix + query resp + eos + Turn t: bos + query resp + eos + """ + bos_ids, eos_ids = self._get_special_ids(tokenizer) + encoded_pairs = [] + for turn_idx, (query, resp) in enumerate(history): + if turn_idx == 0: # llama2 template has no sep_ids + query = self.prefix[0].replace("{{system}}", system) + query + query_ids = self._convert_inputs_to_ids( + tokenizer, context=self.prompt, query=query + ) + resp_ids = self._convert_inputs_to_ids(tokenizer, context=[resp]) + encoded_pairs.append((bos_ids + query_ids, resp_ids + eos_ids)) + return encoded_pairs + + +templates: Dict[str, Template] = {} diff --git a/dbgpt_hub/configs/ds_config.json b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/ds_config.json similarity index 100% rename from dbgpt_hub/configs/ds_config.json rename to src/dbgpt-hub-gql/dbgpt_hub_gql/configs/ds_config.json diff --git a/dbgpt_hub/configs/ds_config_stage3.json b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/ds_config_stage3.json similarity index 100% rename from dbgpt_hub/configs/ds_config_stage3.json rename to src/dbgpt-hub-gql/dbgpt_hub_gql/configs/ds_config_stage3.json diff --git a/dbgpt_hub/configs/model_args.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/model_args.py similarity index 98% rename from dbgpt_hub/configs/model_args.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/configs/model_args.py index 7b74701d..3d40a2a8 100644 --- a/dbgpt_hub/configs/model_args.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/configs/model_args.py @@ -1,12 +1,11 @@ import json +from dataclasses import asdict, dataclass, field +from typing import Any, Dict, Literal, Optional + import torch -from dataclasses import dataclass, field, asdict -from typing import Optional, Any, Dict, Literal from transformers import Seq2SeqTrainingArguments -from dbgpt_hub.configs.config import ( - MODEL_PATH, - ADAPTER_PATH, -) + +from .config import ADAPTER_PATH @dataclass diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data/dataset_info.json b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/dataset_info.json new file mode 100644 index 00000000..0cf3102b --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/dataset_info.json @@ -0,0 +1,29 @@ +{ + "tugraph_analytics_train": { + "file_name": "./tugraph-analytics/train.json", + "columns": { + "prompt": "instruction", + "query": "input", + "response": "output", + "history": "history" + } + }, + "tugraph_db_train": { + "file_name": "./tugraph-db/train.json", + "columns": { + "prompt": "instruction", + "query": "input", + "response": "output", + "history": "history" + } + }, + "tugraph_db_example_train": { + "file_name": "./tugraph-db-example/train.json", + "columns": { + "prompt": "instruction", + "query": "input", + "response": "output", + "history": "history" + } + } +} \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/dev.json b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/dev.json new file mode 100644 index 00000000..e3684ced --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/dev.json @@ -0,0 +1,261 @@ +[ + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找符合(michael{id:\"2654\"})-[]->()模式的节点和关系,返回匹配的链路p", + "output": "MATCH p=(michael{id:\"2654\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到所有通过directed类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:directed]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式查找图数据库中是朋友关系用户id为\"662\"的节点m的用户有哪些?返回a节点,m节点", + "output": "OPTIONAL MATCH (m:user{id:\"662\"})<-[:is_friend]-(a:user) RETURN a,m", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "在图中查找所有通过person_person类型关系连接的节点对n和m,并返回这些节点对以及它们之间的person_person关系。", + "output": "MATCH (n)-[e:person_person]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "寻找Michael评分低于3星的电影,以及同样给这些电影评分低于3星的其他用户,并查找这些用户评分高于3星的其他电影。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得人物关系姓名为\"魏成\",介绍为\"数学天才,和申玉菲只是形式上的婚姻,申玉菲想通过他的数学能力,解决三体问题\"的人m的人有哪些?返回节点a,节点m", + "output": "MATCH (m:person{name:\"魏成\",introduce:\"数学天才,和申玉菲只是形式上的婚姻,申玉菲想通过他的数学能力,解决三体问题\"})<-[:person_person]-(a:person) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "匹配一个id为\"2654\"的节点,然后查找该节点通过任何关系指向的节点,返回这个路径p。", + "output": "MATCH p=(node{id:\"579\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中符合(michael{name:\"银河纪元\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p,跳过前10条数据", + "output": "MATCH p=(michael{name:\"银河纪元\"})-[]->() RETURN p SKIP 10", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找所有通过person_plan类型关系连接的节点对n和m,返回对应的n,人物和计划的关系,m", + "output": "MATCH (n)-[e:person_plan]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "参演Forrest Gump电影的有哪些人?", + "output": "MATCH (m:movie {title: 'Forrest Gump'})<-[:acted_in]-(a:person) RETURN a, m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中流派名称为\"Mystery\"的流派m的电影有哪些?返回a节点,m节点", + "output": "MATCH (m:genre{name:\"Mystery\"})<-[:has_genre]-(a:movie) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中参演标题为\"Forrest Gump\"的电影m的人有哪些?返回a节点,m节点", + "output": "MATCH (m:movie{title:\"Forrest Gump\"})<-[:acted_in]-(a:person) RETURN a,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "将11.5转为浮点数并返回。", + "output": "RETURN toFloat('11.5')", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找用户名为Michael的用户u,找到所有与u是朋友关系的用户v,并且这些用户v对某部电影m的评分r.stars大于3,返回用户u、用户v和电影m的相关信息。", + "output": "MATCH (u:user {login: 'Michael'})-[:is_friend]->(v:user)-[r:rate]->(m:movie) WHERE r.stars > 3 RETURN u, v, m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中写标题为\"12 Angry Men\"的电影m的作者都有谁?返回a节点,m节点", + "output": "MATCH (m:movie{title:\"12 Angry Men\"})<-[:write]-(a:person) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询所有通过directed类型关系连接的节点对n和m,返回对应的n,导演,m,跳过第一条数据", + "output": "MATCH (n)-[e:directed]-(m) RETURN n,e,m SKIP 1", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找数据库中符合(michael{id:\"579\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "MATCH p=(michael{id:\"579\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中的组织n,返回n节点的name属性值,n节点的name属性值,按照节点的name属性升序排列返回的结果", + "output": "MATCH (n:organization) RETURN n.name,n.name ORDER BY n.name", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得\"弗雷德里克·泰勒相关的组织有哪些?返回m节点的name属性值,边r", + "output": "MATCH (u:person{name:\"弗雷德里克·泰勒\"})-[r:person_organization]->(m:organization) RETURN DISTINCT m.name,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询与标题为\"Gravity\"的电影p有关的人有哪些?返回子图,跳过前7条数据", + "output": "MATCH (p:movie{id:\"1293\",title:\"Gravity\"})-[e]-(neighbor:person) RETURN p,e,neighbor SKIP 7", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得给id为\"3915\"的电影m的打分的用户有哪些?返回相应的电影和用户", + "output": "MATCH (m:movie{id:\"3915\"})<-[:rate]-(a:user) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询id为517的电影u的流派有哪些?返回m节点的id属性值,r边", + "output": "MATCH (u:movie{id:\"517\"})-[r:has_genre]->(m:genre) RETURN DISTINCT m.id,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找姓名为Laurence Fishburne和姓名为Carrie-Anne Moss的人,返回他们各自的出生日期和出生日期相差的绝对值。", + "output": "MATCH (a:person {name: 'Laurence Fishburne'}),(e:person {name: 'Carrie-Anne Moss'}) RETURN a.born, e.born, abs(a.born-e.born)", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查找所有带有person标签的节点,按照name属性值进行升序排序,跳过排序后的第一个结果,返回接下来的两个结果的name属性值。", + "output": "MATCH (n:person) RETURN n.name ORDER BY n.name SKIP 1 LIMIT 2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得所有通过has_genre类型关系连接的节点对n和m,返回对应的n,有流派,m", + "output": "MATCH (n)-[e:has_genre]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询与叶文洁关联的人物有关的人物,返回子图。", + "output": "MATCH (a:person {name: \"叶文洁\"})-[e1:person_person]->(n)-[e2:person_person]->(b:person) RETURN a,b,n,e1,e2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得id为\"2432\",名字为\"Pat Morita\"的人u写的电影有哪些?返回m节点的tagline属性值,边r", + "output": "MATCH (u:person{id:\"2432\",name:\"Pat Morita\"})-[r:write]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "找到人物叶文洁,设置她的介绍信息为清华大学教授、ETO精神领袖、首位和三体人交流的人,返回此节点。", + "output": "MATCH (p:person {name: \"叶文洁\"}) SET p.introduce = \"清华大学教授、ETO精神领袖、首位和三体人交流的人\" RETURN p", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "将'Anne', 'John', 'Bill', 'Diane', 'Eve'作为临时结果集names,从names中检索数据,并返回其中的第二到四个元素。", + "output": "WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names RETURN names[1..3] AS result", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找与id是\"187\"的用户是朋友关系的用户有哪些?返回m节点的id属性值,r边", + "output": "MATCH (u:user{id:\"187\"})-[r:is_friend]->(m:user) RETURN m.id,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找所有带有person标签的节点的name属性值。查找所有带有movie标签的节点的title属性值。将两个查询的结果合并在一起返回重命名为name,且不去除重复项。", + "output": "MATCH (n:person) RETURN n.name AS name UNION ALL MATCH (n:movie) RETURN n.title AS name", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "将返回图中所有通过person_person关系相连的节点和关系。", + "output": "MATCH (n)-[e:person_person]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "Michael的朋友们评分大于3分的电影有哪些?返回相关信息。", + "output": "MATCH (u:user {login: 'Michael'})-[:is_friend]->(v:user)-[r:rate]->(m:movie) WHERE r.stars > 3 RETURN u, v, m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "将'one','two','three'作为临时结果集coll,返回coll和coll的第一个元素。", + "output": "WITH ['one','two','three'] AS coll RETURN coll, head(coll)", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找用户名为’Michael’的用户u,找到u评分小于3的电影m。接着找到所有也对电影m评分小于3的用户v。然后,从这些用户v中找到对另一部电影m2评分大于3的情况。返回用户u、电影m、用户v和电影m2的相关信息。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询所有通过rate类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:rate]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得符合(michael{id:\"1245\",name:\"Alan Tudyk\"})-[]->()模式的节点和关系,返回匹配的链路p", + "output": "MATCH p=(michael{id:\"1245\",name:\"Alan Tudyk\"})-[]->() RETURN p", + "history": [] + } +] \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt new file mode 100644 index 00000000..662be49f --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt @@ -0,0 +1,37 @@ +MATCH p=(michael{id:"2654"})-[]->() RETURN p +MATCH (n)-[e:directed]-(m) RETURN n,e,m +OPTIONAL MATCH (m:user{id:"662"})<-[:is_friend]-(a:user) RETURN a,m +MATCH (n)-[e:person_person]-(m) RETURN n,e,m +MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2 +MATCH (m:person{name:"魏成",introduce:"数学天才,和申玉菲只是形式上的婚姻,申玉菲想通过他的数学能力,解决三体问题"})<-[:person_person]-(a:person) RETURN a,m +MATCH p=(node{id:"579"})-[]->() RETURN p +MATCH p=(michael{name:"银河纪元"})-[]->() RETURN p SKIP 10 +MATCH (n)-[e:person_plan]-(m) RETURN n,e,m +MATCH (m:movie {title: 'Forrest Gump'})<-[:acted_in]-(a:person) RETURN a, m +MATCH (m:genre{name:"Mystery"})<-[:has_genre]-(a:movie) RETURN a,m +MATCH (m:movie{title:"Forrest Gump"})<-[:acted_in]-(a:person) RETURN a,m +RETURN toFloat('11.5') +MATCH (u:user {login: 'Michael'})-[:is_friend]->(v:user)-[r:rate]->(m:movie) WHERE r.stars > 3 RETURN u, v, m +MATCH (m:movie{title:"12 Angry Men"})<-[:write]-(a:person) RETURN a,m +MATCH (n)-[e:directed]-(m) RETURN n,e,m SKIP 1 +MATCH p=(michael{id:"579"})-[]->() RETURN p +MATCH (n:organization) RETURN n.name,n.name ORDER BY n.name +MATCH (u:person{name:"弗雷德里克·泰勒"})-[r:person_organization]->(m:organization) RETURN DISTINCT m.name,r +MATCH (p:movie{id:"1293",title:"Gravity"})-[e]-(neighbor:person) RETURN p,e,neighbor SKIP 7 +MATCH (m:movie{id:"3915"})<-[:rate]-(a:user) RETURN a,m +MATCH (u:movie{id:"517"})-[r:has_genre]->(m:genre) RETURN DISTINCT m.id,r +MATCH (a:person {name: 'Laurence Fishburne'}),(e:person {name: 'Carrie-Anne Moss'}) RETURN a.born, e.born, abs(a.born-e.born) +MATCH (n:person) RETURN n.name ORDER BY n.name SKIP 1 LIMIT 2 +MATCH (n)-[e:has_genre]-(m) RETURN n,e,m +MATCH (a:person {name: "叶文洁"})-[e1:person_person]->(n)-[e2:person_person]->(b:person) RETURN a,b,n,e1,e2 +MATCH (u:person{id:"2432",name:"Pat Morita"})-[r:write]->(m:movie) RETURN m.tagline,r +MATCH (p:person {name: "叶文洁"}) SET p.introduce = "清华大学教授、ETO精神领袖、首位和三体人交流的人" RETURN p +WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names RETURN names[1..3] AS result +MATCH (u:user{id:"187"})-[r:is_friend]->(m:user) RETURN m.id,r +MATCH (n:person) RETURN n.name AS name UNION ALL MATCH (n:movie) RETURN n.title AS name +MATCH (n)-[e:person_person]-(m) RETURN n,e,m +MATCH (u:user {login: 'Michael'})-[:is_friend]->(v:user)-[r:rate]->(m:movie) WHERE r.stars > 3 RETURN u, v, m +WITH ['one','two','three'] AS coll RETURN coll, head(coll) +MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2 +MATCH (n)-[e:rate]-(m) RETURN n,e,m +MATCH p=(michael{id:"1245",name:"Alan Tudyk"})-[]->() RETURN p diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/gold_test.txt b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/gold_test.txt new file mode 100644 index 00000000..db6db3c6 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/gold_test.txt @@ -0,0 +1,37 @@ +MATCH (p:time{name:"DX3906星系黑域纪元"})-[e]-(neighbor:time) RETURN p,e,neighbor SKIP 4 +MATCH (n) RETURN n +MATCH (p:person{name:"托马斯·维德"})-[e]-(neighbor:plan) RETURN p,e,neighbor +MATCH (m:time{name:"威慑纪元",time:"公元2208年-2270年"})<-[:time_time]-(a:time) RETURN a,m +OPTIONAL MATCH (p:movie{tagline:"Everything is Connected"})-[e]-(neighbor:genre) RETURN p,e,neighbor +MATCH (n)-[e:person_person]-(m) RETURN n,e,m +MATCH (u:person{born:"1965"})-[r:acted_in]->(m:movie) RETURN m.tagline,r +MATCH (n:person) RETURN n.name ORDER BY n.name SKIP 1 LIMIT 2 +MATCH (m:movie{title:"Beowulf"})<-[:produce]-(a:person) RETURN a,m SKIP 4 +MATCH (n)-[e:person_plan]-(m) RETURN n,e,m +MATCH (n) RETURN n +OPTIONAL MATCH p=(michael{id:"1935",title:"The Croods"})-[]->() RETURN p +MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie) WHERE r.stars < 3 RETURN m.title, r.stars +MATCH p=(michael{id:"1105",name:"Hans Matheson"})-[]->() RETURN p +MATCH p = (laurence {name: 'Laurence Fishburne'})-[:acted_in*2]-(co_actor) RETURN p +MATCH (p:plan {name: "面壁计划"})-[e]-(neighbor:person) RETURN neighbor,p,e +MATCH (n)-[e:organization_plan]-(m) RETURN n,e,m +MATCH (n)-[e:produce]-(m) RETURN n,e,m +MATCH (u:movie{tagline:"The Legend Ends"})-[r:has_keyword]->(m:keyword) RETURN m.id,r SKIP 1 +MATCH (m:organization{name:"智子"})<-[:organization_organization]-(a:organization) RETURN a,m +MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v) WHERE r.stars < 3 AND s.stars < 3 RETURN u, m, v +MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2 +MATCH (n)-[e:person_organization]-(m) RETURN n,e,m +MATCH (m:movie {title:'Forrest Gump'})<-[r:rate]-(u:user)-[r2:rate]->(m2:movie) WHERE r.stars>3 AND r2.stars>3 RETURN m, u,m2 +OPTIONAL MATCH (p:time{name:"危机纪元"})-[e]-(neighbor:time) RETURN p,e,neighbor +MATCH (m:organization{name:"PIA"})<-[:person_organization]-(a:person) RETURN a,m +MATCH p=(node{id:"579"})-[]->() RETURN p +MATCH (n:Account{id:4817170722885471951}) RETURN n.createTime as createTime, n.isBlocked as isBlocked, n.type as type +MATCH (p:organization{name:"PDC"})-[e]-(neighbor:organization) RETURN p,e,neighbor +OPTIONAL MATCH (m:plan{name:"古筝行动"})<-[:organization_plan]-(a:organization) RETURN a,m +OPTIONAL MATCH (n:Account{id:177335832397484055})<-[e:transfer]-(m:Account) WHERE e.amount > 0.0 AND e.timestamp > 627020616747 AND e.timestamp < 1669690342640 AND m.isBlocked=true WITH count(m) * 1.0 as numM OPTIONAL MATCH (n:Account{id:177335832397484055})<-[e:transfer]-(m:Account) WITH count(m) as numIn, numM RETURN CASE WHEN numIn = 0 THEN -1 ELSE round(numM / numIn * 1000) / 1000 END as blockRatio +MATCH (n)-[e:organization_plan]-(m) RETURN n,e,m +MATCH (a:person {name: "叶文洁"})-[e1:person_person]->(n)<-[e2:person_person]-(b:person {name: "汪淼"}) RETURN a,b,n,e1,e2 +MATCH (matrix:movie {title: 'The Matrix'})-[*0..1]-(x) RETURN x +OPTIONAL MATCH p=(michael{name:"太阳系",introduce:""})-[]->() RETURN p +MATCH (p:movie{id:"805",title:"Star Wars: Episode IV - A New Hope"})-[e]-(neighbor:person) RETURN DISTINCT p,e,neighbor +MATCH (n:person) RETURN DISTINCT n.name,n.id ORDER BY person.id DESC diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/test.json b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/test.json new file mode 100644 index 00000000..abec9203 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/test.json @@ -0,0 +1,261 @@ +[ + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得与姓名为\"DX3906星系黑域纪元\"的时间p有关的时间有哪些?返回相应的节点和关系,跳过前4条数据", + "output": "MATCH (p:time{name:\"DX3906星系黑域纪元\"})-[e]-(neighbor:time) RETURN p,e,neighbor SKIP 4", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "在数据库中的所有节点中,跳过第一个节点,并返回接下来最多100个节点。", + "output": "MATCH (n) RETURN n", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找数据库中与人名为\"托马斯·维德\"的节点p有关的计划有哪些?返回相应的节点和关系", + "output": "MATCH (p:person{name:\"托马斯·维德\"})-[e]-(neighbor:plan) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找数据库中名称为\"威慑纪元\",时间为\"公元2208年-2270年\"的时间线m有关的时间线有哪些?返回节点a,节点m", + "output": "MATCH (m:time{name:\"威慑纪元\",time:\"公元2208年-2270年\"})<-[:time_time]-(a:time) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式查找数据库中与标签为\"Everything is Connected\"的电影p有关的流派有哪些?返回相应的节点和关系", + "output": "OPTIONAL MATCH (p:movie{tagline:\"Everything is Connected\"})-[e]-(neighbor:genre) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中所有通过person_person类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:person_person]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询出生日期为\"1965\"的人u参演的电影有哪些?返回m节点的tagline属性值,r边", + "output": "MATCH (u:person{born:\"1965\"})-[r:acted_in]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查询标签为person的节点的相关信息,结果按id降序排序,保留去除第1个数据后的2个数据。", + "output": "MATCH (n:person) RETURN n.name ORDER BY n.name SKIP 1 LIMIT 2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到出版标题为\"Beowulf\"的电影m的人有哪些?返回a节点,m节点,跳过前4条数据", + "output": "MATCH (m:movie{title:\"Beowulf\"})<-[:produce]-(a:person) RETURN a,m SKIP 4", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找数据库中所有通过person_plan类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:person_plan]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "返回数据库中的所有节点。", + "output": "MATCH (n) RETURN n", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式在图中查找符合(michael{id:\"1935\",title:\"The Croods\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "OPTIONAL MATCH p=(michael{id:\"1935\",title:\"The Croods\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找用户Michael评分低于3星的电影,返回电影的标题和评分。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie) WHERE r.stars < 3 RETURN m.title, r.stars", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找符合(michael{id:\"1105\",name:\"Hans Matheson\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "MATCH p=(michael{id:\"1105\",name:\"Hans Matheson\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到与姓名为Laurence Fishburne合作过的演员,并返回这些路径。", + "output": "MATCH p = (laurence {name: 'Laurence Fishburne'})-[:acted_in*2]-(co_actor) RETURN p", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "与面壁计划有关的人有哪些?", + "output": "MATCH (p:plan {name: \"面壁计划\"})-[e]-(neighbor:person) RETURN neighbor,p,e", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询所有通过organization_plan类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:organization_plan]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从数据库中查找所有通过produce类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:produce]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找标签为\"The Legend Ends\"的电影u的关键字有哪些?返回m节点的id属性值,r边,跳过第一条数据", + "output": "MATCH (u:movie{tagline:\"The Legend Ends\"})-[r:has_keyword]->(m:keyword) RETURN m.id,r SKIP 1", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询与\"智子\"的组织m有关的组织有哪些?返回节点a,节点m", + "output": "MATCH (m:organization{name:\"智子\"})<-[:organization_organization]-(a:organization) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询和用户Michael有共同讨厌的电影的人,返回Michael、用户和电影。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v) WHERE r.stars < 3 AND s.stars < 3 RETURN u, m, v", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "那些跟用户Michael有相同电影品味的人喜欢的电影有哪些?返回相关信息。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找所有通过person_organization类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:person_organization]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询给电影Forrest Gump打高分的的用户给其他电影打分超过3星的电影,返回电影m,用户u和打分大于3星的电影m2。", + "output": "MATCH (m:movie {title:'Forrest Gump'})<-[r:rate]-(u:user)-[r2:rate]->(m2:movie) WHERE r.stars>3 AND r2.stars>3 RETURN m, u,m2", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "以可选的方式找到与名为\"危机纪元\"的时间p有关的时间有哪些?返回相应的节点和关系", + "output": "OPTIONAL MATCH (p:time{name:\"危机纪元\"})-[e]-(neighbor:time) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中与名称为\"PIA\"的组织m有出边关系的人哪些?返回节点a,节点m", + "output": "MATCH (m:organization{name:\"PIA\"})<-[:person_organization]-(a:person) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从id为579的node节点到其他节点的所有直接相连的路径。", + "output": "MATCH p=(node{id:\"579\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "finbench", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nfinbench包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找一个id是4817170722885471951的账户的createTime、isBlocked和type属性。", + "output": "MATCH (n:Account{id:4817170722885471951}) RETURN n.createTime as createTime, n.isBlocked as isBlocked, n.type as type", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找与名字为\"PDC\"的组织p有关的组织有哪些?返回相应的节点和关系", + "output": "MATCH (p:organization{name:\"PDC\"})-[e]-(neighbor:organization) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "以可选的方式查找数据库中与名称为\"古筝行动\"的计划m有关的组织有哪些?返回节点a,节点m", + "output": "OPTIONAL MATCH (m:plan{name:\"古筝行动\"})<-[:organization_plan]-(a:organization) RETURN a,m", + "history": [] + }, + { + "db_id": "finbench", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nfinbench包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询账户id为177335832397484055的账户在627020616747-1669690342640时间范围内,来自黑账户的转入量占其所有转入量的比例。返回该比例。如果给定账户没有转入记录,则返回-1。", + "output": "OPTIONAL MATCH (n:Account{id:177335832397484055})<-[e:transfer]-(m:Account) WHERE e.amount > 0.0 AND e.timestamp > 627020616747 AND e.timestamp < 1669690342640 AND m.isBlocked=true WITH count(m) * 1.0 as numM OPTIONAL MATCH (n:Account{id:177335832397484055})<-[e:transfer]-(m:Account) WITH count(m) as numIn, numM RETURN CASE WHEN numIn = 0 THEN -1 ELSE round(numM / numIn * 1000) / 1000 END as blockRatio", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询所有通过organization_plan类型关系连接的节点对n和m,返回对应的n,组织和计划间的关系,m", + "output": "MATCH (n)-[e:organization_plan]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询叶文洁和汪淼这两个人之间的的共同关联的人物都有谁。", + "output": "MATCH (a:person {name: \"叶文洁\"})-[e1:person_person]->(n)<-[e2:person_person]-(b:person {name: \"汪淼\"}) RETURN a,b,n,e1,e2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到电影The Matrix之间有零到一个关系的所有节点,包括电影节点自身和与之直接关联的节点。", + "output": "MATCH (matrix:movie {title: 'The Matrix'})-[*0..1]-(x) RETURN x", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "以可选的方式查找数据库中符合(michael{name:\"太阳系\",introduce:\"\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "OPTIONAL MATCH p=(michael{name:\"太阳系\",introduce:\"\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找数据库中与标题为\"Star Wars: Episode IV - A New Hope\"的电影p有关的人有哪些?返回子图", + "output": "MATCH (p:movie{id:\"805\",title:\"Star Wars: Episode IV - A New Hope\"})-[e]-(neighbor:person) RETURN DISTINCT p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找人n,返回n节点的name属性值,n节点的id属性值,按照节点的id属性降序排列返回的结果", + "output": "MATCH (n:person) RETURN DISTINCT n.name,n.id ORDER BY person.id DESC", + "history": [] + } +] \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/train.json b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/train.json new file mode 100644 index 00000000..eceed90d --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data/tugraph-db-example/train.json @@ -0,0 +1,765 @@ +[ + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "找所有name属性值大于或等于'Peter'的节点,并返回这些节点的name 和 born属性值。", + "output": "MATCH (a) WHERE a.name >= 'Peter' RETURN a.name, a.born", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询姓名为\"量子号\",介绍为\"炮灰\"的组织u具有组织和计划间的关系的计划有哪些?返回m节点的name属性值,边r", + "output": "MATCH (u:organization{name:\"量子号\",introduce:\"炮灰\"})-[r:organization_plan]->(m:plan) RETURN m.name,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找与登录用户名为\"Stewart\"的用户p有关的电影有哪些?返回子图", + "output": "MATCH (p:user{id:\"399\",login:\"Stewart\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询所有通过has_keyword类型关系连接的节点对n和m,返回对应的n,关键字边,m", + "output": "MATCH (n)-[e:has_keyword]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "筛选出name属性值大于或等于'Peter'的节点a,返回节点a的name和born属性值。", + "output": "MATCH (a) WHERE a.name >= 'Peter' RETURN a.name, a.born", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "找到数据库中具有euid=0_3937_0_0_0的关系,并返回其相连的节点对。", + "output": "MATCH (a)-[r]->(b) WHERE euid(r)=\"0_3937_0_0_0\" RETURN a,b", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "将2.3转为整数后返回,并重命名为integer。", + "output": "RETURN toInteger('2.3') AS integer", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得与名为\"神迹计划\"的计划p有关的组织有哪些?返回对应的计划,e,组织", + "output": "MATCH (p:plan{name:\"神迹计划\"})-[e]-(neighbor:organization) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中符合(michael{id:\"1102\",name:\"Jack O'Connell\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "MATCH p=(michael{id:\"1102\",name:\"Jack O'Connell\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查找具有belt属性值为'white'或belt属性为空的所有节点,并返回这些节点的name、age和belt属性值,同时按照name属性值升序排列返回的结果。", + "output": "MATCH (n) WHERE n.belt = 'white' OR n.belt IS NULL RETURN n.name, n.age, n.belt ORDER BY n.name", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得名称为\"叶哲泰\",介绍为\"物理学教授,在文革中因为坚持真理被学生打死\"的人相关的计划有哪些?返回m节点的name属性值,边r", + "output": "MATCH (u:person{name:\"叶哲泰\",introduce:\"物理学教授,在文革中因为坚持真理被学生打死\"})-[r:person_plan]->(m:plan) RETURN DISTINCT m.name,r", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查找所有belt属性值为'white' 或belt属性为空的节点,返回这些节点的name、age和belt属性值,按照节点的name属性值升序排列返回的结果。", + "output": "MATCH (n) WHERE n.belt = 'white' OR n.belt IS NULL RETURN n.name, n.age, n.belt ORDER BY n.name", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "筛选出名称在字典序上等于或在'Peter'之后的所有节点,返回所有节点的name和born属性值。", + "output": "MATCH (a) WHERE a.name >= 'Peter' RETURN a.name, a.born", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找流派n,返回n节点的name属性值,n节点的name属性值,同时按照节点的name属性升序排序", + "output": "MATCH (n:genre) RETURN n.name,n.name ORDER BY n.name", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找姓名为\"威慑纪元\",时间为\"公元2208年-2270年\"的时间u具有时间关系的时间有哪些?返回m节点的name属性值,边r", + "output": "MATCH (u:time{name:\"威慑纪元\",time:\"公元2208年-2270年\"})-[r:time_time]->(m:time) RETURN m.name,r", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找与名字为\"关一帆\"的人p有关的人有哪些?返回对应的人,e,人", + "output": "MATCH (p:person{name:\"关一帆\"})-[e]-(neighbor:person) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得流派id是\"610\"的电影有哪些?返回a节点,m节点", + "output": "MATCH (m:genre{id:\"610\"})<-[:has_genre]-(a:movie) RETURN a,m", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "找到\"掩体计划\"的计划m有关的人有哪些?返回节点a,节点m", + "output": "MATCH (m:plan{name:\"掩体计划\"})<-[:person_plan]-(a:person) RETURN a,m", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中,返回节点a的name属性值,并将该值重命名为name,保留前670条数据", + "output": "MATCH (a{name:\"蓝星\"}) RETURN a.name AS name LIMIT 670", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找数据库中的关键字n,返回n节点的id属性值,n节点的name属性值,同时按照节点的id属性排序", + "output": "MATCH (n:keyword) RETURN n.id,n.name ORDER BY keyword.id", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "将'one','two','three'作为临时结果集coll,返回coll和coll的最后一个元素。", + "output": "WITH ['one','two','three'] AS coll RETURN coll, last(coll)", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "找到符合(michael{name:\"叶文洁\",introduce:\"清华大学教授、ETO精神领袖\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "MATCH p=(michael{name:\"叶文洁\",introduce:\"清华大学教授、ETO精神领袖\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找,返回a节点的name属性值,并将该值重命名为name", + "output": "MATCH (a{name:\"人类时代\",time:\"公元1453年-1980年\",important_events:\"叶文洁出生、红岸基地成立\"}) RETURN a.name AS name", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到与Laurence Fishburne有两步acted_in关系的共同演员,返回这些路径。", + "output": "MATCH p = (laurence {name: 'Laurence Fishburne'})-[:acted_in*2]-(co_actor) RETURN p", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询所有通过time_time类型关系连接的节点对n和m,返回对应的n,时间上的关系,m", + "output": "MATCH (n)-[e:time_time]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询Michael讨厌的电影,返回电影的标题和评分。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie) WHERE r.stars < 3 RETURN m.title, r.stars", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "在图中查找的时间n,返回n节点的important_events属性值,n节点的name属性值,同时按照节点的important_events属性升序排序", + "output": "MATCH (n:time) RETURN DISTINCT n.important_events,n.name ORDER BY n.important_events", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从数据库中查找名称为\"Chiwetel Ejiofor\",出生年份为\"1977\"的人u出版的电影有哪些?返回m节点的tagline属性值,边r", + "output": "MATCH (u:person{name:\"Chiwetel Ejiofor\",born:\"1977\"})-[r:produce]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "创建一个人物节点,其介绍为物理学教授,姓名为bbb,返回此节点。", + "output": "CREATE (a:person {introduce: \"物理学教授\", name: \"bbb\"}) RETURN a", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中姓名为\"二向箔\"的组织u具有组织间的关系的组织有哪些?返回m节点的introduce属性值,边r", + "output": "MATCH (u:organization{name:\"二向箔\"})-[r:organization_organization]->(m:organization) RETURN m.introduce,r", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找数据库中节点u人\"智子\"人物间关系有哪些?返回有关节点的introduce属性值,边r", + "output": "MATCH (u:person{name:\"智子\"})-[r:person_person]->(m:person) RETURN m.introduce,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式从数据库中查找与标题为\"The Avengers\"的电影p有关的人有哪些?返回对应的电影,e,人", + "output": "OPTIONAL MATCH (p:movie{id:\"2055\",title:\"The Avengers\"})-[e]-(neighbor:person) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询图数据库中与Michael Douglas有直接出边关系的路径。", + "output": "MATCH p = (michael {name: 'Michael Douglas'})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找与姓名为\"Talia Shire\"的人p有关的电影有哪些?返回子图", + "output": "MATCH (p:person{id:\"482\",name:\"Talia Shire\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "返回数据库中的所有匹配到的节点。", + "output": "MATCH (n) RETURN n", + "history": [] + }, + { + "db_id": "finbench", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nfinbench包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "给定一个src账户260083977992279253,在startTime1627020616747=和endTime=1669690342640之间的特定时间范围内,找到从src到dst的所有金额超过阈值的转出(edge),返回转出次数和金额总和。", + "output": "MATCH (n:Account{id:260083977992279253}) WITH n MATCH (n)-[e:transfer]->(m:Account) WHERE e.amount > 0.0 AND e.timestamp > 1627020616747 AND e.timestamp < 1669690342640 WITH m.id as dstId, count(e) as numEdges, sum(e.amount) as sumAmount RETURN dstId, numEdges, round(sumAmount * 1000) / 1000 as sumAmount ORDER BY sumAmount DESC, dstId ASC", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找所有通过has_keyword类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:has_keyword]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "找到符合(a)-[r]->(b)关系,过滤条件是 euid(r)的值必须等于0_3937_0_0_0,返回所有符合条件的a,b节点。", + "output": "MATCH (a)-[r]->(b) WHERE euid(r)=\"0_3937_0_0_0\" RETURN a,b", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找数据库中符合(michael{name:\"申玉菲\"})-[]->()模式的节点和关系,返回匹配的链路p", + "output": "MATCH p=(michael{name:\"申玉菲\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中与id为\"2239\"的人p有关的电影有哪些?返回子图", + "output": "MATCH (p:person{id:\"2239\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找给标签为\"Meet The Original Force Of Nature\"的电影m打分的用户有哪些?返回a节点,m节点", + "output": "MATCH (m:movie{tagline:\"Meet The Original Force Of Nature\"})<-[:rate]-(a:user) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询所有参演Forrest Gump电影的演员。", + "output": "MATCH (m:movie {title: 'Forrest Gump'})<-[:acted_in]-(a:person) RETURN a, m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从数据库中查找与标签为\"It was the greatest art heist in history\"的电影p有关的关键字有哪些?返回子图", + "output": "MATCH (p:movie{tagline:\"It was the greatest art heist in history\"})-[e]-(neighbor:keyword) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "finbench", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nfinbench包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找账户4779452526250437773,在startTime1627020616747=和endTime=1669690342640之间的时间范围内,其他账户向该账户转入金额超过100的转账记录。返回转入的数量和金额总和。", + "output": "MATCH (n:Account{id:4779452526250437773})<-[e:transfer]-(m:Account) WHERE e.amount > 100.0 AND e.timestamp > 1627020616747 AND e.timestamp < 1669690342640 WITH m.id as srcId, count(e) as numEdges, sum(e.amount) as sumAmount RETURN srcId, numEdges, round(sumAmount * 1000) / 1000 as sumAmount ORDER BY sumAmount DESC, srcId ASC", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得所有通过person_organization类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:person_organization]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到电影The Matrix节点以及与其有直接关系的所有节点,并返回这些节点。", + "output": "MATCH (matrix:movie {title: 'The Matrix'})-[*0..1]-(x) RETURN x", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中与出生日期为\"1943\"的人p有关的电影有哪些?返回相应的节点和关系", + "output": "MATCH (p:person{id:\"483\",name:\"Gianni Russo\",born:\"1943\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找符合(node{id:\"579\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p并返回。", + "output": "MATCH p=(node{id:\"579\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查询图数据库中名称为Carrie-Anne Moss的节点,并返回该节点的 born 属性值,且将该值重命名为SomethingTotallyDifferent。", + "output": "MATCH (a {name: 'Carrie-Anne Moss'}) RETURN a.born AS SomethingTotallyDifferent", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中符合(michael{name:\"量子号\",introduce:\"炮灰\"})-[]->()模式的节点和关系,返回匹配的链路p", + "output": "MATCH p=(michael{name:\"量子号\",introduce:\"炮灰\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询与用户u有相似低评分的电影偏好,但对其他电影有高评分的用户。返回相关的用户和电影。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v)-[r2:rate]->(m2:movie) WHERE r.stars < 3 AND s.stars < 3 AND r2.stars > 3 RETURN u, m, v, m2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中的用户n,返回n节点的id属性值,n节点的id属性值,按照节点的id属性升序排列返回的结果", + "output": "MATCH (n:user) RETURN n.id,n.id ORDER BY user.id", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式从数据库中查找所有通过rate类型关系连接的节点对n和m,返回对应的n,打分,m", + "output": "OPTIONAL MATCH (n)-[e:rate]-(m) RETURN DISTINCT n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询图数据库中与Michael Douglas有直接出边关系的路径。", + "output": "MATCH p = (michael {name: 'Michael Douglas'})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找,返回节点a的name属性值,并将该值重命名为name", + "output": "MATCH (a{name:\"阶梯计划\"}) RETURN a.name AS name", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "节点n,返回n.name,只保留前10项。", + "output": "MATCH (n) RETURN n.name LIMIT 10", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "从图数据库中查找所有带有person标签的节点,并按照节点的name属性值排序,跳过第一个结果,返回接下来的两个结果name属性值。", + "output": "MATCH (n:person) RETURN n.name ORDER BY n.name SKIP 1 LIMIT 2", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找,返回a节点的introduce属性值,并将该值重命名为introduce", + "output": "MATCH (a{name:\"叶哲泰\"}) RETURN a.introduce AS introduce", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找符合(michael{id:\"21\"})-[]->()模式的节点和关系,将匹配到的路径赋值给变量p,返回匹配的链路p", + "output": "MATCH p=(michael{id:\"21\"})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到与Michael Douglas有直接出边关系的所有路径,返回这些路径。", + "output": "MATCH p = (michael {name: 'Michael Douglas'})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中所有通过write类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:write]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中所有通过acted_in类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:acted_in]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式查找数据库中的电影n,返回n节点的title属性值,n节点的id属性值,同时按照节点的title属性升序排序", + "output": "OPTIONAL MATCH (n:movie) RETURN n.title,n.id ORDER BY movie.title", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到有关键字id为\"3388\"的关键字模板m的电影有哪些?返回a节点,m节点", + "output": "MATCH (m:keyword{id:\"3388\"})<-[:has_keyword]-(a:movie) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图数据库中创建一个带有person标签的新节点,并为该节点设置id属性为2001,name属性值为Anders,完成创建后,返回该节点。", + "output": "CREATE (n:person {id:2002, name: 'Andres'}) RETURN n", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找数据库中与名字为\"Paul Norell\"的人p有关的电影有哪些?返回对应的人,e,电影", + "output": "MATCH (p:person{id:\"660\",name:\"Paul Norell\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "创建一个带有person标签的新节点,并为该节点设置id属性为2002和name属性为Anders。创建完成后,返回新节点的详细信息。", + "output": "CREATE (n:person {id:2002, name: 'Andres'}) RETURN n", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找符合(michael{name:\"伊万\",introduce:\"万有引力号维护工程师\"})-[]->()模式的节点和关系,返回匹配的链路p,跳过前3条数据", + "output": "MATCH p=(michael{name:\"伊万\",introduce:\"万有引力号维护工程师\"})-[]->() RETURN p SKIP 3", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从数据库中查找与id为\"610\"的流派p有关的电影有哪些?返回相应的节点和关系", + "output": "MATCH (p:genre{id:\"610\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找的计划n,返回n节点的content属性值,n节点的content属性值,同时按照节点的content属性降序排序", + "output": "MATCH (n:plan) RETURN n.content,n.content ORDER BY n.content DESC", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询和用户Michael给同一部电影打分小于3星的用户,返回Michael、用户和电影的信息组成的子图。", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie)<-[s:rate]-(v) WHERE r.stars < 3 AND s.stars < 3 RETURN u, m, v", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从数据库中查找所有通过has_genre类型关系连接的节点对n和m,返回对应的n,流派e,m", + "output": "MATCH (n)-[e:has_genre]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "将'Anne', 'John', 'Bill', 'Diane', 'Eve'作为临时结果集names,从names中检索数据,并返回names列表中的第二到四个元素。", + "output": "WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names RETURN names[1..3] AS result", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "Michael讨厌的电影有哪些?", + "output": "MATCH (u:user {login: 'Michael'})-[r:rate]->(m:movie) WHERE r.stars < 3 RETURN m.title, r.stars", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询谁在电影Forrest Gump中扮演了什么角色,返回人的名字和扮演的角色。", + "output": "MATCH (m:movie {title: 'Forrest Gump'})<-[r:acted_in]-(a:person) RETURN a.name,r.role", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "在图中查找所有通过is_friend类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:is_friend]-(m) RETURN DISTINCT n,e,m", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查询边为人物关系的节点和路径。", + "output": "MATCH (n)-[e:person_person]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "finbench", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nfinbench包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "首先查找所有向src账户id是243478878511713854转过账的中间账户m,然后找到m的转账对象中是黑户的账号dst,且src和dst账号id不同,以上转账记录时间在1627020616747到1669690342640范围内,返回去重后的dst账号id并排序。", + "output": "MATCH (src:Account{id:243478878511713854})<-[e1:transfer]-(m:Account)-[e2:transfer]->(dst:Account) WHERE dst.isBlocked = true AND src.id <> dst.id AND e1.timestamp > 1627020616747 AND e1.timestamp < 1669690342640 AND e2.timestamp > 1627020616747 AND e2.timestamp < 1669690342640 RETURN DISTINCT dst.id as dstId ORDER BY dstId ASC", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到与Michael Douglas有直接出边关系的所有路径,返回这些路径。", + "output": "MATCH p = (michael {name: 'Michael Douglas'})-[]->() RETURN p", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到所有通过acted_in类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:acted_in]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到所有通过write类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:write]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "登录用户是Michaeld的朋友喜爱的电影有哪些?返回相关信息。", + "output": "MATCH (u:user {login: 'Michael'})-[:is_friend]->(v:user)-[r:rate]->(m:movie) WHERE r.stars > 3 RETURN u, v, m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "创建一个标签为person的节点,其id属性为2001,name属性值为Anders。", + "output": "CREATE (n:person {id:2001, name: 'Andres'})", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得出生年份为1977的Chiwetel Ejiofor出版的电影m有哪些?返回m节点的tagline属性值和连接关系。", + "output": "MATCH (u:person{name:\"Chiwetel Ejiofor\",born:\"1977\"})-[r:produce]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找名称为Carrie-Anne Moss的节点,返回该节点的born属性值,并将其重命名为SomethingTotallyDifferent。", + "output": "MATCH (a {name: 'Carrie-Anne Moss'}) RETURN a.born AS SomethingTotallyDifferent", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "找到电影The Matrix节点以及与其有直接关系的所有节点,并返回这些节点。", + "output": "MATCH (matrix:movie {title: 'The Matrix'})-[*0..1]-(x) RETURN x", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中与姓名为\"PDC\"的组织p有关的计划有哪些?返回对应的组织,e,计划", + "output": "MATCH (p:organization{name:\"PDC\"})-[e]-(neighbor:plan) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "从图数据库中查找属性belt为white或为空的节点n,返回这些节点n的name、age和belt属性,同时按照节点的name属性排序。", + "output": "MATCH (n) WHERE n.belt = 'white' OR n.belt IS NULL RETURN n.name, n.age, n.belt ORDER BY n.name", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查找名称为Carrie-Anne Moss的节点,返回该节点的born属性值,并将其重命名为SomethingTotallyDifferent。", + "output": "MATCH (a {name: 'Carrie-Anne Moss'}) RETURN a.born AS SomethingTotallyDifferent", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "从数据库中查找所有通过organization_organization类型关系连接的节点对n和m,返回相应的节点和关系", + "output": "MATCH (n)-[e:organization_organization]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "查找图数据库中具有euid=0_3937_0_0_0关系,并返回与这些关系相关联的两个节点。", + "output": "MATCH (a)-[r]->(b) WHERE euid(r)=\"0_3937_0_0_0\" RETURN a,b", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得与标签为\"The extraordinary true story of Solomon Northup\"的电影p有关的用户有哪些?返回相应的节点和关系,跳过前9条数据", + "output": "MATCH (p:movie{id:\"1693\",title:\"12 Years a Slave\",tagline:\"The extraordinary true story of Solomon Northup\"})-[e]-(neighbor:user) RETURN p,e,neighbor SKIP 9", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中导演id为\"1\"的电影m的人有哪些?返回a节点,m节点", + "output": "MATCH (m:movie{id:\"1\"})<-[:directed]-(a:person) RETURN a,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得所有通过produce类型关系连接的节点对n和m,返回对应的n,出版,m", + "output": "MATCH (n)-[e:produce]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "common", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\n\n\n", + "input": "找到符合(a)-[r]->(b)关系,过滤条件是 euid(r)的值必须等于0_3937_0_0_0,返回所有符合条件的a,b节点。", + "output": "MATCH (a)-[r]->(b) WHERE euid(r)=\"0_3937_0_0_0\" RETURN a,b", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "查找图数据库中与名字为\"PIA\"的组织p有关的人有哪些?返回子图", + "output": "MATCH (p:organization{name:\"PIA\"})-[e]-(neighbor:person) RETURN DISTINCT p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "在图中查找与名为\"雾伞计划\"的计划p有关的人有哪些?返回对应的计划,e,人", + "output": "MATCH (p:plan{name:\"雾伞计划\"})-[e]-(neighbor:person) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中名为\"Pat Morita\"的人u写的电影有哪些?返回m节点的tagline属性值和连接关系。", + "output": "MATCH (u:person{name:\"Pat Morita\"})-[r:write]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查询与标题为\"The Monuments Men\"的电影p有关的人有哪些?返回子图", + "output": "MATCH (p:movie{id:\"1356\",title:\"The Monuments Men\"})-[e]-(neighbor:person) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "以可选的方式找到登录用户名为\"Jacob\"的用户u打分的电影有哪些?返回m节点的tagline属性值,r边", + "output": "OPTIONAL MATCH (u:user{login:\"Jacob\"})-[r:rate]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得所有通过is_friend类型关系连接的节点对n和m,返回子图", + "output": "MATCH (n)-[e:is_friend]-(m) RETURN n,e,m", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中带有person标签的节点的name属性值和带有movie标签的节点的title属性值,将这些结果合并在一起返回,并将合并后的列名统一为 name。", + "output": "MATCH (n:person) RETURN n.name AS name UNION ALL MATCH (n:movie) RETURN n.title AS name", + "history": [] + }, + { + "db_id": "finbench", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nfinbench包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "根据账户id4817170722885471951,找到1627020616747-1669690342640时间段内的所有转入和转出关系,返回转入和转出各自的总金额和最大金额,如果转入或转出边不存在,则返回-1作为最大金额值。", + "output": "MATCH (n:Account{id:%d}) WITH n OPTIONAL MATCH (n)-[e:transfer]->(m:Account) WHERE e.timestamp > 1627020616747 AND e.timestamp < 1669690342640 WITH n, sum(e.amount) as sumEdge1Amount, max(e.amount) as maxEdge1Amount, count(e) as numEdge1 OPTIONAL MATCH (n)<-[e:transfer]-(m:Account) WHERE e.timestamp > 1627020616747 AND e.timestamp < 1669690342640 WITH sumEdge1Amount, maxEdge1Amount, numEdge1, sum(e.amount) as sumEdge2Amount, max(e.amount) as maxEdge2Amount, count(e) as numEdge2 RETURN round(sumEdge1Amount * 1000) / 1000 as sumEdge1Amount, CASE WHEN maxEdge1Amount < 0 THEN -1 ELSE round(maxEdge1Amount * 1000) / 1000 END as maxEdge1Amount, numEdge1, round(sumEdge2Amount * 1000) / 1000 as sumEdge2Amount, CASE WHEN maxEdge2Amount < 0 THEN -1 ELSE round(maxEdge2Amount * 1000) / 1000 END as maxEdge2Amount, numEdge2", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "从数据库中查找与名字为\"motion capture\"的关键字p有关的电影有哪些?返回子图", + "output": "MATCH (p:keyword{id:\"2587\",name:\"motion capture\"})-[e]-(neighbor:movie) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中与用户id为\"240\"的节点p有关的用户有哪些?返回相应的节点和关系", + "output": "MATCH (p:user{id:\"240\"})-[e]-(neighbor:user) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "在图中查找与名字为\"PIA\"的组织p有关的组织有哪些?返回相应的节点和关系", + "output": "MATCH (p:organization{name:\"PIA\"})-[e]-(neighbor:organization) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "获得与id为\"39\"的用户p有关的用户有哪些?返回子图", + "output": "MATCH (p:user{id:\"39\"})-[e]-(neighbor:user) RETURN p,e,neighbor", + "history": [] + }, + { + "db_id": "movie", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nmovie包含节点person、genre、keyword、movie、user和边acted_in、rate、directed、is_friend、has_genre、has_keyword、produce、write。节点person有属性id、name、born、poster_image。节点genre有属性id、name。节点keyword有属性id、name。节点movie有属性id、title、tagline、summary、poster_image、duration、rated。节点user有属性id、login。边acted_in有属性role。边rate有属性stars。\n\n", + "input": "查找图数据库中名为\"David Wenham\"的人u导演的电影有哪些?返回m节点的tagline属性值和连接关系。", + "output": "MATCH (u:person{name:\"David Wenham\"})-[r:directed]->(m:movie) RETURN m.tagline,r", + "history": [] + }, + { + "db_id": "the_three_body", + "instruction": "我希望你像一个Tugraph数据库前端一样工作,你只需要返回给我cypher语句。下面是一条描述任务的指令,写一条正确的response来完成这个请求.\n\"\n##Instruction:\nthe_three_body包含节点person、organization、plan、time和边person_person、person_plan、person_organization、organization_plan、organization_organization、time_time。节点person有属性name、introduce。节点organization有属性name、introduce。节点plan有属性name、content。节点time有属性name、time、important_events。边person_person有属性relation。边person_plan有属性relation。边person_organization有属性relation。边organization_plan有属性relation。边organization_organization有属性relation。边time_time有属性relation。\n\n", + "input": "获得的人n,返回n节点的introduce属性值,n节点的introduce属性值,同时按照节点的introduce属性排序", + "output": "MATCH (n:person) RETURN n.introduce,n.introduce ORDER BY n.introduce", + "history": [] + } +] \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/data_process/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/data_process/__init__.py new file mode 100644 index 00000000..8affaf70 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data_process/__init__.py @@ -0,0 +1,4 @@ +""" +dbgpt_hub.data_process +============== +""" diff --git a/dbgpt_hub/data_process/data_utils.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/data_process/data_utils.py similarity index 98% rename from dbgpt_hub/data_process/data_utils.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/data_process/data_utils.py index 377974b3..735c467d 100644 --- a/dbgpt_hub/data_process/data_utils.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/data_process/data_utils.py @@ -1,46 +1,42 @@ import hashlib import os -import numpy as np -import pandas as pd -import tiktoken from itertools import chain from typing import ( + TYPE_CHECKING, Any, Dict, + Generator, List, + Literal, Optional, Tuple, Union, - TYPE_CHECKING, - Generator, - Literal, ) + +import numpy as np +import pandas as pd +import tiktoken from datasets import ( Dataset, DatasetDict, concatenate_datasets, - load_dataset, interleave_datasets, + load_dataset, ) -from transformers.tokenization_utils import PreTrainedTokenizer -from dbgpt_hub.configs.config import EXT2TYPE, IGNORE_INDEX -from dbgpt_hub.configs.data_args import ( - DEFAULT_PROMPT_DICT, +from ..configs.config import EXT2TYPE, IGNORE_INDEX +from ..configs.data_args import ( ALPACA_PROMPT_DICT, + DEFAULT_PROMPT_DICT, SQL_PROMPT_DICT, - Template, Llama2Template, + Template, ) if TYPE_CHECKING: - from dbgpt_hub.configs.model_args import ModelArguments - from dbgpt_hub.configs.data_args import DataArguments - from datasets import IterableDataset - from transformers import TrainingArguments, Seq2SeqTrainingArguments - -from dbgpt_hub.llm_base.loggings import get_logger + pass +from dbgpt_hub_gql.llm_base.loggings import get_logger logger = get_logger(__name__) diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluation.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluation.py new file mode 100644 index 00000000..8b172b6a --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluation.py @@ -0,0 +1,101 @@ +import os +import sys +import argparse +import importlib +import json +import prettytable as pt +from evaluator.evaluator import Evaluator +from evaluator.similarity_evaluator import SimilarityEvaluator + + +def evaluate(gold, predict, etype, impl): + log_file = open(f"{os.path.dirname(__file__)}/../output/logs/eval.log", "w") + log_lines = [] + + with open(gold) as f: + gseq_one = [] + for l in f.readlines(): + if len(l.strip()) == 0: + # when some predict is none, support it can continue work + gseq_one.append("no out") + else: + gseq_one.append(l.strip()) + + with open(predict) as f: + plist = [] + pseq_one = [] + for l in f.readlines(): + if len(l.strip()) == 0: + # when some predict is none, support it can continue work + pseq_one.append("no out") + + else: + pseq_one.append(l.strip()) + + assert len(gseq_one) == len( + pseq_one + ), "number of predicted queries and gold standard queries must equal" + + score_total = 0 + if etype == "similarity": + evaluator = SimilarityEvaluator() + elif etype == "grammar": + model_path = f"evaluator.impl.{impl}.grammar_evaluator" + m = importlib.import_module(model_path) + GrammarEvaluator = getattr(m, "GrammarEvaluator") + evaluator = GrammarEvaluator() + + total = 0 + for i in range(len(gseq_one)): + score = evaluator.evaluate(pseq_one[i], gseq_one[i]) + if score != -1: + score_total += score + total += 1 + tmp_log = {} + tmp_log["pred"] = pseq_one[i] + tmp_log["gold"] = gseq_one[i] + tmp_log["score"] = score + log_lines.append(tmp_log) + + json.dump(log_lines, log_file, ensure_ascii=False, indent=4) + + tb = pt.PrettyTable() + tb.field_names = ["Evaluation Type", "Total Count", "Accuracy"] + tb.add_row([etype, len(gseq_one), "{:.3f}".format(score_total / total)]) + print(tb) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + "--input", + dest="input", + type=str, + help="the path to the input file", + required=True, + ) + parser.add_argument( + "--gold", dest="gold", type=str, help="the path to the gold queries", default="" + ) + parser.add_argument( + "--etype", + dest="etype", + type=str, + default="similarity", + help="evaluation type, exec for test suite accuracy, match for the original exact set match accuracy", + choices=("similarity", "grammar"), + ) + parser.add_argument( + "--impl", + dest="impl", + type=str, + default="tugraph-analytics", + help="implementation folder for grammar evaluator", + ) + args = parser.parse_args() + + # Print args + print(f"params as fllows \n {args}") + + # Second, evaluate the predicted GQL queries + evaluate(args.gold, args.input, args.etype, args.impl) diff --git a/dbgpt_hub/llm_base/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/__init__.py similarity index 100% rename from dbgpt_hub/llm_base/__init__.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/__init__.py diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/evaluator.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/evaluator.py new file mode 100644 index 00000000..8b97babf --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/evaluator.py @@ -0,0 +1,3 @@ +class Evaluator: + def evaluate(self, query_predict, query_gold): + return 1 diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/__init__.py @@ -0,0 +1 @@ + diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-analytics/geaflow-dsl-parser-0.5.0-jar-with-dependencies.jar b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-analytics/geaflow-dsl-parser-0.5.0-jar-with-dependencies.jar new file mode 100644 index 00000000..caefe106 Binary files /dev/null and b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-analytics/geaflow-dsl-parser-0.5.0-jar-with-dependencies.jar differ diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-analytics/grammar_evaluator.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-analytics/grammar_evaluator.py new file mode 100644 index 00000000..9d474c1a --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-analytics/grammar_evaluator.py @@ -0,0 +1,28 @@ +import jpype +import os.path + + +class GrammarEvaluator: + def __init__(self): + jvmPath = jpype.getDefaultJVMPath() + + # gql grammar paerser from tugraph-analytics https://github.com/TuGraph-family/tugraph-analytics/tree/master/geaflow/geaflow-dsl/geaflow-dsl-parser/src/main/java/com/antgroup/geaflow/dsl/parser + jarpath = ( + os.path.dirname(__file__) + + "/geaflow-dsl-parser-0.5.0-jar-with-dependencies.jar" + ) + jvm_cp = f"-Djava.class.path={jarpath}" + jpype.startJVM(jvmPath, "-ea", classpath=[jarpath], convertStrings=False) + JDClass = jpype.JClass("com.antgroup.geaflow.dsl.parser.GeaFlowDSLParser") + self.jd = JDClass() + + def evaluate(self, query_predict, query_gold): + try: + result_gold = self.jd.parseStatement(query_gold) + try: + result_predict = self.jd.parseStatement(query_predict) + return 1 + except jpype.JException as e_query: + return 0 + except jpype.JException as e_gold: + return -1 diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.g4 b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.g4 new file mode 100644 index 00000000..0fee20da --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.g4 @@ -0,0 +1,695 @@ +/* + * Copyright (c) 2015-2019 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Attribution Notice under the terms of the Apache License 2.0 + * + * This work was created by the collective efforts of the openCypher community. + * Without limiting the terms of Section 6, any Derivative Work that is not + * approved by the public consensus process of the openCypher Implementers Group + * should not be described as “Cypher” (and Cypher® is a registered trademark of + * Neo4j Inc.) or as "openCypher". Extensions by implementers or prototypes or + * proposals for change that have been documented or implemented should only be + * described as "implementation extensions to Cypher" or as "proposed changes to + * Cypher that are not yet approved by the openCypher community". + */ +/* + * @description Cypher for TuGraph (derived from Cypher.g4 in openCypher@b724b18) + * @created WangTao + * @date 2019.08.27 + */ +grammar Lcypher; + +oC_Cypher : SP? oC_Statement ( SP? ';' )? SP? EOF ; + +oC_Statement : oC_Query + | EXPLAIN SP? oC_Query + | PROFILE SP? oC_Query + ; + +EXPLAIN : ( 'E' | 'e' ) ( 'X' | 'x' ) ( 'P' | 'p' ) ( 'L' | 'l' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ; + +PROFILE : ( 'P' | 'p' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'F' | 'f' ) ( 'I' | 'i' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ; + +oC_Query : oC_RegularQuery + | oC_StandaloneCall + ; + +oC_RegularQuery : oC_SingleQuery ( SP? oC_Union )* ; + +oC_Union : ( UNION SP ALL SP? oC_SingleQuery ) + | ( UNION SP? oC_SingleQuery ) + ; + +UNION : ( 'U' | 'u' ) ( 'N' | 'n' ) ( 'I' | 'i' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ; + +ALL : ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ; + +oC_SingleQuery : oC_SinglePartQuery + | oC_MultiPartQuery + ; + +oC_SinglePartQuery : ( ( oC_ReadingClause SP? )* oC_Return ) + | ( ( oC_ReadingClause SP? )* oC_UpdatingClause ( SP? oC_UpdatingClause )* ( SP? oC_Return )? ) + ; + +oC_MultiPartQuery : ( ( oC_ReadingClause SP? )* ( oC_UpdatingClause SP? )* oC_With SP? )+ oC_SinglePartQuery ; + +oC_UpdatingClause : oC_Create + | oC_Merge + | oC_Delete + | oC_Set + | oC_Remove + ; + +oC_ReadingClause : oC_Match + | oC_Unwind + | oC_InQueryCall + ; + +oC_Match : ( OPTIONAL_ SP )? MATCH SP? oC_Pattern ( SP? oC_Hint )* ( SP? oC_Where )? ; + +OPTIONAL_ : ( 'O' | 'o' ) ( 'P' | 'p' ) ( 'T' | 't' ) ( 'I' | 'i' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ; + +MATCH : ( 'M' | 'm' ) ( 'A' | 'a' ) ( 'T' | 't' ) ( 'C' | 'c' ) ( 'H' | 'h' ) ; + +oC_Unwind : UNWIND SP? oC_Expression SP AS SP oC_Variable ; + +UNWIND : ( 'U' | 'u' ) ( 'N' | 'n' ) ( 'W' | 'w' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ; + +AS : ( 'A' | 'a' ) ( 'S' | 's' ) ; + +oC_Merge : MERGE SP? oC_PatternPart ( SP oC_MergeAction )* ; + +MERGE : ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'G' | 'g' ) ( 'E' | 'e' ) ; + +oC_MergeAction : ( ON SP MATCH SP oC_Set ) + | ( ON SP CREATE SP oC_Set ) + ; + +ON : ( 'O' | 'o' ) ( 'N' | 'n' ) ; + +CREATE : ( 'C' | 'c' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'A' | 'a' ) ( 'T' | 't' ) ( 'E' | 'e' ) ; + +oC_Create : CREATE SP? oC_Pattern ; + +oC_Set : SET SP? oC_SetItem ( SP? ',' SP? oC_SetItem )* ; + +SET : ( 'S' | 's' ) ( 'E' | 'e' ) ( 'T' | 't' ) ; + +oC_SetItem : ( oC_PropertyExpression SP? '=' SP? oC_Expression ) + | ( oC_Variable SP? '=' SP? oC_Expression ) + | ( oC_Variable SP? '+=' SP? oC_Expression ) + | ( oC_Variable SP? oC_NodeLabels ) + ; + +oC_Delete : ( DETACH SP )? DELETE_ SP? oC_Expression ( SP? ',' SP? oC_Expression )* ; + +DETACH : ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'C' | 'c' ) ( 'H' | 'h' ) ; + +DELETE_ : ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'T' | 't' ) ( 'E' | 'e' ) ; + +oC_Remove : REMOVE SP oC_RemoveItem ( SP? ',' SP? oC_RemoveItem )* ; + +REMOVE : ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'M' | 'm' ) ( 'O' | 'o' ) ( 'V' | 'v' ) ( 'E' | 'e' ) ; + +oC_RemoveItem : ( oC_Variable oC_NodeLabels ) + | oC_PropertyExpression + ; + +oC_InQueryCall : CALL SP oC_ExplicitProcedureInvocation ( SP? YIELD SP oC_YieldItems )? ; + +CALL : ( 'C' | 'c' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ; + +YIELD : ( 'Y' | 'y' ) ( 'I' | 'i' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ; + +oC_StandaloneCall : CALL SP ( oC_ExplicitProcedureInvocation | oC_ImplicitProcedureInvocation ) ( SP YIELD SP oC_YieldItems )? ; + +oC_YieldItems : ( '*' | ( oC_YieldItem ( SP? ',' SP? oC_YieldItem )* ) ) ( SP? oC_Where )? ; + +oC_YieldItem : ( oC_ProcedureResultField SP AS SP )? oC_Variable ; + +oC_With : WITH ( SP? DISTINCT )? SP oC_ReturnBody ( SP? oC_Where )? ; + +WITH : ( 'W' | 'w' ) ( 'I' | 'i' ) ( 'T' | 't' ) ( 'H' | 'h' ) ; + +DISTINCT : ( 'D' | 'd' ) ( 'I' | 'i' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'C' | 'c' ) ( 'T' | 't' ) ; + +oC_Return : RETURN ( SP? DISTINCT )? SP oC_ReturnBody ; + +RETURN : ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'T' | 't' ) ( 'U' | 'u' ) ( 'R' | 'r' ) ( 'N' | 'n' ) ; + +oC_ReturnBody : oC_ReturnItems ( SP oC_Order )? ( SP oC_Skip )? ( SP oC_Limit )? ; + +oC_ReturnItems : ( '*' ( SP? ',' SP? oC_ReturnItem )* ) + | ( oC_ReturnItem ( SP? ',' SP? oC_ReturnItem )* ) + ; + +oC_ReturnItem : ( oC_Expression SP AS SP oC_Variable ) + | oC_Expression + ; + +oC_Order : ORDER SP BY SP oC_SortItem ( ',' SP? oC_SortItem )* ; + +ORDER : ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ; + +BY : ( 'B' | 'b' ) ( 'Y' | 'y' ) ; + +oC_Skip : L_SKIP SP oC_Expression ; + +L_SKIP : ( 'S' | 's' ) ( 'K' | 'k' ) ( 'I' | 'i' ) ( 'P' | 'p' ) ; + +oC_Limit : LIMIT SP oC_Expression ; + +LIMIT : ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'I' | 'i' ) ( 'T' | 't' ) ; + +oC_SortItem : oC_Expression ( SP? ( ASCENDING | ASC | DESCENDING | DESC ) )? ; + +ASCENDING : ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ( 'E' | 'e' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'G' | 'g' ) ; + +ASC : ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ; + +DESCENDING : ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ( 'E' | 'e' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'G' | 'g' ) ; + +DESC : ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ; + +oC_Hint : USING SP JOIN SP ON SP oC_Variable + | USING SP START SP ON SP oC_Variable + ; + +USING : ( 'U' | 'u' ) ( 'S' | 's' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'G' | 'g' ) ; + +JOIN : ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ; + +START : ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'R' | 'r' ) ( 'T' | 't' ) ; + +oC_Where : WHERE SP oC_Expression ; + +WHERE : ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ; + +oC_Pattern : oC_PatternPart ( SP? ',' SP? oC_PatternPart )* ; + +oC_PatternPart : ( oC_Variable SP? '=' SP? oC_AnonymousPatternPart ) + | oC_AnonymousPatternPart + ; + +oC_AnonymousPatternPart : oC_PatternElement ; + +oC_PatternElement : ( oC_NodePattern ( SP? oC_PatternElementChain )* ) + | ( '(' oC_PatternElement ')' ) + ; + +oC_NodePattern : '(' SP? ( oC_Variable SP? )? ( oC_NodeLabels SP? )? ( oC_Properties SP? )? ')' ; + +oC_PatternElementChain : oC_RelationshipPattern SP? oC_NodePattern ; + +oC_RelationshipPattern : ( oC_LeftArrowHead SP? oC_Dash SP? oC_RelationshipDetail? SP? oC_Dash SP? oC_RightArrowHead ) + | ( oC_LeftArrowHead SP? oC_Dash SP? oC_RelationshipDetail? SP? oC_Dash ) + | ( oC_Dash SP? oC_RelationshipDetail? SP? oC_Dash SP? oC_RightArrowHead ) + | ( oC_Dash SP? oC_RelationshipDetail? SP? oC_Dash ) + ; + +oC_RelationshipDetail : '[' SP? ( oC_Variable SP? )? ( oC_RelationshipTypes SP? )? oC_RangeLiteral? ( oC_Properties SP? )? ']' ; + +oC_Properties : oC_MapLiteral + | oC_Parameter + ; + +oC_RelationshipTypes : ':' SP? oC_RelTypeName ( SP? '|' ':'? SP? oC_RelTypeName )* ; + +oC_NodeLabels : oC_NodeLabel ( SP? oC_NodeLabel )* ; + +oC_NodeLabel : ':' SP? oC_LabelName ; + +oC_RangeLiteral : '*' SP? ( oC_IntegerLiteral SP? )? ( '..' SP? ( oC_IntegerLiteral SP? )? )? ; + +oC_LabelName : oC_SchemaName ; + +oC_RelTypeName : oC_SchemaName ; + +oC_Expression : oC_OrExpression ; + +oC_OrExpression : oC_XorExpression ( SP OR SP oC_XorExpression )* ; + +OR : ( 'O' | 'o' ) ( 'R' | 'r' ) ; + +oC_XorExpression : oC_AndExpression ( SP XOR SP oC_AndExpression )* ; + +XOR : ( 'X' | 'x' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ; + +oC_AndExpression : oC_NotExpression ( SP AND SP oC_NotExpression )* ; + +AND : ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ; + +oC_NotExpression : ( NOT SP? )* oC_ComparisonExpression ; + +NOT : ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ; + +oC_ComparisonExpression : oC_AddOrSubtractExpression ( SP? oC_PartialComparisonExpression )* ; + +oC_AddOrSubtractExpression : oC_MultiplyDivideModuloExpression ( ( SP? '+' SP? oC_MultiplyDivideModuloExpression ) | ( SP? '-' SP? oC_MultiplyDivideModuloExpression ) )* ; + +oC_MultiplyDivideModuloExpression : oC_PowerOfExpression ( ( SP? '*' SP? oC_PowerOfExpression ) | ( SP? '/' SP? oC_PowerOfExpression ) | ( SP? '%' SP? oC_PowerOfExpression ) )* ; + +oC_PowerOfExpression : oC_UnaryAddOrSubtractExpression ( SP? '^' SP? oC_UnaryAddOrSubtractExpression )* ; + +oC_UnaryAddOrSubtractExpression : ( ( '+' | '-' ) SP? )* oC_StringListNullOperatorExpression ; + +oC_StringListNullOperatorExpression : oC_PropertyOrLabelsExpression ( oC_StringOperatorExpression | oC_ListOperatorExpression | oC_NullOperatorExpression )* ; + +oC_ListOperatorExpression : ( SP IN SP? oC_PropertyOrLabelsExpression ) + | ( SP? '[' oC_Expression ']' ) + | ( SP? '[' oC_Expression? '..' oC_Expression? ']' ) + ; + +IN : ( 'I' | 'i' ) ( 'N' | 'n' ) ; + +oC_StringOperatorExpression : ( ( SP STARTS SP WITH ) | ( SP ENDS SP WITH ) | ( SP CONTAINS ) | ( SP REGEXP ) ) SP? oC_PropertyOrLabelsExpression ; + +STARTS : ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'R' | 'r' ) ( 'T' | 't' ) ( 'S' | 's' ) ; + +ENDS : ( 'E' | 'e' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ( 'S' | 's' ) ; + +CONTAINS : ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ; + +REGEXP: ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'G' | 'g' ) ( 'E' | 'e' ) ( 'X' | 'x' ) ( 'P' | 'p' ) ; + +oC_NullOperatorExpression : ( SP IS SP NULL_ ) + | ( SP IS SP NOT SP NULL_ ) + ; + +IS : ( 'I' | 'i' ) ( 'S' | 's' ) ; + +NULL_ : ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ; + +oC_PropertyOrLabelsExpression : oC_Atom ( SP? oC_PropertyLookup )* ( SP? oC_NodeLabels )? ; + +oC_Atom : oC_Literal + | oC_Parameter + | oC_CaseExpression + | ( COUNT SP? '(' SP? '*' SP? ')' ) + | oC_ListComprehension + | oC_PatternComprehension + | ( ALL SP? '(' SP? oC_FilterExpression SP? ')' ) + | ( ANY SP? '(' SP? oC_FilterExpression SP? ')' ) + | ( NONE SP? '(' SP? oC_FilterExpression SP? ')' ) + | ( SINGLE SP? '(' SP? oC_FilterExpression SP? ')' ) + | oC_RelationshipsPattern + | oC_ParenthesizedExpression + | oC_FunctionInvocation + | oC_Variable + ; + +COUNT : ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'N' | 'n' ) ( 'T' | 't' ) ; + +ANY : ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ; + +NONE : ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ; + +SINGLE : ( 'S' | 's' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'G' | 'g' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ; + +oC_Literal : oC_NumberLiteral + | StringLiteral + | oC_BooleanLiteral + | NULL_ + | oC_MapLiteral + | oC_ListLiteral + ; + +oC_BooleanLiteral : TRUE_ + | FALSE_ + ; + +TRUE_ : ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) ; + +FALSE_ : ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) ; + +oC_ListLiteral : '[' SP? ( oC_Expression SP? ( ',' SP? oC_Expression SP? )* )? ']' ; + +oC_PartialComparisonExpression : ( '=' SP? oC_AddOrSubtractExpression ) + | ( '<>' SP? oC_AddOrSubtractExpression ) + | ( '<' SP? oC_AddOrSubtractExpression ) + | ( '>' SP? oC_AddOrSubtractExpression ) + | ( '<=' SP? oC_AddOrSubtractExpression ) + | ( '>=' SP? oC_AddOrSubtractExpression ) + ; + +oC_ParenthesizedExpression : '(' SP? oC_Expression SP? ')' ; + +oC_RelationshipsPattern : oC_NodePattern ( SP? oC_PatternElementChain )+ ; + +oC_FilterExpression : oC_IdInColl ( SP? oC_Where )? ; + +oC_IdInColl : oC_Variable SP IN SP oC_Expression ; + +oC_FunctionInvocation : oC_FunctionName SP? '(' SP? ( DISTINCT SP? )? ( oC_Expression SP? ( ',' SP? oC_Expression SP? )* )? ')' ; + +oC_FunctionName : ( oC_Namespace oC_SymbolicName ) + | EXISTS + ; + +EXISTS : ( 'E' | 'e' ) ( 'X' | 'x' ) ( 'I' | 'i' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'S' | 's' ) ; + +oC_ExplicitProcedureInvocation : oC_ProcedureName SP? '(' SP? ( oC_Expression SP? ( ',' SP? oC_Expression SP? )* )? ')' ; + +oC_ImplicitProcedureInvocation : oC_ProcedureName ; + +oC_ProcedureResultField : oC_SymbolicName ; + +oC_ProcedureName : oC_Namespace oC_SymbolicName ; + +oC_Namespace : ( oC_SymbolicName '.' )* ; + +oC_ListComprehension : '[' SP? oC_FilterExpression ( SP? '|' SP? oC_Expression )? SP? ']' ; + +oC_PatternComprehension : '[' SP? ( oC_Variable SP? '=' SP? )? oC_RelationshipsPattern SP? ( WHERE SP? oC_Expression SP? )? '|' SP? oC_Expression SP? ']' ; + +oC_PropertyLookup : '.' SP? ( oC_PropertyKeyName ) ; + +oC_CaseExpression : ( ( CASE ( SP? oC_CaseAlternatives )+ ) | ( CASE SP? oC_Expression ( SP? oC_CaseAlternatives )+ ) ) ( SP? ELSE SP? oC_Expression )? SP? END ; + +CASE : ( 'C' | 'c' ) ( 'A' | 'a' ) ( 'S' | 's' ) ( 'E' | 'e' ) ; + +ELSE : ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) ; + +END : ( 'E' | 'e' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ; + +oC_CaseAlternatives : WHEN SP? oC_Expression SP? THEN SP? oC_Expression ; + +WHEN : ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'N' | 'n' ) ; + +THEN : ( 'T' | 't' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'N' | 'n' ) ; + +oC_Variable : oC_SymbolicName ; + +StringLiteral : ( '"' ( StringLiteral_0 | EscapedChar )* '"' ) + | ( '\'' ( StringLiteral_1 | EscapedChar )* '\'' ) + ; + +EscapedChar : '\\' ( '\\' | '\'' | '"' | ( 'B' | 'b' ) | ( 'F' | 'f' ) | ( 'N' | 'n' ) | ( 'R' | 'r' ) | ( 'T' | 't' ) | ( ( 'U' | 'u' ) ( HexDigit HexDigit HexDigit HexDigit ) ) | ( ( 'U' | 'u' ) ( HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit ) ) ) ; + +oC_NumberLiteral : oC_DoubleLiteral + | oC_IntegerLiteral + ; + +oC_MapLiteral : '{' SP? ( oC_PropertyKeyName SP? ':' SP? oC_Expression SP? ( ',' SP? oC_PropertyKeyName SP? ':' SP? oC_Expression SP? )* )? '}' ; + +oC_Parameter : '$' ( oC_SymbolicName | DecimalInteger ) ; + +oC_PropertyExpression : oC_Atom ( SP? oC_PropertyLookup )+ ; + +oC_PropertyKeyName : oC_SchemaName ; + +oC_IntegerLiteral : HexInteger + | OctalInteger + | DecimalInteger + ; + +HexInteger : '0x' ( HexDigit )+ ; + +DecimalInteger : ZeroDigit + | ( NonZeroDigit ( Digit )* ) + ; + +OctalInteger : ZeroDigit ( OctDigit )+ ; + +HexLetter : ( 'A' | 'a' ) + | ( 'B' | 'b' ) + | ( 'C' | 'c' ) + | ( 'D' | 'd' ) + | ( 'E' | 'e' ) + | ( 'F' | 'f' ) + ; + +HexDigit : Digit + | HexLetter + ; + +Digit : ZeroDigit + | NonZeroDigit + ; + +NonZeroDigit : NonZeroOctDigit + | '8' + | '9' + ; + +NonZeroOctDigit : '1' + | '2' + | '3' + | '4' + | '5' + | '6' + | '7' + ; + +OctDigit : ZeroDigit + | NonZeroOctDigit + ; + +ZeroDigit : '0' ; + +oC_DoubleLiteral : ExponentDecimalReal + | RegularDecimalReal + ; + +ExponentDecimalReal : ( ( Digit )+ | ( ( Digit )+ '.' ( Digit )+ ) | ( '.' ( Digit )+ ) ) ( 'E' | 'e' ) '-'? ( Digit )+ ; + +RegularDecimalReal : ( Digit )* '.' ( Digit )+ ; + +oC_SchemaName : oC_SymbolicName + | oC_ReservedWord + ; + +oC_SymbolicName : UnescapedSymbolicName + | EscapedSymbolicName + | HexLetter + | COUNT + | FILTER + | EXTRACT + | ANY + | NONE + | SINGLE + ; + +FILTER : ( 'F' | 'f' ) ( 'I' | 'i' ) ( 'L' | 'l' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ; + +EXTRACT : ( 'E' | 'e' ) ( 'X' | 'x' ) ( 'T' | 't' ) ( 'R' | 'r' ) ( 'A' | 'a' ) ( 'C' | 'c' ) ( 'T' | 't' ) ; + +UnescapedSymbolicName : IdentifierStart ( IdentifierPart )* ; + +oC_ReservedWord : ALL + | ASC + | ASCENDING + | BY + | CREATE + | DELETE_ + | DESC + | DESCENDING + | DETACH + | EXISTS + | LIMIT + | MATCH + | MERGE + | ON + | OPTIONAL_ + | ORDER + | REMOVE + | RETURN + | SET + | L_SKIP + | WHERE + | WITH + | UNION + | UNWIND + | AND + | AS + | CONTAINS + | DISTINCT + | ENDS + | IN + | IS + | NOT + | OR + | STARTS + | XOR + | FALSE_ + | TRUE_ + | NULL_ + | CONSTRAINT + | DO + | FOR + | REQUIRE + | UNIQUE + | CASE + | WHEN + | THEN + | ELSE + | END + | MANDATORY + | SCALAR + | OF + | ADD + | DROP + ; + +CONSTRAINT : ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'R' | 'r' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'T' | 't' ) ; + +DO : ( 'D' | 'd' ) ( 'O' | 'o' ) ; + +FOR : ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ; + +REQUIRE : ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'Q' | 'q' ) ( 'U' | 'u' ) ( 'I' | 'i' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ; + +UNIQUE : ( 'U' | 'u' ) ( 'N' | 'n' ) ( 'I' | 'i' ) ( 'Q' | 'q' ) ( 'U' | 'u' ) ( 'E' | 'e' ) ; + +MANDATORY : ( 'M' | 'm' ) ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ( 'A' | 'a' ) ( 'T' | 't' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'Y' | 'y' ) ; + +SCALAR : ( 'S' | 's' ) ( 'C' | 'c' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'A' | 'a' ) ( 'R' | 'r' ) ; + +OF : ( 'O' | 'o' ) ( 'F' | 'f' ) ; + +ADD : ( 'A' | 'a' ) ( 'D' | 'd' ) ( 'D' | 'd' ) ; + +DROP : ( 'D' | 'd' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'P' | 'p' ) ; + +/** + * Based on the unicode identifier and pattern syntax + * (http://www.unicode.org/reports/tr31/) + * And extended with a few characters. + */ +IdentifierStart : ID_Start + | Pc + ; + +/** + * Based on the unicode identifier and pattern syntax + * (http://www.unicode.org/reports/tr31/) + * And extended with a few characters. + */ +IdentifierPart : ID_Continue + | Sc + ; + +/** + * Any character except "`", enclosed within `backticks`. Backticks are escaped with double backticks. */ +EscapedSymbolicName : ( '`' ( EscapedSymbolicName_0 )* '`' )+ ; + +SP : ( WHITESPACE )+ ; + +WHITESPACE : SPACE + | TAB + | LF + | VT + | FF + | CR + | FS + | GS + | RS + | US + | ' ' + | '᠎' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | '
' + | '
' + | ' ' + | ' ' + | ' ' + | ' ' + | ' ' + | Comment + ; + +Comment : ( '/*' ( Comment_1 | ( '*' Comment_2 ) )* '*/' ) + | ( '//' ( Comment_3 )* CR? ( LF | EOF ) ) + ; + +oC_LeftArrowHead : '<' + | '⟨' + | '〈' + | '﹤' + | '<' + ; + +oC_RightArrowHead : '>' + | '⟩' + | '〉' + | '﹥' + | '>' + ; + +oC_Dash : '-' + | '­' + | '‐' + | '‑' + | '‒' + | '–' + | '—' + | '―' + | '−' + | '﹘' + | '﹣' + | '-' + ; + +fragment FF : [\f] ; + +fragment EscapedSymbolicName_0 : [\u0000-_a-\uFFFF] ; + +fragment RS : [\u001E] ; + +fragment ID_Continue : [0-9A-Z_a-z\u00AA\u00B5\u00B7\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376-\u0377\u037A-\u037D\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CE\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C58-\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1-\u0CF2\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2-\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18-\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772-\u1773\u1780-\u17D3\u17D7\u17DC-\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F-\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC-\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33-\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC] ; + +fragment Comment_1 : [\u0000-)+-\uFFFF] ; + +fragment StringLiteral_1 : [\u0000-&(-[\]-\uFFFF] ; + +fragment Comment_3 : [\u0000-\t\u000B-\f\u000E-\uFFFF] ; + +fragment Comment_2 : [\u0000-.0-\uFFFF] ; + +fragment GS : [\u001D] ; + +fragment FS : [\u001C] ; + +fragment CR : [\r] ; + +fragment Sc : [$\u00A2-\u00A5\u058F\u060B\u09F2-\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BA\uA838\uFDFC\uFE69\uFF04\uFFE0-\uFFE1\uFFE5-\uFFE6] ; + +fragment SPACE : [ ] ; + +fragment Pc : [_\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F] ; + +fragment TAB : [\t] ; + +fragment StringLiteral_0 : [\u0000-!#-[\]-\uFFFF] ; + +fragment LF : [\n] ; + +fragment VT : [\u000B] ; + +fragment US : [\u001F] ; + +fragment ID_Start : [A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376-\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06E5-\u06E6\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4-\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58-\u0C59\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E46\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC] ; + diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.interp b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.interp new file mode 100644 index 00000000..fec4e9cd --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.interp @@ -0,0 +1,377 @@ +token literal names: +null +';' +',' +'=' +'+=' +'*' +'(' +')' +'[' +']' +':' +'|' +'..' +'+' +'-' +'/' +'%' +'^' +'<>' +'<' +'>' +'<=' +'>=' +'.' +'{' +'}' +'$' +'⟨' +'〈' +'﹤' +'<' +'⟩' +'〉' +'﹥' +'>' +'­' +'‐' +'‑' +'‒' +'–' +'—' +'―' +'−' +'﹘' +'﹣' +'-' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'0' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +EXPLAIN +PROFILE +UNION +ALL +OPTIONAL_ +MATCH +UNWIND +AS +MERGE +ON +CREATE +SET +DETACH +DELETE_ +REMOVE +CALL +YIELD +WITH +DISTINCT +RETURN +ORDER +BY +L_SKIP +LIMIT +ASCENDING +ASC +DESCENDING +DESC +USING +JOIN +START +WHERE +OR +XOR +AND +NOT +IN +STARTS +ENDS +CONTAINS +REGEXP +IS +NULL_ +COUNT +ANY +NONE +SINGLE +TRUE_ +FALSE_ +EXISTS +CASE +ELSE +END +WHEN +THEN +StringLiteral +EscapedChar +HexInteger +DecimalInteger +OctalInteger +HexLetter +HexDigit +Digit +NonZeroDigit +NonZeroOctDigit +OctDigit +ZeroDigit +ExponentDecimalReal +RegularDecimalReal +FILTER +EXTRACT +UnescapedSymbolicName +CONSTRAINT +DO +FOR +REQUIRE +UNIQUE +MANDATORY +SCALAR +OF +ADD +DROP +IdentifierStart +IdentifierPart +EscapedSymbolicName +SP +WHITESPACE +Comment + +rule names: +oC_Cypher +oC_Statement +oC_Query +oC_RegularQuery +oC_Union +oC_SingleQuery +oC_SinglePartQuery +oC_MultiPartQuery +oC_UpdatingClause +oC_ReadingClause +oC_Match +oC_Unwind +oC_Merge +oC_MergeAction +oC_Create +oC_Set +oC_SetItem +oC_Delete +oC_Remove +oC_RemoveItem +oC_InQueryCall +oC_StandaloneCall +oC_YieldItems +oC_YieldItem +oC_With +oC_Return +oC_ReturnBody +oC_ReturnItems +oC_ReturnItem +oC_Order +oC_Skip +oC_Limit +oC_SortItem +oC_Hint +oC_Where +oC_Pattern +oC_PatternPart +oC_AnonymousPatternPart +oC_PatternElement +oC_NodePattern +oC_PatternElementChain +oC_RelationshipPattern +oC_RelationshipDetail +oC_Properties +oC_RelationshipTypes +oC_NodeLabels +oC_NodeLabel +oC_RangeLiteral +oC_LabelName +oC_RelTypeName +oC_Expression +oC_OrExpression +oC_XorExpression +oC_AndExpression +oC_NotExpression +oC_ComparisonExpression +oC_AddOrSubtractExpression +oC_MultiplyDivideModuloExpression +oC_PowerOfExpression +oC_UnaryAddOrSubtractExpression +oC_StringListNullOperatorExpression +oC_ListOperatorExpression +oC_StringOperatorExpression +oC_NullOperatorExpression +oC_PropertyOrLabelsExpression +oC_Atom +oC_Literal +oC_BooleanLiteral +oC_ListLiteral +oC_PartialComparisonExpression +oC_ParenthesizedExpression +oC_RelationshipsPattern +oC_FilterExpression +oC_IdInColl +oC_FunctionInvocation +oC_FunctionName +oC_ExplicitProcedureInvocation +oC_ImplicitProcedureInvocation +oC_ProcedureResultField +oC_ProcedureName +oC_Namespace +oC_ListComprehension +oC_PatternComprehension +oC_PropertyLookup +oC_CaseExpression +oC_CaseAlternatives +oC_Variable +oC_NumberLiteral +oC_MapLiteral +oC_Parameter +oC_PropertyExpression +oC_PropertyKeyName +oC_IntegerLiteral +oC_DoubleLiteral +oC_SchemaName +oC_SymbolicName +oC_ReservedWord +oC_LeftArrowHead +oC_RightArrowHead +oC_Dash + + +atn: +[4, 1, 133, 1594, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 1, 0, 3, 0, 202, 8, 0, 1, 0, 1, 0, 3, 0, 206, 8, 0, 1, 0, 3, 0, 209, 8, 0, 1, 0, 3, 0, 212, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 219, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 224, 8, 1, 1, 1, 3, 1, 227, 8, 1, 1, 2, 1, 2, 3, 2, 231, 8, 2, 1, 3, 1, 3, 3, 3, 235, 8, 3, 1, 3, 5, 3, 238, 8, 3, 10, 3, 12, 3, 241, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 247, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 252, 8, 4, 1, 4, 3, 4, 255, 8, 4, 1, 5, 1, 5, 3, 5, 259, 8, 5, 1, 6, 1, 6, 3, 6, 263, 8, 6, 5, 6, 265, 8, 6, 10, 6, 12, 6, 268, 9, 6, 1, 6, 1, 6, 1, 6, 3, 6, 273, 8, 6, 5, 6, 275, 8, 6, 10, 6, 12, 6, 278, 9, 6, 1, 6, 1, 6, 3, 6, 282, 8, 6, 1, 6, 5, 6, 285, 8, 6, 10, 6, 12, 6, 288, 9, 6, 1, 6, 3, 6, 291, 8, 6, 1, 6, 3, 6, 294, 8, 6, 3, 6, 296, 8, 6, 1, 7, 1, 7, 3, 7, 300, 8, 7, 5, 7, 302, 8, 7, 10, 7, 12, 7, 305, 9, 7, 1, 7, 1, 7, 3, 7, 309, 8, 7, 5, 7, 311, 8, 7, 10, 7, 12, 7, 314, 9, 7, 1, 7, 1, 7, 3, 7, 318, 8, 7, 4, 7, 320, 8, 7, 11, 7, 12, 7, 321, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 331, 8, 8, 1, 9, 1, 9, 1, 9, 3, 9, 336, 8, 9, 1, 10, 1, 10, 3, 10, 340, 8, 10, 1, 10, 1, 10, 3, 10, 344, 8, 10, 1, 10, 1, 10, 3, 10, 348, 8, 10, 1, 10, 5, 10, 351, 8, 10, 10, 10, 12, 10, 354, 9, 10, 1, 10, 3, 10, 357, 8, 10, 1, 10, 3, 10, 360, 8, 10, 1, 11, 1, 11, 3, 11, 364, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 374, 8, 12, 1, 12, 1, 12, 1, 12, 5, 12, 379, 8, 12, 10, 12, 12, 12, 382, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 394, 8, 13, 1, 14, 1, 14, 3, 14, 398, 8, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 404, 8, 15, 1, 15, 1, 15, 3, 15, 408, 8, 15, 1, 15, 1, 15, 3, 15, 412, 8, 15, 1, 15, 5, 15, 415, 8, 15, 10, 15, 12, 15, 418, 9, 15, 1, 16, 1, 16, 3, 16, 422, 8, 16, 1, 16, 1, 16, 3, 16, 426, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 432, 8, 16, 1, 16, 1, 16, 3, 16, 436, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 442, 8, 16, 1, 16, 1, 16, 3, 16, 446, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 452, 8, 16, 1, 16, 1, 16, 3, 16, 456, 8, 16, 1, 17, 1, 17, 3, 17, 460, 8, 17, 1, 17, 1, 17, 3, 17, 464, 8, 17, 1, 17, 1, 17, 3, 17, 468, 8, 17, 1, 17, 1, 17, 3, 17, 472, 8, 17, 1, 17, 5, 17, 475, 8, 17, 10, 17, 12, 17, 478, 9, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 484, 8, 18, 1, 18, 1, 18, 3, 18, 488, 8, 18, 1, 18, 5, 18, 491, 8, 18, 10, 18, 12, 18, 494, 9, 18, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 500, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 506, 8, 20, 1, 20, 1, 20, 1, 20, 3, 20, 511, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 517, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 523, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 528, 8, 22, 1, 22, 1, 22, 3, 22, 532, 8, 22, 1, 22, 5, 22, 535, 8, 22, 10, 22, 12, 22, 538, 9, 22, 3, 22, 540, 8, 22, 1, 22, 3, 22, 543, 8, 22, 1, 22, 3, 22, 546, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 553, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 3, 24, 559, 8, 24, 1, 24, 3, 24, 562, 8, 24, 1, 24, 1, 24, 1, 24, 3, 24, 567, 8, 24, 1, 24, 3, 24, 570, 8, 24, 1, 25, 1, 25, 3, 25, 574, 8, 25, 1, 25, 3, 25, 577, 8, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 3, 26, 585, 8, 26, 1, 26, 1, 26, 3, 26, 589, 8, 26, 1, 26, 1, 26, 3, 26, 593, 8, 26, 1, 27, 1, 27, 3, 27, 597, 8, 27, 1, 27, 1, 27, 3, 27, 601, 8, 27, 1, 27, 5, 27, 604, 8, 27, 10, 27, 12, 27, 607, 9, 27, 1, 27, 1, 27, 3, 27, 611, 8, 27, 1, 27, 1, 27, 3, 27, 615, 8, 27, 1, 27, 5, 27, 618, 8, 27, 10, 27, 12, 27, 621, 9, 27, 3, 27, 623, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 632, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 641, 8, 29, 1, 29, 5, 29, 644, 8, 29, 10, 29, 12, 29, 647, 9, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 3, 32, 659, 8, 32, 1, 32, 3, 32, 662, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 678, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 3, 35, 686, 8, 35, 1, 35, 1, 35, 3, 35, 690, 8, 35, 1, 35, 5, 35, 693, 8, 35, 10, 35, 12, 35, 696, 9, 35, 1, 36, 1, 36, 3, 36, 700, 8, 36, 1, 36, 1, 36, 3, 36, 704, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 709, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 3, 38, 715, 8, 38, 1, 38, 5, 38, 718, 8, 38, 10, 38, 12, 38, 721, 9, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 727, 8, 38, 1, 39, 1, 39, 3, 39, 731, 8, 39, 1, 39, 1, 39, 3, 39, 735, 8, 39, 3, 39, 737, 8, 39, 1, 39, 1, 39, 3, 39, 741, 8, 39, 3, 39, 743, 8, 39, 1, 39, 1, 39, 3, 39, 747, 8, 39, 3, 39, 749, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 3, 40, 755, 8, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 761, 8, 41, 1, 41, 1, 41, 3, 41, 765, 8, 41, 1, 41, 3, 41, 768, 8, 41, 1, 41, 3, 41, 771, 8, 41, 1, 41, 1, 41, 3, 41, 775, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 781, 8, 41, 1, 41, 1, 41, 3, 41, 785, 8, 41, 1, 41, 3, 41, 788, 8, 41, 1, 41, 3, 41, 791, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 797, 8, 41, 1, 41, 3, 41, 800, 8, 41, 1, 41, 3, 41, 803, 8, 41, 1, 41, 1, 41, 3, 41, 807, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 813, 8, 41, 1, 41, 3, 41, 816, 8, 41, 1, 41, 3, 41, 819, 8, 41, 1, 41, 1, 41, 3, 41, 823, 8, 41, 1, 42, 1, 42, 3, 42, 827, 8, 42, 1, 42, 1, 42, 3, 42, 831, 8, 42, 3, 42, 833, 8, 42, 1, 42, 1, 42, 3, 42, 837, 8, 42, 3, 42, 839, 8, 42, 1, 42, 3, 42, 842, 8, 42, 1, 42, 1, 42, 3, 42, 846, 8, 42, 3, 42, 848, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 3, 43, 854, 8, 43, 1, 44, 1, 44, 3, 44, 858, 8, 44, 1, 44, 1, 44, 3, 44, 862, 8, 44, 1, 44, 1, 44, 3, 44, 866, 8, 44, 1, 44, 3, 44, 869, 8, 44, 1, 44, 5, 44, 872, 8, 44, 10, 44, 12, 44, 875, 9, 44, 1, 45, 1, 45, 3, 45, 879, 8, 45, 1, 45, 5, 45, 882, 8, 45, 10, 45, 12, 45, 885, 9, 45, 1, 46, 1, 46, 3, 46, 889, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 895, 8, 47, 1, 47, 1, 47, 3, 47, 899, 8, 47, 3, 47, 901, 8, 47, 1, 47, 1, 47, 3, 47, 905, 8, 47, 1, 47, 1, 47, 3, 47, 909, 8, 47, 3, 47, 911, 8, 47, 3, 47, 913, 8, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 926, 8, 51, 10, 51, 12, 51, 929, 9, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 936, 8, 52, 10, 52, 12, 52, 939, 9, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 946, 8, 53, 10, 53, 12, 53, 949, 9, 53, 1, 54, 1, 54, 3, 54, 953, 8, 54, 5, 54, 955, 8, 54, 10, 54, 12, 54, 958, 9, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, 964, 8, 55, 1, 55, 5, 55, 967, 8, 55, 10, 55, 12, 55, 970, 9, 55, 1, 56, 1, 56, 3, 56, 974, 8, 56, 1, 56, 1, 56, 3, 56, 978, 8, 56, 1, 56, 1, 56, 3, 56, 982, 8, 56, 1, 56, 1, 56, 3, 56, 986, 8, 56, 1, 56, 5, 56, 989, 8, 56, 10, 56, 12, 56, 992, 9, 56, 1, 57, 1, 57, 3, 57, 996, 8, 57, 1, 57, 1, 57, 3, 57, 1000, 8, 57, 1, 57, 1, 57, 3, 57, 1004, 8, 57, 1, 57, 1, 57, 3, 57, 1008, 8, 57, 1, 57, 1, 57, 3, 57, 1012, 8, 57, 1, 57, 1, 57, 3, 57, 1016, 8, 57, 1, 57, 5, 57, 1019, 8, 57, 10, 57, 12, 57, 1022, 9, 57, 1, 58, 1, 58, 3, 58, 1026, 8, 58, 1, 58, 1, 58, 3, 58, 1030, 8, 58, 1, 58, 5, 58, 1033, 8, 58, 10, 58, 12, 58, 1036, 9, 58, 1, 59, 1, 59, 3, 59, 1040, 8, 59, 5, 59, 1042, 8, 59, 10, 59, 12, 59, 1045, 9, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 1053, 8, 60, 10, 60, 12, 60, 1056, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, 1061, 8, 61, 1, 61, 1, 61, 3, 61, 1065, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 1072, 8, 61, 1, 61, 1, 61, 3, 61, 1076, 8, 61, 1, 61, 1, 61, 3, 61, 1080, 8, 61, 1, 61, 3, 61, 1083, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1097, 8, 62, 1, 62, 3, 62, 1100, 8, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1114, 8, 63, 1, 64, 1, 64, 3, 64, 1118, 8, 64, 1, 64, 5, 64, 1121, 8, 64, 10, 64, 12, 64, 1124, 9, 64, 1, 64, 3, 64, 1127, 8, 64, 1, 64, 3, 64, 1130, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1137, 8, 65, 1, 65, 1, 65, 3, 65, 1141, 8, 65, 1, 65, 1, 65, 3, 65, 1145, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1152, 8, 65, 1, 65, 1, 65, 3, 65, 1156, 8, 65, 1, 65, 1, 65, 3, 65, 1160, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1166, 8, 65, 1, 65, 1, 65, 3, 65, 1170, 8, 65, 1, 65, 1, 65, 3, 65, 1174, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1180, 8, 65, 1, 65, 1, 65, 3, 65, 1184, 8, 65, 1, 65, 1, 65, 3, 65, 1188, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1194, 8, 65, 1, 65, 1, 65, 3, 65, 1198, 8, 65, 1, 65, 1, 65, 3, 65, 1202, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1210, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1218, 8, 66, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 1224, 8, 68, 1, 68, 1, 68, 3, 68, 1228, 8, 68, 1, 68, 1, 68, 3, 68, 1232, 8, 68, 1, 68, 1, 68, 3, 68, 1236, 8, 68, 5, 68, 1238, 8, 68, 10, 68, 12, 68, 1241, 9, 68, 3, 68, 1243, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 3, 69, 1249, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1254, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1259, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1264, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1269, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1274, 8, 69, 1, 69, 3, 69, 1277, 8, 69, 1, 70, 1, 70, 3, 70, 1281, 8, 70, 1, 70, 1, 70, 3, 70, 1285, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 3, 71, 1291, 8, 71, 1, 71, 4, 71, 1294, 8, 71, 11, 71, 12, 71, 1295, 1, 72, 1, 72, 3, 72, 1300, 8, 72, 1, 72, 3, 72, 1303, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 3, 74, 1313, 8, 74, 1, 74, 1, 74, 3, 74, 1317, 8, 74, 1, 74, 1, 74, 3, 74, 1321, 8, 74, 3, 74, 1323, 8, 74, 1, 74, 1, 74, 3, 74, 1327, 8, 74, 1, 74, 1, 74, 3, 74, 1331, 8, 74, 1, 74, 1, 74, 3, 74, 1335, 8, 74, 5, 74, 1337, 8, 74, 10, 74, 12, 74, 1340, 9, 74, 3, 74, 1342, 8, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1350, 8, 75, 1, 76, 1, 76, 3, 76, 1354, 8, 76, 1, 76, 1, 76, 3, 76, 1358, 8, 76, 1, 76, 1, 76, 3, 76, 1362, 8, 76, 1, 76, 1, 76, 3, 76, 1366, 8, 76, 1, 76, 1, 76, 3, 76, 1370, 8, 76, 5, 76, 1372, 8, 76, 10, 76, 12, 76, 1375, 9, 76, 3, 76, 1377, 8, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 5, 80, 1391, 8, 80, 10, 80, 12, 80, 1394, 9, 80, 1, 81, 1, 81, 3, 81, 1398, 8, 81, 1, 81, 1, 81, 3, 81, 1402, 8, 81, 1, 81, 1, 81, 3, 81, 1406, 8, 81, 1, 81, 3, 81, 1409, 8, 81, 1, 81, 3, 81, 1412, 8, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 1418, 8, 82, 1, 82, 1, 82, 3, 82, 1422, 8, 82, 1, 82, 1, 82, 3, 82, 1426, 8, 82, 3, 82, 1428, 8, 82, 1, 82, 1, 82, 3, 82, 1432, 8, 82, 1, 82, 1, 82, 3, 82, 1436, 8, 82, 1, 82, 1, 82, 3, 82, 1440, 8, 82, 3, 82, 1442, 8, 82, 1, 82, 1, 82, 3, 82, 1446, 8, 82, 1, 82, 1, 82, 3, 82, 1450, 8, 82, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 1456, 8, 83, 1, 83, 1, 83, 1, 84, 1, 84, 3, 84, 1462, 8, 84, 1, 84, 4, 84, 1465, 8, 84, 11, 84, 12, 84, 1466, 1, 84, 1, 84, 3, 84, 1471, 8, 84, 1, 84, 1, 84, 3, 84, 1475, 8, 84, 1, 84, 4, 84, 1478, 8, 84, 11, 84, 12, 84, 1479, 3, 84, 1482, 8, 84, 1, 84, 3, 84, 1485, 8, 84, 1, 84, 1, 84, 3, 84, 1489, 8, 84, 1, 84, 3, 84, 1492, 8, 84, 1, 84, 3, 84, 1495, 8, 84, 1, 84, 1, 84, 1, 85, 1, 85, 3, 85, 1501, 8, 85, 1, 85, 1, 85, 3, 85, 1505, 8, 85, 1, 85, 1, 85, 3, 85, 1509, 8, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 3, 87, 1517, 8, 87, 1, 88, 1, 88, 3, 88, 1521, 8, 88, 1, 88, 1, 88, 3, 88, 1525, 8, 88, 1, 88, 1, 88, 3, 88, 1529, 8, 88, 1, 88, 1, 88, 3, 88, 1533, 8, 88, 1, 88, 1, 88, 3, 88, 1537, 8, 88, 1, 88, 1, 88, 3, 88, 1541, 8, 88, 1, 88, 1, 88, 3, 88, 1545, 8, 88, 1, 88, 1, 88, 3, 88, 1549, 8, 88, 5, 88, 1551, 8, 88, 10, 88, 12, 88, 1554, 9, 88, 3, 88, 1556, 8, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 3, 89, 1563, 8, 89, 1, 90, 1, 90, 3, 90, 1567, 8, 90, 1, 90, 4, 90, 1570, 8, 90, 11, 90, 12, 90, 1571, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 3, 94, 1582, 8, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 0, 0, 100, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 0, 10, 1, 0, 70, 73, 1, 0, 13, 14, 1, 0, 93, 94, 1, 0, 103, 105, 1, 0, 113, 114, 4, 0, 89, 92, 106, 106, 115, 117, 130, 130, 6, 0, 48, 60, 63, 73, 77, 85, 87, 88, 93, 100, 118, 127, 2, 0, 19, 19, 27, 30, 2, 0, 20, 20, 31, 34, 2, 0, 14, 14, 35, 45, 1820, 0, 201, 1, 0, 0, 0, 2, 226, 1, 0, 0, 0, 4, 230, 1, 0, 0, 0, 6, 232, 1, 0, 0, 0, 8, 254, 1, 0, 0, 0, 10, 258, 1, 0, 0, 0, 12, 295, 1, 0, 0, 0, 14, 319, 1, 0, 0, 0, 16, 330, 1, 0, 0, 0, 18, 335, 1, 0, 0, 0, 20, 339, 1, 0, 0, 0, 22, 361, 1, 0, 0, 0, 24, 371, 1, 0, 0, 0, 26, 393, 1, 0, 0, 0, 28, 395, 1, 0, 0, 0, 30, 401, 1, 0, 0, 0, 32, 455, 1, 0, 0, 0, 34, 459, 1, 0, 0, 0, 36, 479, 1, 0, 0, 0, 38, 499, 1, 0, 0, 0, 40, 501, 1, 0, 0, 0, 42, 512, 1, 0, 0, 0, 44, 539, 1, 0, 0, 0, 46, 552, 1, 0, 0, 0, 48, 556, 1, 0, 0, 0, 50, 571, 1, 0, 0, 0, 52, 581, 1, 0, 0, 0, 54, 622, 1, 0, 0, 0, 56, 631, 1, 0, 0, 0, 58, 633, 1, 0, 0, 0, 60, 648, 1, 0, 0, 0, 62, 652, 1, 0, 0, 0, 64, 656, 1, 0, 0, 0, 66, 677, 1, 0, 0, 0, 68, 679, 1, 0, 0, 0, 70, 683, 1, 0, 0, 0, 72, 708, 1, 0, 0, 0, 74, 710, 1, 0, 0, 0, 76, 726, 1, 0, 0, 0, 78, 728, 1, 0, 0, 0, 80, 752, 1, 0, 0, 0, 82, 822, 1, 0, 0, 0, 84, 824, 1, 0, 0, 0, 86, 853, 1, 0, 0, 0, 88, 855, 1, 0, 0, 0, 90, 876, 1, 0, 0, 0, 92, 886, 1, 0, 0, 0, 94, 892, 1, 0, 0, 0, 96, 914, 1, 0, 0, 0, 98, 916, 1, 0, 0, 0, 100, 918, 1, 0, 0, 0, 102, 920, 1, 0, 0, 0, 104, 930, 1, 0, 0, 0, 106, 940, 1, 0, 0, 0, 108, 956, 1, 0, 0, 0, 110, 961, 1, 0, 0, 0, 112, 971, 1, 0, 0, 0, 114, 993, 1, 0, 0, 0, 116, 1023, 1, 0, 0, 0, 118, 1043, 1, 0, 0, 0, 120, 1048, 1, 0, 0, 0, 122, 1082, 1, 0, 0, 0, 124, 1096, 1, 0, 0, 0, 126, 1113, 1, 0, 0, 0, 128, 1115, 1, 0, 0, 0, 130, 1209, 1, 0, 0, 0, 132, 1217, 1, 0, 0, 0, 134, 1219, 1, 0, 0, 0, 136, 1221, 1, 0, 0, 0, 138, 1276, 1, 0, 0, 0, 140, 1278, 1, 0, 0, 0, 142, 1288, 1, 0, 0, 0, 144, 1297, 1, 0, 0, 0, 146, 1304, 1, 0, 0, 0, 148, 1310, 1, 0, 0, 0, 150, 1349, 1, 0, 0, 0, 152, 1351, 1, 0, 0, 0, 154, 1380, 1, 0, 0, 0, 156, 1382, 1, 0, 0, 0, 158, 1384, 1, 0, 0, 0, 160, 1392, 1, 0, 0, 0, 162, 1395, 1, 0, 0, 0, 164, 1415, 1, 0, 0, 0, 166, 1453, 1, 0, 0, 0, 168, 1481, 1, 0, 0, 0, 170, 1498, 1, 0, 0, 0, 172, 1512, 1, 0, 0, 0, 174, 1516, 1, 0, 0, 0, 176, 1518, 1, 0, 0, 0, 178, 1559, 1, 0, 0, 0, 180, 1564, 1, 0, 0, 0, 182, 1573, 1, 0, 0, 0, 184, 1575, 1, 0, 0, 0, 186, 1577, 1, 0, 0, 0, 188, 1581, 1, 0, 0, 0, 190, 1583, 1, 0, 0, 0, 192, 1585, 1, 0, 0, 0, 194, 1587, 1, 0, 0, 0, 196, 1589, 1, 0, 0, 0, 198, 1591, 1, 0, 0, 0, 200, 202, 5, 131, 0, 0, 201, 200, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 208, 3, 2, 1, 0, 204, 206, 5, 131, 0, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 209, 5, 1, 0, 0, 208, 205, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 211, 1, 0, 0, 0, 210, 212, 5, 131, 0, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 5, 0, 0, 1, 214, 1, 1, 0, 0, 0, 215, 227, 3, 4, 2, 0, 216, 218, 5, 46, 0, 0, 217, 219, 5, 131, 0, 0, 218, 217, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 227, 3, 4, 2, 0, 221, 223, 5, 47, 0, 0, 222, 224, 5, 131, 0, 0, 223, 222, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 227, 3, 4, 2, 0, 226, 215, 1, 0, 0, 0, 226, 216, 1, 0, 0, 0, 226, 221, 1, 0, 0, 0, 227, 3, 1, 0, 0, 0, 228, 231, 3, 6, 3, 0, 229, 231, 3, 42, 21, 0, 230, 228, 1, 0, 0, 0, 230, 229, 1, 0, 0, 0, 231, 5, 1, 0, 0, 0, 232, 239, 3, 10, 5, 0, 233, 235, 5, 131, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 238, 3, 8, 4, 0, 237, 234, 1, 0, 0, 0, 238, 241, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 7, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 242, 243, 5, 48, 0, 0, 243, 244, 5, 131, 0, 0, 244, 246, 5, 49, 0, 0, 245, 247, 5, 131, 0, 0, 246, 245, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 255, 3, 10, 5, 0, 249, 251, 5, 48, 0, 0, 250, 252, 5, 131, 0, 0, 251, 250, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 255, 3, 10, 5, 0, 254, 242, 1, 0, 0, 0, 254, 249, 1, 0, 0, 0, 255, 9, 1, 0, 0, 0, 256, 259, 3, 12, 6, 0, 257, 259, 3, 14, 7, 0, 258, 256, 1, 0, 0, 0, 258, 257, 1, 0, 0, 0, 259, 11, 1, 0, 0, 0, 260, 262, 3, 18, 9, 0, 261, 263, 5, 131, 0, 0, 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 265, 1, 0, 0, 0, 264, 260, 1, 0, 0, 0, 265, 268, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 269, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 296, 3, 50, 25, 0, 270, 272, 3, 18, 9, 0, 271, 273, 5, 131, 0, 0, 272, 271, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, 1, 0, 0, 0, 274, 270, 1, 0, 0, 0, 275, 278, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 1, 0, 0, 0, 278, 276, 1, 0, 0, 0, 279, 286, 3, 16, 8, 0, 280, 282, 5, 131, 0, 0, 281, 280, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 285, 3, 16, 8, 0, 284, 281, 1, 0, 0, 0, 285, 288, 1, 0, 0, 0, 286, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 293, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 289, 291, 5, 131, 0, 0, 290, 289, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 294, 3, 50, 25, 0, 293, 290, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 296, 1, 0, 0, 0, 295, 266, 1, 0, 0, 0, 295, 276, 1, 0, 0, 0, 296, 13, 1, 0, 0, 0, 297, 299, 3, 18, 9, 0, 298, 300, 5, 131, 0, 0, 299, 298, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 1, 0, 0, 0, 301, 297, 1, 0, 0, 0, 302, 305, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 312, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 306, 308, 3, 16, 8, 0, 307, 309, 5, 131, 0, 0, 308, 307, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, 0, 310, 306, 1, 0, 0, 0, 311, 314, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 315, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 315, 317, 3, 48, 24, 0, 316, 318, 5, 131, 0, 0, 317, 316, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 320, 1, 0, 0, 0, 319, 303, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 3, 12, 6, 0, 324, 15, 1, 0, 0, 0, 325, 331, 3, 28, 14, 0, 326, 331, 3, 24, 12, 0, 327, 331, 3, 34, 17, 0, 328, 331, 3, 30, 15, 0, 329, 331, 3, 36, 18, 0, 330, 325, 1, 0, 0, 0, 330, 326, 1, 0, 0, 0, 330, 327, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 329, 1, 0, 0, 0, 331, 17, 1, 0, 0, 0, 332, 336, 3, 20, 10, 0, 333, 336, 3, 22, 11, 0, 334, 336, 3, 40, 20, 0, 335, 332, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 335, 334, 1, 0, 0, 0, 336, 19, 1, 0, 0, 0, 337, 338, 5, 50, 0, 0, 338, 340, 5, 131, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 343, 5, 51, 0, 0, 342, 344, 5, 131, 0, 0, 343, 342, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 352, 3, 70, 35, 0, 346, 348, 5, 131, 0, 0, 347, 346, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 351, 3, 66, 33, 0, 350, 347, 1, 0, 0, 0, 351, 354, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 359, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 357, 5, 131, 0, 0, 356, 355, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 360, 3, 68, 34, 0, 359, 356, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 21, 1, 0, 0, 0, 361, 363, 5, 52, 0, 0, 362, 364, 5, 131, 0, 0, 363, 362, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 366, 3, 100, 50, 0, 366, 367, 5, 131, 0, 0, 367, 368, 5, 53, 0, 0, 368, 369, 5, 131, 0, 0, 369, 370, 3, 172, 86, 0, 370, 23, 1, 0, 0, 0, 371, 373, 5, 54, 0, 0, 372, 374, 5, 131, 0, 0, 373, 372, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 380, 3, 72, 36, 0, 376, 377, 5, 131, 0, 0, 377, 379, 3, 26, 13, 0, 378, 376, 1, 0, 0, 0, 379, 382, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 25, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 383, 384, 5, 55, 0, 0, 384, 385, 5, 131, 0, 0, 385, 386, 5, 51, 0, 0, 386, 387, 5, 131, 0, 0, 387, 394, 3, 30, 15, 0, 388, 389, 5, 55, 0, 0, 389, 390, 5, 131, 0, 0, 390, 391, 5, 56, 0, 0, 391, 392, 5, 131, 0, 0, 392, 394, 3, 30, 15, 0, 393, 383, 1, 0, 0, 0, 393, 388, 1, 0, 0, 0, 394, 27, 1, 0, 0, 0, 395, 397, 5, 56, 0, 0, 396, 398, 5, 131, 0, 0, 397, 396, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 400, 3, 70, 35, 0, 400, 29, 1, 0, 0, 0, 401, 403, 5, 57, 0, 0, 402, 404, 5, 131, 0, 0, 403, 402, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 416, 3, 32, 16, 0, 406, 408, 5, 131, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 411, 5, 2, 0, 0, 410, 412, 5, 131, 0, 0, 411, 410, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 415, 3, 32, 16, 0, 414, 407, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 31, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 421, 3, 180, 90, 0, 420, 422, 5, 131, 0, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 425, 5, 3, 0, 0, 424, 426, 5, 131, 0, 0, 425, 424, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 428, 3, 100, 50, 0, 428, 456, 1, 0, 0, 0, 429, 431, 3, 172, 86, 0, 430, 432, 5, 131, 0, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 5, 3, 0, 0, 434, 436, 5, 131, 0, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 3, 100, 50, 0, 438, 456, 1, 0, 0, 0, 439, 441, 3, 172, 86, 0, 440, 442, 5, 131, 0, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 445, 5, 4, 0, 0, 444, 446, 5, 131, 0, 0, 445, 444, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 3, 100, 50, 0, 448, 456, 1, 0, 0, 0, 449, 451, 3, 172, 86, 0, 450, 452, 5, 131, 0, 0, 451, 450, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 454, 3, 90, 45, 0, 454, 456, 1, 0, 0, 0, 455, 419, 1, 0, 0, 0, 455, 429, 1, 0, 0, 0, 455, 439, 1, 0, 0, 0, 455, 449, 1, 0, 0, 0, 456, 33, 1, 0, 0, 0, 457, 458, 5, 58, 0, 0, 458, 460, 5, 131, 0, 0, 459, 457, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 463, 5, 59, 0, 0, 462, 464, 5, 131, 0, 0, 463, 462, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 476, 3, 100, 50, 0, 466, 468, 5, 131, 0, 0, 467, 466, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 471, 5, 2, 0, 0, 470, 472, 5, 131, 0, 0, 471, 470, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 475, 3, 100, 50, 0, 474, 467, 1, 0, 0, 0, 475, 478, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 35, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 479, 480, 5, 60, 0, 0, 480, 481, 5, 131, 0, 0, 481, 492, 3, 38, 19, 0, 482, 484, 5, 131, 0, 0, 483, 482, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 487, 5, 2, 0, 0, 486, 488, 5, 131, 0, 0, 487, 486, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 491, 3, 38, 19, 0, 490, 483, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 37, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 3, 172, 86, 0, 496, 497, 3, 90, 45, 0, 497, 500, 1, 0, 0, 0, 498, 500, 3, 180, 90, 0, 499, 495, 1, 0, 0, 0, 499, 498, 1, 0, 0, 0, 500, 39, 1, 0, 0, 0, 501, 502, 5, 61, 0, 0, 502, 503, 5, 131, 0, 0, 503, 510, 3, 152, 76, 0, 504, 506, 5, 131, 0, 0, 505, 504, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 5, 62, 0, 0, 508, 509, 5, 131, 0, 0, 509, 511, 3, 44, 22, 0, 510, 505, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 41, 1, 0, 0, 0, 512, 513, 5, 61, 0, 0, 513, 516, 5, 131, 0, 0, 514, 517, 3, 152, 76, 0, 515, 517, 3, 154, 77, 0, 516, 514, 1, 0, 0, 0, 516, 515, 1, 0, 0, 0, 517, 522, 1, 0, 0, 0, 518, 519, 5, 131, 0, 0, 519, 520, 5, 62, 0, 0, 520, 521, 5, 131, 0, 0, 521, 523, 3, 44, 22, 0, 522, 518, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 43, 1, 0, 0, 0, 524, 540, 5, 5, 0, 0, 525, 536, 3, 46, 23, 0, 526, 528, 5, 131, 0, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 531, 5, 2, 0, 0, 530, 532, 5, 131, 0, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 3, 46, 23, 0, 534, 527, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 540, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 524, 1, 0, 0, 0, 539, 525, 1, 0, 0, 0, 540, 545, 1, 0, 0, 0, 541, 543, 5, 131, 0, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 546, 3, 68, 34, 0, 545, 542, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 45, 1, 0, 0, 0, 547, 548, 3, 156, 78, 0, 548, 549, 5, 131, 0, 0, 549, 550, 5, 53, 0, 0, 550, 551, 5, 131, 0, 0, 551, 553, 1, 0, 0, 0, 552, 547, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 555, 3, 172, 86, 0, 555, 47, 1, 0, 0, 0, 556, 561, 5, 63, 0, 0, 557, 559, 5, 131, 0, 0, 558, 557, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 562, 5, 64, 0, 0, 561, 558, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 564, 5, 131, 0, 0, 564, 569, 3, 52, 26, 0, 565, 567, 5, 131, 0, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 570, 3, 68, 34, 0, 569, 566, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 49, 1, 0, 0, 0, 571, 576, 5, 65, 0, 0, 572, 574, 5, 131, 0, 0, 573, 572, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 577, 5, 64, 0, 0, 576, 573, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 5, 131, 0, 0, 579, 580, 3, 52, 26, 0, 580, 51, 1, 0, 0, 0, 581, 584, 3, 54, 27, 0, 582, 583, 5, 131, 0, 0, 583, 585, 3, 58, 29, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 587, 5, 131, 0, 0, 587, 589, 3, 60, 30, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 592, 1, 0, 0, 0, 590, 591, 5, 131, 0, 0, 591, 593, 3, 62, 31, 0, 592, 590, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 53, 1, 0, 0, 0, 594, 605, 5, 5, 0, 0, 595, 597, 5, 131, 0, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 5, 2, 0, 0, 599, 601, 5, 131, 0, 0, 600, 599, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 3, 56, 28, 0, 603, 596, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 623, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 619, 3, 56, 28, 0, 609, 611, 5, 131, 0, 0, 610, 609, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 614, 5, 2, 0, 0, 613, 615, 5, 131, 0, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 618, 3, 56, 28, 0, 617, 610, 1, 0, 0, 0, 618, 621, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 623, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 622, 594, 1, 0, 0, 0, 622, 608, 1, 0, 0, 0, 623, 55, 1, 0, 0, 0, 624, 625, 3, 100, 50, 0, 625, 626, 5, 131, 0, 0, 626, 627, 5, 53, 0, 0, 627, 628, 5, 131, 0, 0, 628, 629, 3, 172, 86, 0, 629, 632, 1, 0, 0, 0, 630, 632, 3, 100, 50, 0, 631, 624, 1, 0, 0, 0, 631, 630, 1, 0, 0, 0, 632, 57, 1, 0, 0, 0, 633, 634, 5, 66, 0, 0, 634, 635, 5, 131, 0, 0, 635, 636, 5, 67, 0, 0, 636, 637, 5, 131, 0, 0, 637, 645, 3, 64, 32, 0, 638, 640, 5, 2, 0, 0, 639, 641, 5, 131, 0, 0, 640, 639, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 644, 3, 64, 32, 0, 643, 638, 1, 0, 0, 0, 644, 647, 1, 0, 0, 0, 645, 643, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 59, 1, 0, 0, 0, 647, 645, 1, 0, 0, 0, 648, 649, 5, 68, 0, 0, 649, 650, 5, 131, 0, 0, 650, 651, 3, 100, 50, 0, 651, 61, 1, 0, 0, 0, 652, 653, 5, 69, 0, 0, 653, 654, 5, 131, 0, 0, 654, 655, 3, 100, 50, 0, 655, 63, 1, 0, 0, 0, 656, 661, 3, 100, 50, 0, 657, 659, 5, 131, 0, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 662, 7, 0, 0, 0, 661, 658, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, 65, 1, 0, 0, 0, 663, 664, 5, 74, 0, 0, 664, 665, 5, 131, 0, 0, 665, 666, 5, 75, 0, 0, 666, 667, 5, 131, 0, 0, 667, 668, 5, 55, 0, 0, 668, 669, 5, 131, 0, 0, 669, 678, 3, 172, 86, 0, 670, 671, 5, 74, 0, 0, 671, 672, 5, 131, 0, 0, 672, 673, 5, 76, 0, 0, 673, 674, 5, 131, 0, 0, 674, 675, 5, 55, 0, 0, 675, 676, 5, 131, 0, 0, 676, 678, 3, 172, 86, 0, 677, 663, 1, 0, 0, 0, 677, 670, 1, 0, 0, 0, 678, 67, 1, 0, 0, 0, 679, 680, 5, 77, 0, 0, 680, 681, 5, 131, 0, 0, 681, 682, 3, 100, 50, 0, 682, 69, 1, 0, 0, 0, 683, 694, 3, 72, 36, 0, 684, 686, 5, 131, 0, 0, 685, 684, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 5, 2, 0, 0, 688, 690, 5, 131, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 693, 3, 72, 36, 0, 692, 685, 1, 0, 0, 0, 693, 696, 1, 0, 0, 0, 694, 692, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 71, 1, 0, 0, 0, 696, 694, 1, 0, 0, 0, 697, 699, 3, 172, 86, 0, 698, 700, 5, 131, 0, 0, 699, 698, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 703, 5, 3, 0, 0, 702, 704, 5, 131, 0, 0, 703, 702, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 706, 3, 74, 37, 0, 706, 709, 1, 0, 0, 0, 707, 709, 3, 74, 37, 0, 708, 697, 1, 0, 0, 0, 708, 707, 1, 0, 0, 0, 709, 73, 1, 0, 0, 0, 710, 711, 3, 76, 38, 0, 711, 75, 1, 0, 0, 0, 712, 719, 3, 78, 39, 0, 713, 715, 5, 131, 0, 0, 714, 713, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 718, 3, 80, 40, 0, 717, 714, 1, 0, 0, 0, 718, 721, 1, 0, 0, 0, 719, 717, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 727, 1, 0, 0, 0, 721, 719, 1, 0, 0, 0, 722, 723, 5, 6, 0, 0, 723, 724, 3, 76, 38, 0, 724, 725, 5, 7, 0, 0, 725, 727, 1, 0, 0, 0, 726, 712, 1, 0, 0, 0, 726, 722, 1, 0, 0, 0, 727, 77, 1, 0, 0, 0, 728, 730, 5, 6, 0, 0, 729, 731, 5, 131, 0, 0, 730, 729, 1, 0, 0, 0, 730, 731, 1, 0, 0, 0, 731, 736, 1, 0, 0, 0, 732, 734, 3, 172, 86, 0, 733, 735, 5, 131, 0, 0, 734, 733, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 737, 1, 0, 0, 0, 736, 732, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 742, 1, 0, 0, 0, 738, 740, 3, 90, 45, 0, 739, 741, 5, 131, 0, 0, 740, 739, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 743, 1, 0, 0, 0, 742, 738, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 748, 1, 0, 0, 0, 744, 746, 3, 86, 43, 0, 745, 747, 5, 131, 0, 0, 746, 745, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 749, 1, 0, 0, 0, 748, 744, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 1, 0, 0, 0, 750, 751, 5, 7, 0, 0, 751, 79, 1, 0, 0, 0, 752, 754, 3, 82, 41, 0, 753, 755, 5, 131, 0, 0, 754, 753, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 3, 78, 39, 0, 757, 81, 1, 0, 0, 0, 758, 760, 3, 194, 97, 0, 759, 761, 5, 131, 0, 0, 760, 759, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 762, 1, 0, 0, 0, 762, 764, 3, 198, 99, 0, 763, 765, 5, 131, 0, 0, 764, 763, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 767, 1, 0, 0, 0, 766, 768, 3, 84, 42, 0, 767, 766, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 770, 1, 0, 0, 0, 769, 771, 5, 131, 0, 0, 770, 769, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 774, 3, 198, 99, 0, 773, 775, 5, 131, 0, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 3, 196, 98, 0, 777, 823, 1, 0, 0, 0, 778, 780, 3, 194, 97, 0, 779, 781, 5, 131, 0, 0, 780, 779, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 784, 3, 198, 99, 0, 783, 785, 5, 131, 0, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 787, 1, 0, 0, 0, 786, 788, 3, 84, 42, 0, 787, 786, 1, 0, 0, 0, 787, 788, 1, 0, 0, 0, 788, 790, 1, 0, 0, 0, 789, 791, 5, 131, 0, 0, 790, 789, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 793, 3, 198, 99, 0, 793, 823, 1, 0, 0, 0, 794, 796, 3, 198, 99, 0, 795, 797, 5, 131, 0, 0, 796, 795, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 799, 1, 0, 0, 0, 798, 800, 3, 84, 42, 0, 799, 798, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 802, 1, 0, 0, 0, 801, 803, 5, 131, 0, 0, 802, 801, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 806, 3, 198, 99, 0, 805, 807, 5, 131, 0, 0, 806, 805, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 809, 3, 196, 98, 0, 809, 823, 1, 0, 0, 0, 810, 812, 3, 198, 99, 0, 811, 813, 5, 131, 0, 0, 812, 811, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 815, 1, 0, 0, 0, 814, 816, 3, 84, 42, 0, 815, 814, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 818, 1, 0, 0, 0, 817, 819, 5, 131, 0, 0, 818, 817, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 821, 3, 198, 99, 0, 821, 823, 1, 0, 0, 0, 822, 758, 1, 0, 0, 0, 822, 778, 1, 0, 0, 0, 822, 794, 1, 0, 0, 0, 822, 810, 1, 0, 0, 0, 823, 83, 1, 0, 0, 0, 824, 826, 5, 8, 0, 0, 825, 827, 5, 131, 0, 0, 826, 825, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 832, 1, 0, 0, 0, 828, 830, 3, 172, 86, 0, 829, 831, 5, 131, 0, 0, 830, 829, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 833, 1, 0, 0, 0, 832, 828, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 838, 1, 0, 0, 0, 834, 836, 3, 88, 44, 0, 835, 837, 5, 131, 0, 0, 836, 835, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 839, 1, 0, 0, 0, 838, 834, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 841, 1, 0, 0, 0, 840, 842, 3, 94, 47, 0, 841, 840, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 847, 1, 0, 0, 0, 843, 845, 3, 86, 43, 0, 844, 846, 5, 131, 0, 0, 845, 844, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 843, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 850, 5, 9, 0, 0, 850, 85, 1, 0, 0, 0, 851, 854, 3, 176, 88, 0, 852, 854, 3, 178, 89, 0, 853, 851, 1, 0, 0, 0, 853, 852, 1, 0, 0, 0, 854, 87, 1, 0, 0, 0, 855, 857, 5, 10, 0, 0, 856, 858, 5, 131, 0, 0, 857, 856, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 873, 3, 98, 49, 0, 860, 862, 5, 131, 0, 0, 861, 860, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 865, 5, 11, 0, 0, 864, 866, 5, 10, 0, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 868, 1, 0, 0, 0, 867, 869, 5, 131, 0, 0, 868, 867, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 872, 3, 98, 49, 0, 871, 861, 1, 0, 0, 0, 872, 875, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 89, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 876, 883, 3, 92, 46, 0, 877, 879, 5, 131, 0, 0, 878, 877, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 882, 3, 92, 46, 0, 881, 878, 1, 0, 0, 0, 882, 885, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 91, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 886, 888, 5, 10, 0, 0, 887, 889, 5, 131, 0, 0, 888, 887, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 891, 3, 96, 48, 0, 891, 93, 1, 0, 0, 0, 892, 894, 5, 5, 0, 0, 893, 895, 5, 131, 0, 0, 894, 893, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 900, 1, 0, 0, 0, 896, 898, 3, 184, 92, 0, 897, 899, 5, 131, 0, 0, 898, 897, 1, 0, 0, 0, 898, 899, 1, 0, 0, 0, 899, 901, 1, 0, 0, 0, 900, 896, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 912, 1, 0, 0, 0, 902, 904, 5, 12, 0, 0, 903, 905, 5, 131, 0, 0, 904, 903, 1, 0, 0, 0, 904, 905, 1, 0, 0, 0, 905, 910, 1, 0, 0, 0, 906, 908, 3, 184, 92, 0, 907, 909, 5, 131, 0, 0, 908, 907, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 911, 1, 0, 0, 0, 910, 906, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 913, 1, 0, 0, 0, 912, 902, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 95, 1, 0, 0, 0, 914, 915, 3, 188, 94, 0, 915, 97, 1, 0, 0, 0, 916, 917, 3, 188, 94, 0, 917, 99, 1, 0, 0, 0, 918, 919, 3, 102, 51, 0, 919, 101, 1, 0, 0, 0, 920, 927, 3, 104, 52, 0, 921, 922, 5, 131, 0, 0, 922, 923, 5, 78, 0, 0, 923, 924, 5, 131, 0, 0, 924, 926, 3, 104, 52, 0, 925, 921, 1, 0, 0, 0, 926, 929, 1, 0, 0, 0, 927, 925, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 103, 1, 0, 0, 0, 929, 927, 1, 0, 0, 0, 930, 937, 3, 106, 53, 0, 931, 932, 5, 131, 0, 0, 932, 933, 5, 79, 0, 0, 933, 934, 5, 131, 0, 0, 934, 936, 3, 106, 53, 0, 935, 931, 1, 0, 0, 0, 936, 939, 1, 0, 0, 0, 937, 935, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 105, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 940, 947, 3, 108, 54, 0, 941, 942, 5, 131, 0, 0, 942, 943, 5, 80, 0, 0, 943, 944, 5, 131, 0, 0, 944, 946, 3, 108, 54, 0, 945, 941, 1, 0, 0, 0, 946, 949, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 107, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 950, 952, 5, 81, 0, 0, 951, 953, 5, 131, 0, 0, 952, 951, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 955, 1, 0, 0, 0, 954, 950, 1, 0, 0, 0, 955, 958, 1, 0, 0, 0, 956, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 959, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 959, 960, 3, 110, 55, 0, 960, 109, 1, 0, 0, 0, 961, 968, 3, 112, 56, 0, 962, 964, 5, 131, 0, 0, 963, 962, 1, 0, 0, 0, 963, 964, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 967, 3, 138, 69, 0, 966, 963, 1, 0, 0, 0, 967, 970, 1, 0, 0, 0, 968, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 111, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 971, 990, 3, 114, 57, 0, 972, 974, 5, 131, 0, 0, 973, 972, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 977, 5, 13, 0, 0, 976, 978, 5, 131, 0, 0, 977, 976, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 989, 3, 114, 57, 0, 980, 982, 5, 131, 0, 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, 985, 5, 14, 0, 0, 984, 986, 5, 131, 0, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 989, 3, 114, 57, 0, 988, 973, 1, 0, 0, 0, 988, 981, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 113, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 993, 1020, 3, 116, 58, 0, 994, 996, 5, 131, 0, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 999, 5, 5, 0, 0, 998, 1000, 5, 131, 0, 0, 999, 998, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1019, 3, 116, 58, 0, 1002, 1004, 5, 131, 0, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1007, 5, 15, 0, 0, 1006, 1008, 5, 131, 0, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1019, 3, 116, 58, 0, 1010, 1012, 5, 131, 0, 0, 1011, 1010, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1015, 5, 16, 0, 0, 1014, 1016, 5, 131, 0, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1019, 3, 116, 58, 0, 1018, 995, 1, 0, 0, 0, 1018, 1003, 1, 0, 0, 0, 1018, 1011, 1, 0, 0, 0, 1019, 1022, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 115, 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1023, 1034, 3, 118, 59, 0, 1024, 1026, 5, 131, 0, 0, 1025, 1024, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1029, 5, 17, 0, 0, 1028, 1030, 5, 131, 0, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1033, 3, 118, 59, 0, 1032, 1025, 1, 0, 0, 0, 1033, 1036, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 117, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1037, 1039, 7, 1, 0, 0, 1038, 1040, 5, 131, 0, 0, 1039, 1038, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 1042, 1, 0, 0, 0, 1041, 1037, 1, 0, 0, 0, 1042, 1045, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1043, 1, 0, 0, 0, 1046, 1047, 3, 120, 60, 0, 1047, 119, 1, 0, 0, 0, 1048, 1054, 3, 128, 64, 0, 1049, 1053, 3, 124, 62, 0, 1050, 1053, 3, 122, 61, 0, 1051, 1053, 3, 126, 63, 0, 1052, 1049, 1, 0, 0, 0, 1052, 1050, 1, 0, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 1056, 1, 0, 0, 0, 1054, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 121, 1, 0, 0, 0, 1056, 1054, 1, 0, 0, 0, 1057, 1058, 5, 131, 0, 0, 1058, 1060, 5, 82, 0, 0, 1059, 1061, 5, 131, 0, 0, 1060, 1059, 1, 0, 0, 0, 1060, 1061, 1, 0, 0, 0, 1061, 1062, 1, 0, 0, 0, 1062, 1083, 3, 128, 64, 0, 1063, 1065, 5, 131, 0, 0, 1064, 1063, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1067, 5, 8, 0, 0, 1067, 1068, 3, 100, 50, 0, 1068, 1069, 5, 9, 0, 0, 1069, 1083, 1, 0, 0, 0, 1070, 1072, 5, 131, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1075, 5, 8, 0, 0, 1074, 1076, 3, 100, 50, 0, 1075, 1074, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1079, 5, 12, 0, 0, 1078, 1080, 3, 100, 50, 0, 1079, 1078, 1, 0, 0, 0, 1079, 1080, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1083, 5, 9, 0, 0, 1082, 1057, 1, 0, 0, 0, 1082, 1064, 1, 0, 0, 0, 1082, 1071, 1, 0, 0, 0, 1083, 123, 1, 0, 0, 0, 1084, 1085, 5, 131, 0, 0, 1085, 1086, 5, 83, 0, 0, 1086, 1087, 5, 131, 0, 0, 1087, 1097, 5, 63, 0, 0, 1088, 1089, 5, 131, 0, 0, 1089, 1090, 5, 84, 0, 0, 1090, 1091, 5, 131, 0, 0, 1091, 1097, 5, 63, 0, 0, 1092, 1093, 5, 131, 0, 0, 1093, 1097, 5, 85, 0, 0, 1094, 1095, 5, 131, 0, 0, 1095, 1097, 5, 86, 0, 0, 1096, 1084, 1, 0, 0, 0, 1096, 1088, 1, 0, 0, 0, 1096, 1092, 1, 0, 0, 0, 1096, 1094, 1, 0, 0, 0, 1097, 1099, 1, 0, 0, 0, 1098, 1100, 5, 131, 0, 0, 1099, 1098, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 1101, 1, 0, 0, 0, 1101, 1102, 3, 128, 64, 0, 1102, 125, 1, 0, 0, 0, 1103, 1104, 5, 131, 0, 0, 1104, 1105, 5, 87, 0, 0, 1105, 1106, 5, 131, 0, 0, 1106, 1114, 5, 88, 0, 0, 1107, 1108, 5, 131, 0, 0, 1108, 1109, 5, 87, 0, 0, 1109, 1110, 5, 131, 0, 0, 1110, 1111, 5, 81, 0, 0, 1111, 1112, 5, 131, 0, 0, 1112, 1114, 5, 88, 0, 0, 1113, 1103, 1, 0, 0, 0, 1113, 1107, 1, 0, 0, 0, 1114, 127, 1, 0, 0, 0, 1115, 1122, 3, 130, 65, 0, 1116, 1118, 5, 131, 0, 0, 1117, 1116, 1, 0, 0, 0, 1117, 1118, 1, 0, 0, 0, 1118, 1119, 1, 0, 0, 0, 1119, 1121, 3, 166, 83, 0, 1120, 1117, 1, 0, 0, 0, 1121, 1124, 1, 0, 0, 0, 1122, 1120, 1, 0, 0, 0, 1122, 1123, 1, 0, 0, 0, 1123, 1129, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1125, 1127, 5, 131, 0, 0, 1126, 1125, 1, 0, 0, 0, 1126, 1127, 1, 0, 0, 0, 1127, 1128, 1, 0, 0, 0, 1128, 1130, 3, 90, 45, 0, 1129, 1126, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 129, 1, 0, 0, 0, 1131, 1210, 3, 132, 66, 0, 1132, 1210, 3, 178, 89, 0, 1133, 1210, 3, 168, 84, 0, 1134, 1136, 5, 89, 0, 0, 1135, 1137, 5, 131, 0, 0, 1136, 1135, 1, 0, 0, 0, 1136, 1137, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1140, 5, 6, 0, 0, 1139, 1141, 5, 131, 0, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 1144, 5, 5, 0, 0, 1143, 1145, 5, 131, 0, 0, 1144, 1143, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1146, 1, 0, 0, 0, 1146, 1210, 5, 7, 0, 0, 1147, 1210, 3, 162, 81, 0, 1148, 1210, 3, 164, 82, 0, 1149, 1151, 5, 49, 0, 0, 1150, 1152, 5, 131, 0, 0, 1151, 1150, 1, 0, 0, 0, 1151, 1152, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1155, 5, 6, 0, 0, 1154, 1156, 5, 131, 0, 0, 1155, 1154, 1, 0, 0, 0, 1155, 1156, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1159, 3, 144, 72, 0, 1158, 1160, 5, 131, 0, 0, 1159, 1158, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1162, 5, 7, 0, 0, 1162, 1210, 1, 0, 0, 0, 1163, 1165, 5, 90, 0, 0, 1164, 1166, 5, 131, 0, 0, 1165, 1164, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 1169, 5, 6, 0, 0, 1168, 1170, 5, 131, 0, 0, 1169, 1168, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1173, 3, 144, 72, 0, 1172, 1174, 5, 131, 0, 0, 1173, 1172, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1175, 1, 0, 0, 0, 1175, 1176, 5, 7, 0, 0, 1176, 1210, 1, 0, 0, 0, 1177, 1179, 5, 91, 0, 0, 1178, 1180, 5, 131, 0, 0, 1179, 1178, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1181, 1183, 5, 6, 0, 0, 1182, 1184, 5, 131, 0, 0, 1183, 1182, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1187, 3, 144, 72, 0, 1186, 1188, 5, 131, 0, 0, 1187, 1186, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1189, 1, 0, 0, 0, 1189, 1190, 5, 7, 0, 0, 1190, 1210, 1, 0, 0, 0, 1191, 1193, 5, 92, 0, 0, 1192, 1194, 5, 131, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 5, 6, 0, 0, 1196, 1198, 5, 131, 0, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1201, 3, 144, 72, 0, 1200, 1202, 5, 131, 0, 0, 1201, 1200, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1204, 5, 7, 0, 0, 1204, 1210, 1, 0, 0, 0, 1205, 1210, 3, 142, 71, 0, 1206, 1210, 3, 140, 70, 0, 1207, 1210, 3, 148, 74, 0, 1208, 1210, 3, 172, 86, 0, 1209, 1131, 1, 0, 0, 0, 1209, 1132, 1, 0, 0, 0, 1209, 1133, 1, 0, 0, 0, 1209, 1134, 1, 0, 0, 0, 1209, 1147, 1, 0, 0, 0, 1209, 1148, 1, 0, 0, 0, 1209, 1149, 1, 0, 0, 0, 1209, 1163, 1, 0, 0, 0, 1209, 1177, 1, 0, 0, 0, 1209, 1191, 1, 0, 0, 0, 1209, 1205, 1, 0, 0, 0, 1209, 1206, 1, 0, 0, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1208, 1, 0, 0, 0, 1210, 131, 1, 0, 0, 0, 1211, 1218, 3, 174, 87, 0, 1212, 1218, 5, 101, 0, 0, 1213, 1218, 3, 134, 67, 0, 1214, 1218, 5, 88, 0, 0, 1215, 1218, 3, 176, 88, 0, 1216, 1218, 3, 136, 68, 0, 1217, 1211, 1, 0, 0, 0, 1217, 1212, 1, 0, 0, 0, 1217, 1213, 1, 0, 0, 0, 1217, 1214, 1, 0, 0, 0, 1217, 1215, 1, 0, 0, 0, 1217, 1216, 1, 0, 0, 0, 1218, 133, 1, 0, 0, 0, 1219, 1220, 7, 2, 0, 0, 1220, 135, 1, 0, 0, 0, 1221, 1223, 5, 8, 0, 0, 1222, 1224, 5, 131, 0, 0, 1223, 1222, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1242, 1, 0, 0, 0, 1225, 1227, 3, 100, 50, 0, 1226, 1228, 5, 131, 0, 0, 1227, 1226, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1239, 1, 0, 0, 0, 1229, 1231, 5, 2, 0, 0, 1230, 1232, 5, 131, 0, 0, 1231, 1230, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1233, 1, 0, 0, 0, 1233, 1235, 3, 100, 50, 0, 1234, 1236, 5, 131, 0, 0, 1235, 1234, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1238, 1, 0, 0, 0, 1237, 1229, 1, 0, 0, 0, 1238, 1241, 1, 0, 0, 0, 1239, 1237, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 1243, 1, 0, 0, 0, 1241, 1239, 1, 0, 0, 0, 1242, 1225, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 5, 9, 0, 0, 1245, 137, 1, 0, 0, 0, 1246, 1248, 5, 3, 0, 0, 1247, 1249, 5, 131, 0, 0, 1248, 1247, 1, 0, 0, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1250, 1, 0, 0, 0, 1250, 1277, 3, 112, 56, 0, 1251, 1253, 5, 18, 0, 0, 1252, 1254, 5, 131, 0, 0, 1253, 1252, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1255, 1, 0, 0, 0, 1255, 1277, 3, 112, 56, 0, 1256, 1258, 5, 19, 0, 0, 1257, 1259, 5, 131, 0, 0, 1258, 1257, 1, 0, 0, 0, 1258, 1259, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1277, 3, 112, 56, 0, 1261, 1263, 5, 20, 0, 0, 1262, 1264, 5, 131, 0, 0, 1263, 1262, 1, 0, 0, 0, 1263, 1264, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1277, 3, 112, 56, 0, 1266, 1268, 5, 21, 0, 0, 1267, 1269, 5, 131, 0, 0, 1268, 1267, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1277, 3, 112, 56, 0, 1271, 1273, 5, 22, 0, 0, 1272, 1274, 5, 131, 0, 0, 1273, 1272, 1, 0, 0, 0, 1273, 1274, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1277, 3, 112, 56, 0, 1276, 1246, 1, 0, 0, 0, 1276, 1251, 1, 0, 0, 0, 1276, 1256, 1, 0, 0, 0, 1276, 1261, 1, 0, 0, 0, 1276, 1266, 1, 0, 0, 0, 1276, 1271, 1, 0, 0, 0, 1277, 139, 1, 0, 0, 0, 1278, 1280, 5, 6, 0, 0, 1279, 1281, 5, 131, 0, 0, 1280, 1279, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1284, 3, 100, 50, 0, 1283, 1285, 5, 131, 0, 0, 1284, 1283, 1, 0, 0, 0, 1284, 1285, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1287, 5, 7, 0, 0, 1287, 141, 1, 0, 0, 0, 1288, 1293, 3, 78, 39, 0, 1289, 1291, 5, 131, 0, 0, 1290, 1289, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1294, 3, 80, 40, 0, 1293, 1290, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1293, 1, 0, 0, 0, 1295, 1296, 1, 0, 0, 0, 1296, 143, 1, 0, 0, 0, 1297, 1302, 3, 146, 73, 0, 1298, 1300, 5, 131, 0, 0, 1299, 1298, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1303, 3, 68, 34, 0, 1302, 1299, 1, 0, 0, 0, 1302, 1303, 1, 0, 0, 0, 1303, 145, 1, 0, 0, 0, 1304, 1305, 3, 172, 86, 0, 1305, 1306, 5, 131, 0, 0, 1306, 1307, 5, 82, 0, 0, 1307, 1308, 5, 131, 0, 0, 1308, 1309, 3, 100, 50, 0, 1309, 147, 1, 0, 0, 0, 1310, 1312, 3, 150, 75, 0, 1311, 1313, 5, 131, 0, 0, 1312, 1311, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1316, 5, 6, 0, 0, 1315, 1317, 5, 131, 0, 0, 1316, 1315, 1, 0, 0, 0, 1316, 1317, 1, 0, 0, 0, 1317, 1322, 1, 0, 0, 0, 1318, 1320, 5, 64, 0, 0, 1319, 1321, 5, 131, 0, 0, 1320, 1319, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1323, 1, 0, 0, 0, 1322, 1318, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1341, 1, 0, 0, 0, 1324, 1326, 3, 100, 50, 0, 1325, 1327, 5, 131, 0, 0, 1326, 1325, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1338, 1, 0, 0, 0, 1328, 1330, 5, 2, 0, 0, 1329, 1331, 5, 131, 0, 0, 1330, 1329, 1, 0, 0, 0, 1330, 1331, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1334, 3, 100, 50, 0, 1333, 1335, 5, 131, 0, 0, 1334, 1333, 1, 0, 0, 0, 1334, 1335, 1, 0, 0, 0, 1335, 1337, 1, 0, 0, 0, 1336, 1328, 1, 0, 0, 0, 1337, 1340, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1342, 1, 0, 0, 0, 1340, 1338, 1, 0, 0, 0, 1341, 1324, 1, 0, 0, 0, 1341, 1342, 1, 0, 0, 0, 1342, 1343, 1, 0, 0, 0, 1343, 1344, 5, 7, 0, 0, 1344, 149, 1, 0, 0, 0, 1345, 1346, 3, 160, 80, 0, 1346, 1347, 3, 190, 95, 0, 1347, 1350, 1, 0, 0, 0, 1348, 1350, 5, 95, 0, 0, 1349, 1345, 1, 0, 0, 0, 1349, 1348, 1, 0, 0, 0, 1350, 151, 1, 0, 0, 0, 1351, 1353, 3, 158, 79, 0, 1352, 1354, 5, 131, 0, 0, 1353, 1352, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1355, 1, 0, 0, 0, 1355, 1357, 5, 6, 0, 0, 1356, 1358, 5, 131, 0, 0, 1357, 1356, 1, 0, 0, 0, 1357, 1358, 1, 0, 0, 0, 1358, 1376, 1, 0, 0, 0, 1359, 1361, 3, 100, 50, 0, 1360, 1362, 5, 131, 0, 0, 1361, 1360, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1373, 1, 0, 0, 0, 1363, 1365, 5, 2, 0, 0, 1364, 1366, 5, 131, 0, 0, 1365, 1364, 1, 0, 0, 0, 1365, 1366, 1, 0, 0, 0, 1366, 1367, 1, 0, 0, 0, 1367, 1369, 3, 100, 50, 0, 1368, 1370, 5, 131, 0, 0, 1369, 1368, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1372, 1, 0, 0, 0, 1371, 1363, 1, 0, 0, 0, 1372, 1375, 1, 0, 0, 0, 1373, 1371, 1, 0, 0, 0, 1373, 1374, 1, 0, 0, 0, 1374, 1377, 1, 0, 0, 0, 1375, 1373, 1, 0, 0, 0, 1376, 1359, 1, 0, 0, 0, 1376, 1377, 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 1379, 5, 7, 0, 0, 1379, 153, 1, 0, 0, 0, 1380, 1381, 3, 158, 79, 0, 1381, 155, 1, 0, 0, 0, 1382, 1383, 3, 190, 95, 0, 1383, 157, 1, 0, 0, 0, 1384, 1385, 3, 160, 80, 0, 1385, 1386, 3, 190, 95, 0, 1386, 159, 1, 0, 0, 0, 1387, 1388, 3, 190, 95, 0, 1388, 1389, 5, 23, 0, 0, 1389, 1391, 1, 0, 0, 0, 1390, 1387, 1, 0, 0, 0, 1391, 1394, 1, 0, 0, 0, 1392, 1390, 1, 0, 0, 0, 1392, 1393, 1, 0, 0, 0, 1393, 161, 1, 0, 0, 0, 1394, 1392, 1, 0, 0, 0, 1395, 1397, 5, 8, 0, 0, 1396, 1398, 5, 131, 0, 0, 1397, 1396, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1408, 3, 144, 72, 0, 1400, 1402, 5, 131, 0, 0, 1401, 1400, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1405, 5, 11, 0, 0, 1404, 1406, 5, 131, 0, 0, 1405, 1404, 1, 0, 0, 0, 1405, 1406, 1, 0, 0, 0, 1406, 1407, 1, 0, 0, 0, 1407, 1409, 3, 100, 50, 0, 1408, 1401, 1, 0, 0, 0, 1408, 1409, 1, 0, 0, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1412, 5, 131, 0, 0, 1411, 1410, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1413, 1, 0, 0, 0, 1413, 1414, 5, 9, 0, 0, 1414, 163, 1, 0, 0, 0, 1415, 1417, 5, 8, 0, 0, 1416, 1418, 5, 131, 0, 0, 1417, 1416, 1, 0, 0, 0, 1417, 1418, 1, 0, 0, 0, 1418, 1427, 1, 0, 0, 0, 1419, 1421, 3, 172, 86, 0, 1420, 1422, 5, 131, 0, 0, 1421, 1420, 1, 0, 0, 0, 1421, 1422, 1, 0, 0, 0, 1422, 1423, 1, 0, 0, 0, 1423, 1425, 5, 3, 0, 0, 1424, 1426, 5, 131, 0, 0, 1425, 1424, 1, 0, 0, 0, 1425, 1426, 1, 0, 0, 0, 1426, 1428, 1, 0, 0, 0, 1427, 1419, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1429, 1, 0, 0, 0, 1429, 1431, 3, 142, 71, 0, 1430, 1432, 5, 131, 0, 0, 1431, 1430, 1, 0, 0, 0, 1431, 1432, 1, 0, 0, 0, 1432, 1441, 1, 0, 0, 0, 1433, 1435, 5, 77, 0, 0, 1434, 1436, 5, 131, 0, 0, 1435, 1434, 1, 0, 0, 0, 1435, 1436, 1, 0, 0, 0, 1436, 1437, 1, 0, 0, 0, 1437, 1439, 3, 100, 50, 0, 1438, 1440, 5, 131, 0, 0, 1439, 1438, 1, 0, 0, 0, 1439, 1440, 1, 0, 0, 0, 1440, 1442, 1, 0, 0, 0, 1441, 1433, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1445, 5, 11, 0, 0, 1444, 1446, 5, 131, 0, 0, 1445, 1444, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1447, 1, 0, 0, 0, 1447, 1449, 3, 100, 50, 0, 1448, 1450, 5, 131, 0, 0, 1449, 1448, 1, 0, 0, 0, 1449, 1450, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1452, 5, 9, 0, 0, 1452, 165, 1, 0, 0, 0, 1453, 1455, 5, 23, 0, 0, 1454, 1456, 5, 131, 0, 0, 1455, 1454, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 1458, 3, 182, 91, 0, 1458, 167, 1, 0, 0, 0, 1459, 1464, 5, 96, 0, 0, 1460, 1462, 5, 131, 0, 0, 1461, 1460, 1, 0, 0, 0, 1461, 1462, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1465, 3, 170, 85, 0, 1464, 1461, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1464, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1482, 1, 0, 0, 0, 1468, 1470, 5, 96, 0, 0, 1469, 1471, 5, 131, 0, 0, 1470, 1469, 1, 0, 0, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1472, 1, 0, 0, 0, 1472, 1477, 3, 100, 50, 0, 1473, 1475, 5, 131, 0, 0, 1474, 1473, 1, 0, 0, 0, 1474, 1475, 1, 0, 0, 0, 1475, 1476, 1, 0, 0, 0, 1476, 1478, 3, 170, 85, 0, 1477, 1474, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 1477, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1482, 1, 0, 0, 0, 1481, 1459, 1, 0, 0, 0, 1481, 1468, 1, 0, 0, 0, 1482, 1491, 1, 0, 0, 0, 1483, 1485, 5, 131, 0, 0, 1484, 1483, 1, 0, 0, 0, 1484, 1485, 1, 0, 0, 0, 1485, 1486, 1, 0, 0, 0, 1486, 1488, 5, 97, 0, 0, 1487, 1489, 5, 131, 0, 0, 1488, 1487, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1492, 3, 100, 50, 0, 1491, 1484, 1, 0, 0, 0, 1491, 1492, 1, 0, 0, 0, 1492, 1494, 1, 0, 0, 0, 1493, 1495, 5, 131, 0, 0, 1494, 1493, 1, 0, 0, 0, 1494, 1495, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 1497, 5, 98, 0, 0, 1497, 169, 1, 0, 0, 0, 1498, 1500, 5, 99, 0, 0, 1499, 1501, 5, 131, 0, 0, 1500, 1499, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 1, 0, 0, 0, 1502, 1504, 3, 100, 50, 0, 1503, 1505, 5, 131, 0, 0, 1504, 1503, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1506, 1, 0, 0, 0, 1506, 1508, 5, 100, 0, 0, 1507, 1509, 5, 131, 0, 0, 1508, 1507, 1, 0, 0, 0, 1508, 1509, 1, 0, 0, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1511, 3, 100, 50, 0, 1511, 171, 1, 0, 0, 0, 1512, 1513, 3, 190, 95, 0, 1513, 173, 1, 0, 0, 0, 1514, 1517, 3, 186, 93, 0, 1515, 1517, 3, 184, 92, 0, 1516, 1514, 1, 0, 0, 0, 1516, 1515, 1, 0, 0, 0, 1517, 175, 1, 0, 0, 0, 1518, 1520, 5, 24, 0, 0, 1519, 1521, 5, 131, 0, 0, 1520, 1519, 1, 0, 0, 0, 1520, 1521, 1, 0, 0, 0, 1521, 1555, 1, 0, 0, 0, 1522, 1524, 3, 182, 91, 0, 1523, 1525, 5, 131, 0, 0, 1524, 1523, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 1528, 5, 10, 0, 0, 1527, 1529, 5, 131, 0, 0, 1528, 1527, 1, 0, 0, 0, 1528, 1529, 1, 0, 0, 0, 1529, 1530, 1, 0, 0, 0, 1530, 1532, 3, 100, 50, 0, 1531, 1533, 5, 131, 0, 0, 1532, 1531, 1, 0, 0, 0, 1532, 1533, 1, 0, 0, 0, 1533, 1552, 1, 0, 0, 0, 1534, 1536, 5, 2, 0, 0, 1535, 1537, 5, 131, 0, 0, 1536, 1535, 1, 0, 0, 0, 1536, 1537, 1, 0, 0, 0, 1537, 1538, 1, 0, 0, 0, 1538, 1540, 3, 182, 91, 0, 1539, 1541, 5, 131, 0, 0, 1540, 1539, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1542, 1, 0, 0, 0, 1542, 1544, 5, 10, 0, 0, 1543, 1545, 5, 131, 0, 0, 1544, 1543, 1, 0, 0, 0, 1544, 1545, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1548, 3, 100, 50, 0, 1547, 1549, 5, 131, 0, 0, 1548, 1547, 1, 0, 0, 0, 1548, 1549, 1, 0, 0, 0, 1549, 1551, 1, 0, 0, 0, 1550, 1534, 1, 0, 0, 0, 1551, 1554, 1, 0, 0, 0, 1552, 1550, 1, 0, 0, 0, 1552, 1553, 1, 0, 0, 0, 1553, 1556, 1, 0, 0, 0, 1554, 1552, 1, 0, 0, 0, 1555, 1522, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 1558, 5, 25, 0, 0, 1558, 177, 1, 0, 0, 0, 1559, 1562, 5, 26, 0, 0, 1560, 1563, 3, 190, 95, 0, 1561, 1563, 5, 104, 0, 0, 1562, 1560, 1, 0, 0, 0, 1562, 1561, 1, 0, 0, 0, 1563, 179, 1, 0, 0, 0, 1564, 1569, 3, 130, 65, 0, 1565, 1567, 5, 131, 0, 0, 1566, 1565, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1570, 3, 166, 83, 0, 1569, 1566, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1569, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 181, 1, 0, 0, 0, 1573, 1574, 3, 188, 94, 0, 1574, 183, 1, 0, 0, 0, 1575, 1576, 7, 3, 0, 0, 1576, 185, 1, 0, 0, 0, 1577, 1578, 7, 4, 0, 0, 1578, 187, 1, 0, 0, 0, 1579, 1582, 3, 190, 95, 0, 1580, 1582, 3, 192, 96, 0, 1581, 1579, 1, 0, 0, 0, 1581, 1580, 1, 0, 0, 0, 1582, 189, 1, 0, 0, 0, 1583, 1584, 7, 5, 0, 0, 1584, 191, 1, 0, 0, 0, 1585, 1586, 7, 6, 0, 0, 1586, 193, 1, 0, 0, 0, 1587, 1588, 7, 7, 0, 0, 1588, 195, 1, 0, 0, 0, 1589, 1590, 7, 8, 0, 0, 1590, 197, 1, 0, 0, 0, 1591, 1592, 7, 9, 0, 0, 1592, 199, 1, 0, 0, 0, 293, 201, 205, 208, 211, 218, 223, 226, 230, 234, 239, 246, 251, 254, 258, 262, 266, 272, 276, 281, 286, 290, 293, 295, 299, 303, 308, 312, 317, 321, 330, 335, 339, 343, 347, 352, 356, 359, 363, 373, 380, 393, 397, 403, 407, 411, 416, 421, 425, 431, 435, 441, 445, 451, 455, 459, 463, 467, 471, 476, 483, 487, 492, 499, 505, 510, 516, 522, 527, 531, 536, 539, 542, 545, 552, 558, 561, 566, 569, 573, 576, 584, 588, 592, 596, 600, 605, 610, 614, 619, 622, 631, 640, 645, 658, 661, 677, 685, 689, 694, 699, 703, 708, 714, 719, 726, 730, 734, 736, 740, 742, 746, 748, 754, 760, 764, 767, 770, 774, 780, 784, 787, 790, 796, 799, 802, 806, 812, 815, 818, 822, 826, 830, 832, 836, 838, 841, 845, 847, 853, 857, 861, 865, 868, 873, 878, 883, 888, 894, 898, 900, 904, 908, 910, 912, 927, 937, 947, 952, 956, 963, 968, 973, 977, 981, 985, 988, 990, 995, 999, 1003, 1007, 1011, 1015, 1018, 1020, 1025, 1029, 1034, 1039, 1043, 1052, 1054, 1060, 1064, 1071, 1075, 1079, 1082, 1096, 1099, 1113, 1117, 1122, 1126, 1129, 1136, 1140, 1144, 1151, 1155, 1159, 1165, 1169, 1173, 1179, 1183, 1187, 1193, 1197, 1201, 1209, 1217, 1223, 1227, 1231, 1235, 1239, 1242, 1248, 1253, 1258, 1263, 1268, 1273, 1276, 1280, 1284, 1290, 1295, 1299, 1302, 1312, 1316, 1320, 1322, 1326, 1330, 1334, 1338, 1341, 1349, 1353, 1357, 1361, 1365, 1369, 1373, 1376, 1392, 1397, 1401, 1405, 1408, 1411, 1417, 1421, 1425, 1427, 1431, 1435, 1439, 1441, 1445, 1449, 1455, 1461, 1466, 1470, 1474, 1479, 1481, 1484, 1488, 1491, 1494, 1500, 1504, 1508, 1516, 1520, 1524, 1528, 1532, 1536, 1540, 1544, 1548, 1552, 1555, 1562, 1566, 1571, 1581] \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.tokens b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.tokens new file mode 100644 index 00000000..856ae310 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.tokens @@ -0,0 +1,179 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +T__25=26 +T__26=27 +T__27=28 +T__28=29 +T__29=30 +T__30=31 +T__31=32 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +T__38=39 +T__39=40 +T__40=41 +T__41=42 +T__42=43 +T__43=44 +T__44=45 +EXPLAIN=46 +PROFILE=47 +UNION=48 +ALL=49 +OPTIONAL_=50 +MATCH=51 +UNWIND=52 +AS=53 +MERGE=54 +ON=55 +CREATE=56 +SET=57 +DETACH=58 +DELETE_=59 +REMOVE=60 +CALL=61 +YIELD=62 +WITH=63 +DISTINCT=64 +RETURN=65 +ORDER=66 +BY=67 +L_SKIP=68 +LIMIT=69 +ASCENDING=70 +ASC=71 +DESCENDING=72 +DESC=73 +USING=74 +JOIN=75 +START=76 +WHERE=77 +OR=78 +XOR=79 +AND=80 +NOT=81 +IN=82 +STARTS=83 +ENDS=84 +CONTAINS=85 +REGEXP=86 +IS=87 +NULL_=88 +COUNT=89 +ANY=90 +NONE=91 +SINGLE=92 +TRUE_=93 +FALSE_=94 +EXISTS=95 +CASE=96 +ELSE=97 +END=98 +WHEN=99 +THEN=100 +StringLiteral=101 +EscapedChar=102 +HexInteger=103 +DecimalInteger=104 +OctalInteger=105 +HexLetter=106 +HexDigit=107 +Digit=108 +NonZeroDigit=109 +NonZeroOctDigit=110 +OctDigit=111 +ZeroDigit=112 +ExponentDecimalReal=113 +RegularDecimalReal=114 +FILTER=115 +EXTRACT=116 +UnescapedSymbolicName=117 +CONSTRAINT=118 +DO=119 +FOR=120 +REQUIRE=121 +UNIQUE=122 +MANDATORY=123 +SCALAR=124 +OF=125 +ADD=126 +DROP=127 +IdentifierStart=128 +IdentifierPart=129 +EscapedSymbolicName=130 +SP=131 +WHITESPACE=132 +Comment=133 +';'=1 +','=2 +'='=3 +'+='=4 +'*'=5 +'('=6 +')'=7 +'['=8 +']'=9 +':'=10 +'|'=11 +'..'=12 +'+'=13 +'-'=14 +'/'=15 +'%'=16 +'^'=17 +'<>'=18 +'<'=19 +'>'=20 +'<='=21 +'>='=22 +'.'=23 +'{'=24 +'}'=25 +'$'=26 +'⟨'=27 +'〈'=28 +'﹤'=29 +'<'=30 +'⟩'=31 +'〉'=32 +'﹥'=33 +'>'=34 +'­'=35 +'‐'=36 +'‑'=37 +'‒'=38 +'–'=39 +'—'=40 +'―'=41 +'−'=42 +'﹘'=43 +'﹣'=44 +'-'=45 +'0'=112 diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.interp b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.interp new file mode 100644 index 00000000..85d5663a --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.interp @@ -0,0 +1,436 @@ +token literal names: +null +';' +',' +'=' +'+=' +'*' +'(' +')' +'[' +']' +':' +'|' +'..' +'+' +'-' +'/' +'%' +'^' +'<>' +'<' +'>' +'<=' +'>=' +'.' +'{' +'}' +'$' +'⟨' +'〈' +'﹤' +'<' +'⟩' +'〉' +'﹥' +'>' +'­' +'‐' +'‑' +'‒' +'–' +'—' +'―' +'−' +'﹘' +'﹣' +'-' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'0' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +EXPLAIN +PROFILE +UNION +ALL +OPTIONAL_ +MATCH +UNWIND +AS +MERGE +ON +CREATE +SET +DETACH +DELETE_ +REMOVE +CALL +YIELD +WITH +DISTINCT +RETURN +ORDER +BY +L_SKIP +LIMIT +ASCENDING +ASC +DESCENDING +DESC +USING +JOIN +START +WHERE +OR +XOR +AND +NOT +IN +STARTS +ENDS +CONTAINS +REGEXP +IS +NULL_ +COUNT +ANY +NONE +SINGLE +TRUE_ +FALSE_ +EXISTS +CASE +ELSE +END +WHEN +THEN +StringLiteral +EscapedChar +HexInteger +DecimalInteger +OctalInteger +HexLetter +HexDigit +Digit +NonZeroDigit +NonZeroOctDigit +OctDigit +ZeroDigit +ExponentDecimalReal +RegularDecimalReal +FILTER +EXTRACT +UnescapedSymbolicName +CONSTRAINT +DO +FOR +REQUIRE +UNIQUE +MANDATORY +SCALAR +OF +ADD +DROP +IdentifierStart +IdentifierPart +EscapedSymbolicName +SP +WHITESPACE +Comment + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +T__9 +T__10 +T__11 +T__12 +T__13 +T__14 +T__15 +T__16 +T__17 +T__18 +T__19 +T__20 +T__21 +T__22 +T__23 +T__24 +T__25 +T__26 +T__27 +T__28 +T__29 +T__30 +T__31 +T__32 +T__33 +T__34 +T__35 +T__36 +T__37 +T__38 +T__39 +T__40 +T__41 +T__42 +T__43 +T__44 +EXPLAIN +PROFILE +UNION +ALL +OPTIONAL_ +MATCH +UNWIND +AS +MERGE +ON +CREATE +SET +DETACH +DELETE_ +REMOVE +CALL +YIELD +WITH +DISTINCT +RETURN +ORDER +BY +L_SKIP +LIMIT +ASCENDING +ASC +DESCENDING +DESC +USING +JOIN +START +WHERE +OR +XOR +AND +NOT +IN +STARTS +ENDS +CONTAINS +REGEXP +IS +NULL_ +COUNT +ANY +NONE +SINGLE +TRUE_ +FALSE_ +EXISTS +CASE +ELSE +END +WHEN +THEN +StringLiteral +EscapedChar +HexInteger +DecimalInteger +OctalInteger +HexLetter +HexDigit +Digit +NonZeroDigit +NonZeroOctDigit +OctDigit +ZeroDigit +ExponentDecimalReal +RegularDecimalReal +FILTER +EXTRACT +UnescapedSymbolicName +CONSTRAINT +DO +FOR +REQUIRE +UNIQUE +MANDATORY +SCALAR +OF +ADD +DROP +IdentifierStart +IdentifierPart +EscapedSymbolicName +SP +WHITESPACE +Comment +FF +EscapedSymbolicName_0 +RS +ID_Continue +Comment_1 +StringLiteral_1 +Comment_3 +Comment_2 +GS +FS +CR +Sc +SPACE +Pc +TAB +StringLiteral_0 +LF +VT +US +ID_Start + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 133, 1043, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 5, 100, 721, 8, 100, 10, 100, 12, 100, 724, 9, 100, 1, 100, 1, 100, 1, 100, 1, 100, 5, 100, 730, 8, 100, 10, 100, 12, 100, 733, 9, 100, 1, 100, 3, 100, 736, 8, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 756, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 4, 102, 762, 8, 102, 11, 102, 12, 102, 763, 1, 103, 1, 103, 1, 103, 5, 103, 769, 8, 103, 10, 103, 12, 103, 772, 9, 103, 3, 103, 774, 8, 103, 1, 104, 1, 104, 4, 104, 778, 8, 104, 11, 104, 12, 104, 779, 1, 105, 3, 105, 783, 8, 105, 1, 106, 1, 106, 3, 106, 787, 8, 106, 1, 107, 1, 107, 3, 107, 791, 8, 107, 1, 108, 1, 108, 3, 108, 795, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 801, 8, 110, 1, 111, 1, 111, 1, 112, 4, 112, 806, 8, 112, 11, 112, 12, 112, 807, 1, 112, 4, 112, 811, 8, 112, 11, 112, 12, 112, 812, 1, 112, 1, 112, 4, 112, 817, 8, 112, 11, 112, 12, 112, 818, 1, 112, 1, 112, 4, 112, 823, 8, 112, 11, 112, 12, 112, 824, 3, 112, 827, 8, 112, 1, 112, 1, 112, 3, 112, 831, 8, 112, 1, 112, 4, 112, 834, 8, 112, 11, 112, 12, 112, 835, 1, 113, 5, 113, 839, 8, 113, 10, 113, 12, 113, 842, 9, 113, 1, 113, 1, 113, 4, 113, 846, 8, 113, 11, 113, 12, 113, 847, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 5, 116, 867, 8, 116, 10, 116, 12, 116, 870, 9, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 3, 127, 936, 8, 127, 1, 128, 1, 128, 3, 128, 940, 8, 128, 1, 129, 1, 129, 5, 129, 944, 8, 129, 10, 129, 12, 129, 947, 9, 129, 1, 129, 4, 129, 950, 8, 129, 11, 129, 12, 129, 951, 1, 130, 4, 130, 955, 8, 130, 11, 130, 12, 130, 956, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 971, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 979, 8, 132, 10, 132, 12, 132, 982, 9, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 990, 8, 132, 10, 132, 12, 132, 993, 9, 132, 1, 132, 3, 132, 996, 8, 132, 1, 132, 1, 132, 3, 132, 1000, 8, 132, 3, 132, 1002, 8, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 0, 0, 153, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 0, 269, 0, 271, 0, 273, 0, 275, 0, 277, 0, 279, 0, 281, 0, 283, 0, 285, 0, 287, 0, 289, 0, 291, 0, 293, 0, 295, 0, 297, 0, 299, 0, 301, 0, 303, 0, 305, 0, 1, 0, 48, 2, 0, 69, 69, 101, 101, 2, 0, 88, 88, 120, 120, 2, 0, 80, 80, 112, 112, 2, 0, 76, 76, 108, 108, 2, 0, 65, 65, 97, 97, 2, 0, 73, 73, 105, 105, 2, 0, 78, 78, 110, 110, 2, 0, 82, 82, 114, 114, 2, 0, 79, 79, 111, 111, 2, 0, 70, 70, 102, 102, 2, 0, 85, 85, 117, 117, 2, 0, 84, 84, 116, 116, 2, 0, 77, 77, 109, 109, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 87, 87, 119, 119, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 71, 71, 103, 103, 2, 0, 86, 86, 118, 118, 2, 0, 89, 89, 121, 121, 2, 0, 66, 66, 98, 98, 2, 0, 75, 75, 107, 107, 2, 0, 74, 74, 106, 106, 13, 0, 34, 34, 39, 39, 66, 66, 70, 70, 78, 78, 82, 82, 84, 84, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 2, 0, 65, 70, 97, 102, 2, 0, 81, 81, 113, 113, 8, 0, 160, 160, 5760, 5760, 6158, 6158, 8192, 8202, 8232, 8233, 8239, 8239, 8287, 8287, 12288, 12288, 1, 0, 12, 12, 2, 0, 0, 95, 97, 65535, 1, 0, 30, 30, 429, 0, 48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 2, 0, 0, 41, 43, 65535, 3, 0, 0, 38, 40, 91, 93, 65535, 3, 0, 0, 9, 11, 12, 14, 65535, 2, 0, 0, 46, 48, 65535, 1, 0, 29, 29, 1, 0, 28, 28, 1, 0, 13, 13, 17, 0, 36, 36, 162, 165, 1423, 1423, 1547, 1547, 2546, 2547, 2555, 2555, 2801, 2801, 3065, 3065, 3647, 3647, 6107, 6107, 8352, 8378, 43064, 43064, 65020, 65020, 65129, 65129, 65284, 65284, 65504, 65505, 65509, 65510, 1, 0, 32, 32, 6, 0, 95, 95, 8255, 8256, 8276, 8276, 65075, 65076, 65101, 65103, 65343, 65343, 1, 0, 9, 9, 3, 0, 0, 33, 35, 91, 93, 65535, 1, 0, 10, 10, 1, 0, 11, 11, 1, 0, 31, 31, 370, 0, 65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 1070, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 1, 307, 1, 0, 0, 0, 3, 309, 1, 0, 0, 0, 5, 311, 1, 0, 0, 0, 7, 313, 1, 0, 0, 0, 9, 316, 1, 0, 0, 0, 11, 318, 1, 0, 0, 0, 13, 320, 1, 0, 0, 0, 15, 322, 1, 0, 0, 0, 17, 324, 1, 0, 0, 0, 19, 326, 1, 0, 0, 0, 21, 328, 1, 0, 0, 0, 23, 330, 1, 0, 0, 0, 25, 333, 1, 0, 0, 0, 27, 335, 1, 0, 0, 0, 29, 337, 1, 0, 0, 0, 31, 339, 1, 0, 0, 0, 33, 341, 1, 0, 0, 0, 35, 343, 1, 0, 0, 0, 37, 346, 1, 0, 0, 0, 39, 348, 1, 0, 0, 0, 41, 350, 1, 0, 0, 0, 43, 353, 1, 0, 0, 0, 45, 356, 1, 0, 0, 0, 47, 358, 1, 0, 0, 0, 49, 360, 1, 0, 0, 0, 51, 362, 1, 0, 0, 0, 53, 364, 1, 0, 0, 0, 55, 366, 1, 0, 0, 0, 57, 368, 1, 0, 0, 0, 59, 370, 1, 0, 0, 0, 61, 372, 1, 0, 0, 0, 63, 374, 1, 0, 0, 0, 65, 376, 1, 0, 0, 0, 67, 378, 1, 0, 0, 0, 69, 380, 1, 0, 0, 0, 71, 382, 1, 0, 0, 0, 73, 384, 1, 0, 0, 0, 75, 386, 1, 0, 0, 0, 77, 388, 1, 0, 0, 0, 79, 390, 1, 0, 0, 0, 81, 392, 1, 0, 0, 0, 83, 394, 1, 0, 0, 0, 85, 396, 1, 0, 0, 0, 87, 398, 1, 0, 0, 0, 89, 400, 1, 0, 0, 0, 91, 402, 1, 0, 0, 0, 93, 410, 1, 0, 0, 0, 95, 418, 1, 0, 0, 0, 97, 424, 1, 0, 0, 0, 99, 428, 1, 0, 0, 0, 101, 437, 1, 0, 0, 0, 103, 443, 1, 0, 0, 0, 105, 450, 1, 0, 0, 0, 107, 453, 1, 0, 0, 0, 109, 459, 1, 0, 0, 0, 111, 462, 1, 0, 0, 0, 113, 469, 1, 0, 0, 0, 115, 473, 1, 0, 0, 0, 117, 480, 1, 0, 0, 0, 119, 487, 1, 0, 0, 0, 121, 494, 1, 0, 0, 0, 123, 499, 1, 0, 0, 0, 125, 505, 1, 0, 0, 0, 127, 510, 1, 0, 0, 0, 129, 519, 1, 0, 0, 0, 131, 526, 1, 0, 0, 0, 133, 532, 1, 0, 0, 0, 135, 535, 1, 0, 0, 0, 137, 540, 1, 0, 0, 0, 139, 546, 1, 0, 0, 0, 141, 556, 1, 0, 0, 0, 143, 560, 1, 0, 0, 0, 145, 571, 1, 0, 0, 0, 147, 576, 1, 0, 0, 0, 149, 582, 1, 0, 0, 0, 151, 587, 1, 0, 0, 0, 153, 593, 1, 0, 0, 0, 155, 599, 1, 0, 0, 0, 157, 602, 1, 0, 0, 0, 159, 606, 1, 0, 0, 0, 161, 610, 1, 0, 0, 0, 163, 614, 1, 0, 0, 0, 165, 617, 1, 0, 0, 0, 167, 624, 1, 0, 0, 0, 169, 629, 1, 0, 0, 0, 171, 638, 1, 0, 0, 0, 173, 645, 1, 0, 0, 0, 175, 648, 1, 0, 0, 0, 177, 653, 1, 0, 0, 0, 179, 659, 1, 0, 0, 0, 181, 663, 1, 0, 0, 0, 183, 668, 1, 0, 0, 0, 185, 675, 1, 0, 0, 0, 187, 680, 1, 0, 0, 0, 189, 686, 1, 0, 0, 0, 191, 693, 1, 0, 0, 0, 193, 698, 1, 0, 0, 0, 195, 703, 1, 0, 0, 0, 197, 707, 1, 0, 0, 0, 199, 712, 1, 0, 0, 0, 201, 735, 1, 0, 0, 0, 203, 737, 1, 0, 0, 0, 205, 757, 1, 0, 0, 0, 207, 773, 1, 0, 0, 0, 209, 775, 1, 0, 0, 0, 211, 782, 1, 0, 0, 0, 213, 786, 1, 0, 0, 0, 215, 790, 1, 0, 0, 0, 217, 794, 1, 0, 0, 0, 219, 796, 1, 0, 0, 0, 221, 800, 1, 0, 0, 0, 223, 802, 1, 0, 0, 0, 225, 826, 1, 0, 0, 0, 227, 840, 1, 0, 0, 0, 229, 849, 1, 0, 0, 0, 231, 856, 1, 0, 0, 0, 233, 864, 1, 0, 0, 0, 235, 871, 1, 0, 0, 0, 237, 882, 1, 0, 0, 0, 239, 885, 1, 0, 0, 0, 241, 889, 1, 0, 0, 0, 243, 897, 1, 0, 0, 0, 245, 904, 1, 0, 0, 0, 247, 914, 1, 0, 0, 0, 249, 921, 1, 0, 0, 0, 251, 924, 1, 0, 0, 0, 253, 928, 1, 0, 0, 0, 255, 935, 1, 0, 0, 0, 257, 939, 1, 0, 0, 0, 259, 949, 1, 0, 0, 0, 261, 954, 1, 0, 0, 0, 263, 970, 1, 0, 0, 0, 265, 1001, 1, 0, 0, 0, 267, 1003, 1, 0, 0, 0, 269, 1005, 1, 0, 0, 0, 271, 1007, 1, 0, 0, 0, 273, 1009, 1, 0, 0, 0, 275, 1011, 1, 0, 0, 0, 277, 1013, 1, 0, 0, 0, 279, 1015, 1, 0, 0, 0, 281, 1017, 1, 0, 0, 0, 283, 1019, 1, 0, 0, 0, 285, 1021, 1, 0, 0, 0, 287, 1023, 1, 0, 0, 0, 289, 1025, 1, 0, 0, 0, 291, 1027, 1, 0, 0, 0, 293, 1029, 1, 0, 0, 0, 295, 1031, 1, 0, 0, 0, 297, 1033, 1, 0, 0, 0, 299, 1035, 1, 0, 0, 0, 301, 1037, 1, 0, 0, 0, 303, 1039, 1, 0, 0, 0, 305, 1041, 1, 0, 0, 0, 307, 308, 5, 59, 0, 0, 308, 2, 1, 0, 0, 0, 309, 310, 5, 44, 0, 0, 310, 4, 1, 0, 0, 0, 311, 312, 5, 61, 0, 0, 312, 6, 1, 0, 0, 0, 313, 314, 5, 43, 0, 0, 314, 315, 5, 61, 0, 0, 315, 8, 1, 0, 0, 0, 316, 317, 5, 42, 0, 0, 317, 10, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 12, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 14, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 16, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 18, 1, 0, 0, 0, 326, 327, 5, 58, 0, 0, 327, 20, 1, 0, 0, 0, 328, 329, 5, 124, 0, 0, 329, 22, 1, 0, 0, 0, 330, 331, 5, 46, 0, 0, 331, 332, 5, 46, 0, 0, 332, 24, 1, 0, 0, 0, 333, 334, 5, 43, 0, 0, 334, 26, 1, 0, 0, 0, 335, 336, 5, 45, 0, 0, 336, 28, 1, 0, 0, 0, 337, 338, 5, 47, 0, 0, 338, 30, 1, 0, 0, 0, 339, 340, 5, 37, 0, 0, 340, 32, 1, 0, 0, 0, 341, 342, 5, 94, 0, 0, 342, 34, 1, 0, 0, 0, 343, 344, 5, 60, 0, 0, 344, 345, 5, 62, 0, 0, 345, 36, 1, 0, 0, 0, 346, 347, 5, 60, 0, 0, 347, 38, 1, 0, 0, 0, 348, 349, 5, 62, 0, 0, 349, 40, 1, 0, 0, 0, 350, 351, 5, 60, 0, 0, 351, 352, 5, 61, 0, 0, 352, 42, 1, 0, 0, 0, 353, 354, 5, 62, 0, 0, 354, 355, 5, 61, 0, 0, 355, 44, 1, 0, 0, 0, 356, 357, 5, 46, 0, 0, 357, 46, 1, 0, 0, 0, 358, 359, 5, 123, 0, 0, 359, 48, 1, 0, 0, 0, 360, 361, 5, 125, 0, 0, 361, 50, 1, 0, 0, 0, 362, 363, 5, 36, 0, 0, 363, 52, 1, 0, 0, 0, 364, 365, 5, 10216, 0, 0, 365, 54, 1, 0, 0, 0, 366, 367, 5, 12296, 0, 0, 367, 56, 1, 0, 0, 0, 368, 369, 5, 65124, 0, 0, 369, 58, 1, 0, 0, 0, 370, 371, 5, 65308, 0, 0, 371, 60, 1, 0, 0, 0, 372, 373, 5, 10217, 0, 0, 373, 62, 1, 0, 0, 0, 374, 375, 5, 12297, 0, 0, 375, 64, 1, 0, 0, 0, 376, 377, 5, 65125, 0, 0, 377, 66, 1, 0, 0, 0, 378, 379, 5, 65310, 0, 0, 379, 68, 1, 0, 0, 0, 380, 381, 5, 173, 0, 0, 381, 70, 1, 0, 0, 0, 382, 383, 5, 8208, 0, 0, 383, 72, 1, 0, 0, 0, 384, 385, 5, 8209, 0, 0, 385, 74, 1, 0, 0, 0, 386, 387, 5, 8210, 0, 0, 387, 76, 1, 0, 0, 0, 388, 389, 5, 8211, 0, 0, 389, 78, 1, 0, 0, 0, 390, 391, 5, 8212, 0, 0, 391, 80, 1, 0, 0, 0, 392, 393, 5, 8213, 0, 0, 393, 82, 1, 0, 0, 0, 394, 395, 5, 8722, 0, 0, 395, 84, 1, 0, 0, 0, 396, 397, 5, 65112, 0, 0, 397, 86, 1, 0, 0, 0, 398, 399, 5, 65123, 0, 0, 399, 88, 1, 0, 0, 0, 400, 401, 5, 65293, 0, 0, 401, 90, 1, 0, 0, 0, 402, 403, 7, 0, 0, 0, 403, 404, 7, 1, 0, 0, 404, 405, 7, 2, 0, 0, 405, 406, 7, 3, 0, 0, 406, 407, 7, 4, 0, 0, 407, 408, 7, 5, 0, 0, 408, 409, 7, 6, 0, 0, 409, 92, 1, 0, 0, 0, 410, 411, 7, 2, 0, 0, 411, 412, 7, 7, 0, 0, 412, 413, 7, 8, 0, 0, 413, 414, 7, 9, 0, 0, 414, 415, 7, 5, 0, 0, 415, 416, 7, 3, 0, 0, 416, 417, 7, 0, 0, 0, 417, 94, 1, 0, 0, 0, 418, 419, 7, 10, 0, 0, 419, 420, 7, 6, 0, 0, 420, 421, 7, 5, 0, 0, 421, 422, 7, 8, 0, 0, 422, 423, 7, 6, 0, 0, 423, 96, 1, 0, 0, 0, 424, 425, 7, 4, 0, 0, 425, 426, 7, 3, 0, 0, 426, 427, 7, 3, 0, 0, 427, 98, 1, 0, 0, 0, 428, 429, 7, 8, 0, 0, 429, 430, 7, 2, 0, 0, 430, 431, 7, 11, 0, 0, 431, 432, 7, 5, 0, 0, 432, 433, 7, 8, 0, 0, 433, 434, 7, 6, 0, 0, 434, 435, 7, 4, 0, 0, 435, 436, 7, 3, 0, 0, 436, 100, 1, 0, 0, 0, 437, 438, 7, 12, 0, 0, 438, 439, 7, 4, 0, 0, 439, 440, 7, 11, 0, 0, 440, 441, 7, 13, 0, 0, 441, 442, 7, 14, 0, 0, 442, 102, 1, 0, 0, 0, 443, 444, 7, 10, 0, 0, 444, 445, 7, 6, 0, 0, 445, 446, 7, 15, 0, 0, 446, 447, 7, 5, 0, 0, 447, 448, 7, 6, 0, 0, 448, 449, 7, 16, 0, 0, 449, 104, 1, 0, 0, 0, 450, 451, 7, 4, 0, 0, 451, 452, 7, 17, 0, 0, 452, 106, 1, 0, 0, 0, 453, 454, 7, 12, 0, 0, 454, 455, 7, 0, 0, 0, 455, 456, 7, 7, 0, 0, 456, 457, 7, 18, 0, 0, 457, 458, 7, 0, 0, 0, 458, 108, 1, 0, 0, 0, 459, 460, 7, 8, 0, 0, 460, 461, 7, 6, 0, 0, 461, 110, 1, 0, 0, 0, 462, 463, 7, 13, 0, 0, 463, 464, 7, 7, 0, 0, 464, 465, 7, 0, 0, 0, 465, 466, 7, 4, 0, 0, 466, 467, 7, 11, 0, 0, 467, 468, 7, 0, 0, 0, 468, 112, 1, 0, 0, 0, 469, 470, 7, 17, 0, 0, 470, 471, 7, 0, 0, 0, 471, 472, 7, 11, 0, 0, 472, 114, 1, 0, 0, 0, 473, 474, 7, 16, 0, 0, 474, 475, 7, 0, 0, 0, 475, 476, 7, 11, 0, 0, 476, 477, 7, 4, 0, 0, 477, 478, 7, 13, 0, 0, 478, 479, 7, 14, 0, 0, 479, 116, 1, 0, 0, 0, 480, 481, 7, 16, 0, 0, 481, 482, 7, 0, 0, 0, 482, 483, 7, 3, 0, 0, 483, 484, 7, 0, 0, 0, 484, 485, 7, 11, 0, 0, 485, 486, 7, 0, 0, 0, 486, 118, 1, 0, 0, 0, 487, 488, 7, 7, 0, 0, 488, 489, 7, 0, 0, 0, 489, 490, 7, 12, 0, 0, 490, 491, 7, 8, 0, 0, 491, 492, 7, 19, 0, 0, 492, 493, 7, 0, 0, 0, 493, 120, 1, 0, 0, 0, 494, 495, 7, 13, 0, 0, 495, 496, 7, 4, 0, 0, 496, 497, 7, 3, 0, 0, 497, 498, 7, 3, 0, 0, 498, 122, 1, 0, 0, 0, 499, 500, 7, 20, 0, 0, 500, 501, 7, 5, 0, 0, 501, 502, 7, 0, 0, 0, 502, 503, 7, 3, 0, 0, 503, 504, 7, 16, 0, 0, 504, 124, 1, 0, 0, 0, 505, 506, 7, 15, 0, 0, 506, 507, 7, 5, 0, 0, 507, 508, 7, 11, 0, 0, 508, 509, 7, 14, 0, 0, 509, 126, 1, 0, 0, 0, 510, 511, 7, 16, 0, 0, 511, 512, 7, 5, 0, 0, 512, 513, 7, 17, 0, 0, 513, 514, 7, 11, 0, 0, 514, 515, 7, 5, 0, 0, 515, 516, 7, 6, 0, 0, 516, 517, 7, 13, 0, 0, 517, 518, 7, 11, 0, 0, 518, 128, 1, 0, 0, 0, 519, 520, 7, 7, 0, 0, 520, 521, 7, 0, 0, 0, 521, 522, 7, 11, 0, 0, 522, 523, 7, 10, 0, 0, 523, 524, 7, 7, 0, 0, 524, 525, 7, 6, 0, 0, 525, 130, 1, 0, 0, 0, 526, 527, 7, 8, 0, 0, 527, 528, 7, 7, 0, 0, 528, 529, 7, 16, 0, 0, 529, 530, 7, 0, 0, 0, 530, 531, 7, 7, 0, 0, 531, 132, 1, 0, 0, 0, 532, 533, 7, 21, 0, 0, 533, 534, 7, 20, 0, 0, 534, 134, 1, 0, 0, 0, 535, 536, 7, 17, 0, 0, 536, 537, 7, 22, 0, 0, 537, 538, 7, 5, 0, 0, 538, 539, 7, 2, 0, 0, 539, 136, 1, 0, 0, 0, 540, 541, 7, 3, 0, 0, 541, 542, 7, 5, 0, 0, 542, 543, 7, 12, 0, 0, 543, 544, 7, 5, 0, 0, 544, 545, 7, 11, 0, 0, 545, 138, 1, 0, 0, 0, 546, 547, 7, 4, 0, 0, 547, 548, 7, 17, 0, 0, 548, 549, 7, 13, 0, 0, 549, 550, 7, 0, 0, 0, 550, 551, 7, 6, 0, 0, 551, 552, 7, 16, 0, 0, 552, 553, 7, 5, 0, 0, 553, 554, 7, 6, 0, 0, 554, 555, 7, 18, 0, 0, 555, 140, 1, 0, 0, 0, 556, 557, 7, 4, 0, 0, 557, 558, 7, 17, 0, 0, 558, 559, 7, 13, 0, 0, 559, 142, 1, 0, 0, 0, 560, 561, 7, 16, 0, 0, 561, 562, 7, 0, 0, 0, 562, 563, 7, 17, 0, 0, 563, 564, 7, 13, 0, 0, 564, 565, 7, 0, 0, 0, 565, 566, 7, 6, 0, 0, 566, 567, 7, 16, 0, 0, 567, 568, 7, 5, 0, 0, 568, 569, 7, 6, 0, 0, 569, 570, 7, 18, 0, 0, 570, 144, 1, 0, 0, 0, 571, 572, 7, 16, 0, 0, 572, 573, 7, 0, 0, 0, 573, 574, 7, 17, 0, 0, 574, 575, 7, 13, 0, 0, 575, 146, 1, 0, 0, 0, 576, 577, 7, 10, 0, 0, 577, 578, 7, 17, 0, 0, 578, 579, 7, 5, 0, 0, 579, 580, 7, 6, 0, 0, 580, 581, 7, 18, 0, 0, 581, 148, 1, 0, 0, 0, 582, 583, 7, 23, 0, 0, 583, 584, 7, 8, 0, 0, 584, 585, 7, 5, 0, 0, 585, 586, 7, 6, 0, 0, 586, 150, 1, 0, 0, 0, 587, 588, 7, 17, 0, 0, 588, 589, 7, 11, 0, 0, 589, 590, 7, 4, 0, 0, 590, 591, 7, 7, 0, 0, 591, 592, 7, 11, 0, 0, 592, 152, 1, 0, 0, 0, 593, 594, 7, 15, 0, 0, 594, 595, 7, 14, 0, 0, 595, 596, 7, 0, 0, 0, 596, 597, 7, 7, 0, 0, 597, 598, 7, 0, 0, 0, 598, 154, 1, 0, 0, 0, 599, 600, 7, 8, 0, 0, 600, 601, 7, 7, 0, 0, 601, 156, 1, 0, 0, 0, 602, 603, 7, 1, 0, 0, 603, 604, 7, 8, 0, 0, 604, 605, 7, 7, 0, 0, 605, 158, 1, 0, 0, 0, 606, 607, 7, 4, 0, 0, 607, 608, 7, 6, 0, 0, 608, 609, 7, 16, 0, 0, 609, 160, 1, 0, 0, 0, 610, 611, 7, 6, 0, 0, 611, 612, 7, 8, 0, 0, 612, 613, 7, 11, 0, 0, 613, 162, 1, 0, 0, 0, 614, 615, 7, 5, 0, 0, 615, 616, 7, 6, 0, 0, 616, 164, 1, 0, 0, 0, 617, 618, 7, 17, 0, 0, 618, 619, 7, 11, 0, 0, 619, 620, 7, 4, 0, 0, 620, 621, 7, 7, 0, 0, 621, 622, 7, 11, 0, 0, 622, 623, 7, 17, 0, 0, 623, 166, 1, 0, 0, 0, 624, 625, 7, 0, 0, 0, 625, 626, 7, 6, 0, 0, 626, 627, 7, 16, 0, 0, 627, 628, 7, 17, 0, 0, 628, 168, 1, 0, 0, 0, 629, 630, 7, 13, 0, 0, 630, 631, 7, 8, 0, 0, 631, 632, 7, 6, 0, 0, 632, 633, 7, 11, 0, 0, 633, 634, 7, 4, 0, 0, 634, 635, 7, 5, 0, 0, 635, 636, 7, 6, 0, 0, 636, 637, 7, 17, 0, 0, 637, 170, 1, 0, 0, 0, 638, 639, 7, 7, 0, 0, 639, 640, 7, 0, 0, 0, 640, 641, 7, 18, 0, 0, 641, 642, 7, 0, 0, 0, 642, 643, 7, 1, 0, 0, 643, 644, 7, 2, 0, 0, 644, 172, 1, 0, 0, 0, 645, 646, 7, 5, 0, 0, 646, 647, 7, 17, 0, 0, 647, 174, 1, 0, 0, 0, 648, 649, 7, 6, 0, 0, 649, 650, 7, 10, 0, 0, 650, 651, 7, 3, 0, 0, 651, 652, 7, 3, 0, 0, 652, 176, 1, 0, 0, 0, 653, 654, 7, 13, 0, 0, 654, 655, 7, 8, 0, 0, 655, 656, 7, 10, 0, 0, 656, 657, 7, 6, 0, 0, 657, 658, 7, 11, 0, 0, 658, 178, 1, 0, 0, 0, 659, 660, 7, 4, 0, 0, 660, 661, 7, 6, 0, 0, 661, 662, 7, 20, 0, 0, 662, 180, 1, 0, 0, 0, 663, 664, 7, 6, 0, 0, 664, 665, 7, 8, 0, 0, 665, 666, 7, 6, 0, 0, 666, 667, 7, 0, 0, 0, 667, 182, 1, 0, 0, 0, 668, 669, 7, 17, 0, 0, 669, 670, 7, 5, 0, 0, 670, 671, 7, 6, 0, 0, 671, 672, 7, 18, 0, 0, 672, 673, 7, 3, 0, 0, 673, 674, 7, 0, 0, 0, 674, 184, 1, 0, 0, 0, 675, 676, 7, 11, 0, 0, 676, 677, 7, 7, 0, 0, 677, 678, 7, 10, 0, 0, 678, 679, 7, 0, 0, 0, 679, 186, 1, 0, 0, 0, 680, 681, 7, 9, 0, 0, 681, 682, 7, 4, 0, 0, 682, 683, 7, 3, 0, 0, 683, 684, 7, 17, 0, 0, 684, 685, 7, 0, 0, 0, 685, 188, 1, 0, 0, 0, 686, 687, 7, 0, 0, 0, 687, 688, 7, 1, 0, 0, 688, 689, 7, 5, 0, 0, 689, 690, 7, 17, 0, 0, 690, 691, 7, 11, 0, 0, 691, 692, 7, 17, 0, 0, 692, 190, 1, 0, 0, 0, 693, 694, 7, 13, 0, 0, 694, 695, 7, 4, 0, 0, 695, 696, 7, 17, 0, 0, 696, 697, 7, 0, 0, 0, 697, 192, 1, 0, 0, 0, 698, 699, 7, 0, 0, 0, 699, 700, 7, 3, 0, 0, 700, 701, 7, 17, 0, 0, 701, 702, 7, 0, 0, 0, 702, 194, 1, 0, 0, 0, 703, 704, 7, 0, 0, 0, 704, 705, 7, 6, 0, 0, 705, 706, 7, 16, 0, 0, 706, 196, 1, 0, 0, 0, 707, 708, 7, 15, 0, 0, 708, 709, 7, 14, 0, 0, 709, 710, 7, 0, 0, 0, 710, 711, 7, 6, 0, 0, 711, 198, 1, 0, 0, 0, 712, 713, 7, 11, 0, 0, 713, 714, 7, 14, 0, 0, 714, 715, 7, 0, 0, 0, 715, 716, 7, 6, 0, 0, 716, 200, 1, 0, 0, 0, 717, 722, 5, 34, 0, 0, 718, 721, 3, 297, 148, 0, 719, 721, 3, 203, 101, 0, 720, 718, 1, 0, 0, 0, 720, 719, 1, 0, 0, 0, 721, 724, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 725, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 725, 736, 5, 34, 0, 0, 726, 731, 5, 39, 0, 0, 727, 730, 3, 277, 138, 0, 728, 730, 3, 203, 101, 0, 729, 727, 1, 0, 0, 0, 729, 728, 1, 0, 0, 0, 730, 733, 1, 0, 0, 0, 731, 729, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 734, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 734, 736, 5, 39, 0, 0, 735, 717, 1, 0, 0, 0, 735, 726, 1, 0, 0, 0, 736, 202, 1, 0, 0, 0, 737, 755, 5, 92, 0, 0, 738, 756, 7, 24, 0, 0, 739, 740, 7, 10, 0, 0, 740, 741, 3, 213, 106, 0, 741, 742, 3, 213, 106, 0, 742, 743, 3, 213, 106, 0, 743, 744, 3, 213, 106, 0, 744, 756, 1, 0, 0, 0, 745, 746, 7, 10, 0, 0, 746, 747, 3, 213, 106, 0, 747, 748, 3, 213, 106, 0, 748, 749, 3, 213, 106, 0, 749, 750, 3, 213, 106, 0, 750, 751, 3, 213, 106, 0, 751, 752, 3, 213, 106, 0, 752, 753, 3, 213, 106, 0, 753, 754, 3, 213, 106, 0, 754, 756, 1, 0, 0, 0, 755, 738, 1, 0, 0, 0, 755, 739, 1, 0, 0, 0, 755, 745, 1, 0, 0, 0, 756, 204, 1, 0, 0, 0, 757, 758, 5, 48, 0, 0, 758, 759, 5, 120, 0, 0, 759, 761, 1, 0, 0, 0, 760, 762, 3, 213, 106, 0, 761, 760, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 206, 1, 0, 0, 0, 765, 774, 3, 223, 111, 0, 766, 770, 3, 217, 108, 0, 767, 769, 3, 215, 107, 0, 768, 767, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, 765, 1, 0, 0, 0, 773, 766, 1, 0, 0, 0, 774, 208, 1, 0, 0, 0, 775, 777, 3, 223, 111, 0, 776, 778, 3, 221, 110, 0, 777, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 777, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 210, 1, 0, 0, 0, 781, 783, 7, 25, 0, 0, 782, 781, 1, 0, 0, 0, 783, 212, 1, 0, 0, 0, 784, 787, 3, 215, 107, 0, 785, 787, 3, 211, 105, 0, 786, 784, 1, 0, 0, 0, 786, 785, 1, 0, 0, 0, 787, 214, 1, 0, 0, 0, 788, 791, 3, 223, 111, 0, 789, 791, 3, 217, 108, 0, 790, 788, 1, 0, 0, 0, 790, 789, 1, 0, 0, 0, 791, 216, 1, 0, 0, 0, 792, 795, 3, 219, 109, 0, 793, 795, 2, 56, 57, 0, 794, 792, 1, 0, 0, 0, 794, 793, 1, 0, 0, 0, 795, 218, 1, 0, 0, 0, 796, 797, 2, 49, 55, 0, 797, 220, 1, 0, 0, 0, 798, 801, 3, 223, 111, 0, 799, 801, 3, 219, 109, 0, 800, 798, 1, 0, 0, 0, 800, 799, 1, 0, 0, 0, 801, 222, 1, 0, 0, 0, 802, 803, 5, 48, 0, 0, 803, 224, 1, 0, 0, 0, 804, 806, 3, 215, 107, 0, 805, 804, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 827, 1, 0, 0, 0, 809, 811, 3, 215, 107, 0, 810, 809, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 810, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 816, 5, 46, 0, 0, 815, 817, 3, 215, 107, 0, 816, 815, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 827, 1, 0, 0, 0, 820, 822, 5, 46, 0, 0, 821, 823, 3, 215, 107, 0, 822, 821, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 824, 822, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 827, 1, 0, 0, 0, 826, 805, 1, 0, 0, 0, 826, 810, 1, 0, 0, 0, 826, 820, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 830, 7, 0, 0, 0, 829, 831, 5, 45, 0, 0, 830, 829, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 833, 1, 0, 0, 0, 832, 834, 3, 215, 107, 0, 833, 832, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 833, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 226, 1, 0, 0, 0, 837, 839, 3, 215, 107, 0, 838, 837, 1, 0, 0, 0, 839, 842, 1, 0, 0, 0, 840, 838, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 843, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 843, 845, 5, 46, 0, 0, 844, 846, 3, 215, 107, 0, 845, 844, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 845, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 228, 1, 0, 0, 0, 849, 850, 7, 9, 0, 0, 850, 851, 7, 5, 0, 0, 851, 852, 7, 3, 0, 0, 852, 853, 7, 11, 0, 0, 853, 854, 7, 0, 0, 0, 854, 855, 7, 7, 0, 0, 855, 230, 1, 0, 0, 0, 856, 857, 7, 0, 0, 0, 857, 858, 7, 1, 0, 0, 858, 859, 7, 11, 0, 0, 859, 860, 7, 7, 0, 0, 860, 861, 7, 4, 0, 0, 861, 862, 7, 13, 0, 0, 862, 863, 7, 11, 0, 0, 863, 232, 1, 0, 0, 0, 864, 868, 3, 255, 127, 0, 865, 867, 3, 257, 128, 0, 866, 865, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 234, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 7, 13, 0, 0, 872, 873, 7, 8, 0, 0, 873, 874, 7, 6, 0, 0, 874, 875, 7, 17, 0, 0, 875, 876, 7, 11, 0, 0, 876, 877, 7, 7, 0, 0, 877, 878, 7, 4, 0, 0, 878, 879, 7, 5, 0, 0, 879, 880, 7, 6, 0, 0, 880, 881, 7, 11, 0, 0, 881, 236, 1, 0, 0, 0, 882, 883, 7, 16, 0, 0, 883, 884, 7, 8, 0, 0, 884, 238, 1, 0, 0, 0, 885, 886, 7, 9, 0, 0, 886, 887, 7, 8, 0, 0, 887, 888, 7, 7, 0, 0, 888, 240, 1, 0, 0, 0, 889, 890, 7, 7, 0, 0, 890, 891, 7, 0, 0, 0, 891, 892, 7, 26, 0, 0, 892, 893, 7, 10, 0, 0, 893, 894, 7, 5, 0, 0, 894, 895, 7, 7, 0, 0, 895, 896, 7, 0, 0, 0, 896, 242, 1, 0, 0, 0, 897, 898, 7, 10, 0, 0, 898, 899, 7, 6, 0, 0, 899, 900, 7, 5, 0, 0, 900, 901, 7, 26, 0, 0, 901, 902, 7, 10, 0, 0, 902, 903, 7, 0, 0, 0, 903, 244, 1, 0, 0, 0, 904, 905, 7, 12, 0, 0, 905, 906, 7, 4, 0, 0, 906, 907, 7, 6, 0, 0, 907, 908, 7, 16, 0, 0, 908, 909, 7, 4, 0, 0, 909, 910, 7, 11, 0, 0, 910, 911, 7, 8, 0, 0, 911, 912, 7, 7, 0, 0, 912, 913, 7, 20, 0, 0, 913, 246, 1, 0, 0, 0, 914, 915, 7, 17, 0, 0, 915, 916, 7, 13, 0, 0, 916, 917, 7, 4, 0, 0, 917, 918, 7, 3, 0, 0, 918, 919, 7, 4, 0, 0, 919, 920, 7, 7, 0, 0, 920, 248, 1, 0, 0, 0, 921, 922, 7, 8, 0, 0, 922, 923, 7, 9, 0, 0, 923, 250, 1, 0, 0, 0, 924, 925, 7, 4, 0, 0, 925, 926, 7, 16, 0, 0, 926, 927, 7, 16, 0, 0, 927, 252, 1, 0, 0, 0, 928, 929, 7, 16, 0, 0, 929, 930, 7, 7, 0, 0, 930, 931, 7, 8, 0, 0, 931, 932, 7, 2, 0, 0, 932, 254, 1, 0, 0, 0, 933, 936, 3, 305, 152, 0, 934, 936, 3, 293, 146, 0, 935, 933, 1, 0, 0, 0, 935, 934, 1, 0, 0, 0, 936, 256, 1, 0, 0, 0, 937, 940, 3, 273, 136, 0, 938, 940, 3, 289, 144, 0, 939, 937, 1, 0, 0, 0, 939, 938, 1, 0, 0, 0, 940, 258, 1, 0, 0, 0, 941, 945, 5, 96, 0, 0, 942, 944, 3, 269, 134, 0, 943, 942, 1, 0, 0, 0, 944, 947, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 948, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 948, 950, 5, 96, 0, 0, 949, 941, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 949, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 260, 1, 0, 0, 0, 953, 955, 3, 263, 131, 0, 954, 953, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 262, 1, 0, 0, 0, 958, 971, 3, 291, 145, 0, 959, 971, 3, 295, 147, 0, 960, 971, 3, 299, 149, 0, 961, 971, 3, 301, 150, 0, 962, 971, 3, 267, 133, 0, 963, 971, 3, 287, 143, 0, 964, 971, 3, 285, 142, 0, 965, 971, 3, 283, 141, 0, 966, 971, 3, 271, 135, 0, 967, 971, 3, 303, 151, 0, 968, 971, 7, 27, 0, 0, 969, 971, 3, 265, 132, 0, 970, 958, 1, 0, 0, 0, 970, 959, 1, 0, 0, 0, 970, 960, 1, 0, 0, 0, 970, 961, 1, 0, 0, 0, 970, 962, 1, 0, 0, 0, 970, 963, 1, 0, 0, 0, 970, 964, 1, 0, 0, 0, 970, 965, 1, 0, 0, 0, 970, 966, 1, 0, 0, 0, 970, 967, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 970, 969, 1, 0, 0, 0, 971, 264, 1, 0, 0, 0, 972, 973, 5, 47, 0, 0, 973, 974, 5, 42, 0, 0, 974, 980, 1, 0, 0, 0, 975, 979, 3, 275, 137, 0, 976, 977, 5, 42, 0, 0, 977, 979, 3, 281, 140, 0, 978, 975, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 979, 982, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 983, 1, 0, 0, 0, 982, 980, 1, 0, 0, 0, 983, 984, 5, 42, 0, 0, 984, 1002, 5, 47, 0, 0, 985, 986, 5, 47, 0, 0, 986, 987, 5, 47, 0, 0, 987, 991, 1, 0, 0, 0, 988, 990, 3, 279, 139, 0, 989, 988, 1, 0, 0, 0, 990, 993, 1, 0, 0, 0, 991, 989, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 995, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 994, 996, 3, 287, 143, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 999, 1, 0, 0, 0, 997, 1000, 3, 299, 149, 0, 998, 1000, 5, 0, 0, 1, 999, 997, 1, 0, 0, 0, 999, 998, 1, 0, 0, 0, 1000, 1002, 1, 0, 0, 0, 1001, 972, 1, 0, 0, 0, 1001, 985, 1, 0, 0, 0, 1002, 266, 1, 0, 0, 0, 1003, 1004, 7, 28, 0, 0, 1004, 268, 1, 0, 0, 0, 1005, 1006, 7, 29, 0, 0, 1006, 270, 1, 0, 0, 0, 1007, 1008, 7, 30, 0, 0, 1008, 272, 1, 0, 0, 0, 1009, 1010, 7, 31, 0, 0, 1010, 274, 1, 0, 0, 0, 1011, 1012, 7, 32, 0, 0, 1012, 276, 1, 0, 0, 0, 1013, 1014, 7, 33, 0, 0, 1014, 278, 1, 0, 0, 0, 1015, 1016, 7, 34, 0, 0, 1016, 280, 1, 0, 0, 0, 1017, 1018, 7, 35, 0, 0, 1018, 282, 1, 0, 0, 0, 1019, 1020, 7, 36, 0, 0, 1020, 284, 1, 0, 0, 0, 1021, 1022, 7, 37, 0, 0, 1022, 286, 1, 0, 0, 0, 1023, 1024, 7, 38, 0, 0, 1024, 288, 1, 0, 0, 0, 1025, 1026, 7, 39, 0, 0, 1026, 290, 1, 0, 0, 0, 1027, 1028, 7, 40, 0, 0, 1028, 292, 1, 0, 0, 0, 1029, 1030, 7, 41, 0, 0, 1030, 294, 1, 0, 0, 0, 1031, 1032, 7, 42, 0, 0, 1032, 296, 1, 0, 0, 0, 1033, 1034, 7, 43, 0, 0, 1034, 298, 1, 0, 0, 0, 1035, 1036, 7, 44, 0, 0, 1036, 300, 1, 0, 0, 0, 1037, 1038, 7, 45, 0, 0, 1038, 302, 1, 0, 0, 0, 1039, 1040, 7, 46, 0, 0, 1040, 304, 1, 0, 0, 0, 1041, 1042, 7, 47, 0, 0, 1042, 306, 1, 0, 0, 0, 38, 0, 720, 722, 729, 731, 735, 755, 763, 770, 773, 779, 782, 786, 790, 794, 800, 807, 812, 818, 824, 826, 830, 835, 840, 847, 868, 935, 939, 945, 951, 956, 970, 978, 980, 991, 995, 999, 1001, 0] \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.py new file mode 100644 index 00000000..6100f671 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.py @@ -0,0 +1,742 @@ +# Generated from Lcypher.g4 by ANTLR 4.13.2 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4,0,133,1043,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, + 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, + 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, + 2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, + 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, + 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45, + 7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51, + 2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58, + 7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64, + 2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71, + 7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77, + 2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84, + 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90, + 2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97, + 7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, + 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, + 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, + 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136, + 7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141, + 2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147, + 7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152, + 1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7, + 1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1,13,1,13, + 1,14,1,14,1,15,1,15,1,16,1,16,1,17,1,17,1,17,1,18,1,18,1,19,1,19, + 1,20,1,20,1,20,1,21,1,21,1,21,1,22,1,22,1,23,1,23,1,24,1,24,1,25, + 1,25,1,26,1,26,1,27,1,27,1,28,1,28,1,29,1,29,1,30,1,30,1,31,1,31, + 1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36,1,37,1,37,1,38, + 1,38,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1,43,1,44,1,44, + 1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46, + 1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48, + 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50, + 1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,53, + 1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55, + 1,55,1,55,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57, + 1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59, + 1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,62, + 1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65, + 1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68, + 1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70, + 1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74, + 1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76, + 1,76,1,76,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79, + 1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,87, + 1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89, + 1,89,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91, + 1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94, + 1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96, + 1,96,1,96,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,99,1,99, + 1,99,1,99,1,99,1,100,1,100,1,100,5,100,721,8,100,10,100,12,100,724, + 9,100,1,100,1,100,1,100,1,100,5,100,730,8,100,10,100,12,100,733, + 9,100,1,100,3,100,736,8,100,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,3,101,756,8,101,1,102,1,102,1,102,1,102,4,102,762,8,102,11, + 102,12,102,763,1,103,1,103,1,103,5,103,769,8,103,10,103,12,103,772, + 9,103,3,103,774,8,103,1,104,1,104,4,104,778,8,104,11,104,12,104, + 779,1,105,3,105,783,8,105,1,106,1,106,3,106,787,8,106,1,107,1,107, + 3,107,791,8,107,1,108,1,108,3,108,795,8,108,1,109,1,109,1,110,1, + 110,3,110,801,8,110,1,111,1,111,1,112,4,112,806,8,112,11,112,12, + 112,807,1,112,4,112,811,8,112,11,112,12,112,812,1,112,1,112,4,112, + 817,8,112,11,112,12,112,818,1,112,1,112,4,112,823,8,112,11,112,12, + 112,824,3,112,827,8,112,1,112,1,112,3,112,831,8,112,1,112,4,112, + 834,8,112,11,112,12,112,835,1,113,5,113,839,8,113,10,113,12,113, + 842,9,113,1,113,1,113,4,113,846,8,113,11,113,12,113,847,1,114,1, + 114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115, + 1,115,1,115,1,115,1,116,1,116,5,116,867,8,116,10,116,12,116,870, + 9,116,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117, + 1,117,1,118,1,118,1,118,1,119,1,119,1,119,1,119,1,120,1,120,1,120, + 1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121, + 1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122, + 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,125, + 1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,127,1,127,3,127, + 936,8,127,1,128,1,128,3,128,940,8,128,1,129,1,129,5,129,944,8,129, + 10,129,12,129,947,9,129,1,129,4,129,950,8,129,11,129,12,129,951, + 1,130,4,130,955,8,130,11,130,12,130,956,1,131,1,131,1,131,1,131, + 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,3,131,971,8,131, + 1,132,1,132,1,132,1,132,1,132,1,132,5,132,979,8,132,10,132,12,132, + 982,9,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,990,8,132,10, + 132,12,132,993,9,132,1,132,3,132,996,8,132,1,132,1,132,3,132,1000, + 8,132,3,132,1002,8,132,1,133,1,133,1,134,1,134,1,135,1,135,1,136, + 1,136,1,137,1,137,1,138,1,138,1,139,1,139,1,140,1,140,1,141,1,141, + 1,142,1,142,1,143,1,143,1,144,1,144,1,145,1,145,1,146,1,146,1,147, + 1,147,1,148,1,148,1,149,1,149,1,150,1,150,1,151,1,151,1,152,1,152, + 0,0,153,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12, + 25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23, + 47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34, + 69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45, + 91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,55, + 111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129, + 65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74, + 149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167, + 84,169,85,171,86,173,87,175,88,177,89,179,90,181,91,183,92,185,93, + 187,94,189,95,191,96,193,97,195,98,197,99,199,100,201,101,203,102, + 205,103,207,104,209,105,211,106,213,107,215,108,217,109,219,110, + 221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118, + 237,119,239,120,241,121,243,122,245,123,247,124,249,125,251,126, + 253,127,255,128,257,129,259,130,261,131,263,132,265,133,267,0,269, + 0,271,0,273,0,275,0,277,0,279,0,281,0,283,0,285,0,287,0,289,0,291, + 0,293,0,295,0,297,0,299,0,301,0,303,0,305,0,1,0,48,2,0,69,69,101, + 101,2,0,88,88,120,120,2,0,80,80,112,112,2,0,76,76,108,108,2,0,65, + 65,97,97,2,0,73,73,105,105,2,0,78,78,110,110,2,0,82,82,114,114,2, + 0,79,79,111,111,2,0,70,70,102,102,2,0,85,85,117,117,2,0,84,84,116, + 116,2,0,77,77,109,109,2,0,67,67,99,99,2,0,72,72,104,104,2,0,87,87, + 119,119,2,0,68,68,100,100,2,0,83,83,115,115,2,0,71,71,103,103,2, + 0,86,86,118,118,2,0,89,89,121,121,2,0,66,66,98,98,2,0,75,75,107, + 107,2,0,74,74,106,106,13,0,34,34,39,39,66,66,70,70,78,78,82,82,84, + 84,92,92,98,98,102,102,110,110,114,114,116,116,2,0,65,70,97,102, + 2,0,81,81,113,113,8,0,160,160,5760,5760,6158,6158,8192,8202,8232, + 8233,8239,8239,8287,8287,12288,12288,1,0,12,12,2,0,0,95,97,65535, + 1,0,30,30,429,0,48,57,65,90,95,95,97,122,170,170,181,181,183,183, + 186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750, + 768,884,886,887,890,893,902,906,908,908,910,929,931,1013,1015,1153, + 1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471, + 1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562, + 1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808, + 1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208, + 2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433, + 2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489, + 2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534, + 2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611, + 2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641, + 2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705, + 2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763, + 2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832, + 2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891, + 2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947, + 2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979, + 2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024, + 3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114, + 3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161, + 3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242, + 3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294, + 3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346, + 3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439, + 3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520, + 3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642, + 3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725, + 3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755, + 3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804, + 3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897, + 3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096, + 4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680, + 4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752, + 4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880, + 4882,4885,4888,4954,4957,4959,4969,4977,4992,5007,5024,5108,5121, + 5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908, + 5920,5940,5952,5971,5984,5996,5998,6000,6002,6003,6016,6099,6103, + 6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314, + 6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528, + 6571,6576,6601,6608,6618,6656,6683,6688,6750,6752,6780,6783,6793, + 6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168, + 7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957, + 7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029, + 8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140, + 8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256,8276, + 8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432, + 8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486, + 8486,8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584, + 11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559, + 11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686, + 11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728, + 11734,11736,11742,11744,11775,12293,12295,12321,12335,12337,12341, + 12344,12348,12353,12438,12441,12447,12449,12538,12540,12543,12549, + 12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908, + 40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612, + 42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894, + 42896,42899,42912,42922,43000,43047,43072,43123,43136,43204,43216, + 43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388, + 43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616, + 43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766, + 43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968, + 44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291, + 63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298, + 64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433, + 64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056, + 65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305, + 65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482, + 65487,65490,65495,65498,65500,2,0,0,41,43,65535,3,0,0,38,40,91,93, + 65535,3,0,0,9,11,12,14,65535,2,0,0,46,48,65535,1,0,29,29,1,0,28, + 28,1,0,13,13,17,0,36,36,162,165,1423,1423,1547,1547,2546,2547,2555, + 2555,2801,2801,3065,3065,3647,3647,6107,6107,8352,8378,43064,43064, + 65020,65020,65129,65129,65284,65284,65504,65505,65509,65510,1,0, + 32,32,6,0,95,95,8255,8256,8276,8276,65075,65076,65101,65103,65343, + 65343,1,0,9,9,3,0,0,33,35,91,93,65535,1,0,10,10,1,0,11,11,1,0,31, + 31,370,0,65,90,97,122,170,170,181,181,186,186,192,214,216,246,248, + 705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902, + 902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366, + 1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649, + 1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808, + 1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048, + 2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220, + 2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437, + 2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493, + 2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579, + 2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654, + 2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741, + 2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856, + 2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929, + 2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972, + 2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086, + 3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169, + 3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294, + 3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389, + 3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517, + 3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716, + 3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749, + 3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780, + 3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096, + 4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208, + 4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348, + 4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749, + 4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824, + 4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759, + 5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952, + 5969,5984,5996,5998,6000,6016,6067,6103,6103,6108,6108,6176,6263, + 6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528, + 6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987, + 7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401, + 7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005, + 8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064, + 8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155, + 8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450, + 8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486, + 8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264, + 11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557, + 11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680, + 11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726, + 11728,11734,11736,11742,12293,12295,12321,12329,12337,12341,12344, + 12348,12353,12438,12443,12447,12449,12538,12540,12543,12549,12589, + 12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960, + 42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606, + 42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896, + 42899,42912,42922,43000,43009,43011,43013,43015,43018,43020,43042, + 43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312, + 43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586, + 43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701, + 43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754, + 43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816, + 43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109, + 64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298, + 64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433, + 64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142, + 65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487, + 65490,65495,65498,65500,1070,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0, + 0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0, + 17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0, + 27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0, + 37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0, + 47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0, + 57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0, + 67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0, + 77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0, + 87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0, + 97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0, + 0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115, + 1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0, + 0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1, + 0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0, + 143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0, + 0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161, + 1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0, + 0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1, + 0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0, + 189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0, + 0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207, + 1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0, + 0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1, + 0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0, + 235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0, + 0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253, + 1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0, + 0,263,1,0,0,0,0,265,1,0,0,0,1,307,1,0,0,0,3,309,1,0,0,0,5,311,1, + 0,0,0,7,313,1,0,0,0,9,316,1,0,0,0,11,318,1,0,0,0,13,320,1,0,0,0, + 15,322,1,0,0,0,17,324,1,0,0,0,19,326,1,0,0,0,21,328,1,0,0,0,23,330, + 1,0,0,0,25,333,1,0,0,0,27,335,1,0,0,0,29,337,1,0,0,0,31,339,1,0, + 0,0,33,341,1,0,0,0,35,343,1,0,0,0,37,346,1,0,0,0,39,348,1,0,0,0, + 41,350,1,0,0,0,43,353,1,0,0,0,45,356,1,0,0,0,47,358,1,0,0,0,49,360, + 1,0,0,0,51,362,1,0,0,0,53,364,1,0,0,0,55,366,1,0,0,0,57,368,1,0, + 0,0,59,370,1,0,0,0,61,372,1,0,0,0,63,374,1,0,0,0,65,376,1,0,0,0, + 67,378,1,0,0,0,69,380,1,0,0,0,71,382,1,0,0,0,73,384,1,0,0,0,75,386, + 1,0,0,0,77,388,1,0,0,0,79,390,1,0,0,0,81,392,1,0,0,0,83,394,1,0, + 0,0,85,396,1,0,0,0,87,398,1,0,0,0,89,400,1,0,0,0,91,402,1,0,0,0, + 93,410,1,0,0,0,95,418,1,0,0,0,97,424,1,0,0,0,99,428,1,0,0,0,101, + 437,1,0,0,0,103,443,1,0,0,0,105,450,1,0,0,0,107,453,1,0,0,0,109, + 459,1,0,0,0,111,462,1,0,0,0,113,469,1,0,0,0,115,473,1,0,0,0,117, + 480,1,0,0,0,119,487,1,0,0,0,121,494,1,0,0,0,123,499,1,0,0,0,125, + 505,1,0,0,0,127,510,1,0,0,0,129,519,1,0,0,0,131,526,1,0,0,0,133, + 532,1,0,0,0,135,535,1,0,0,0,137,540,1,0,0,0,139,546,1,0,0,0,141, + 556,1,0,0,0,143,560,1,0,0,0,145,571,1,0,0,0,147,576,1,0,0,0,149, + 582,1,0,0,0,151,587,1,0,0,0,153,593,1,0,0,0,155,599,1,0,0,0,157, + 602,1,0,0,0,159,606,1,0,0,0,161,610,1,0,0,0,163,614,1,0,0,0,165, + 617,1,0,0,0,167,624,1,0,0,0,169,629,1,0,0,0,171,638,1,0,0,0,173, + 645,1,0,0,0,175,648,1,0,0,0,177,653,1,0,0,0,179,659,1,0,0,0,181, + 663,1,0,0,0,183,668,1,0,0,0,185,675,1,0,0,0,187,680,1,0,0,0,189, + 686,1,0,0,0,191,693,1,0,0,0,193,698,1,0,0,0,195,703,1,0,0,0,197, + 707,1,0,0,0,199,712,1,0,0,0,201,735,1,0,0,0,203,737,1,0,0,0,205, + 757,1,0,0,0,207,773,1,0,0,0,209,775,1,0,0,0,211,782,1,0,0,0,213, + 786,1,0,0,0,215,790,1,0,0,0,217,794,1,0,0,0,219,796,1,0,0,0,221, + 800,1,0,0,0,223,802,1,0,0,0,225,826,1,0,0,0,227,840,1,0,0,0,229, + 849,1,0,0,0,231,856,1,0,0,0,233,864,1,0,0,0,235,871,1,0,0,0,237, + 882,1,0,0,0,239,885,1,0,0,0,241,889,1,0,0,0,243,897,1,0,0,0,245, + 904,1,0,0,0,247,914,1,0,0,0,249,921,1,0,0,0,251,924,1,0,0,0,253, + 928,1,0,0,0,255,935,1,0,0,0,257,939,1,0,0,0,259,949,1,0,0,0,261, + 954,1,0,0,0,263,970,1,0,0,0,265,1001,1,0,0,0,267,1003,1,0,0,0,269, + 1005,1,0,0,0,271,1007,1,0,0,0,273,1009,1,0,0,0,275,1011,1,0,0,0, + 277,1013,1,0,0,0,279,1015,1,0,0,0,281,1017,1,0,0,0,283,1019,1,0, + 0,0,285,1021,1,0,0,0,287,1023,1,0,0,0,289,1025,1,0,0,0,291,1027, + 1,0,0,0,293,1029,1,0,0,0,295,1031,1,0,0,0,297,1033,1,0,0,0,299,1035, + 1,0,0,0,301,1037,1,0,0,0,303,1039,1,0,0,0,305,1041,1,0,0,0,307,308, + 5,59,0,0,308,2,1,0,0,0,309,310,5,44,0,0,310,4,1,0,0,0,311,312,5, + 61,0,0,312,6,1,0,0,0,313,314,5,43,0,0,314,315,5,61,0,0,315,8,1,0, + 0,0,316,317,5,42,0,0,317,10,1,0,0,0,318,319,5,40,0,0,319,12,1,0, + 0,0,320,321,5,41,0,0,321,14,1,0,0,0,322,323,5,91,0,0,323,16,1,0, + 0,0,324,325,5,93,0,0,325,18,1,0,0,0,326,327,5,58,0,0,327,20,1,0, + 0,0,328,329,5,124,0,0,329,22,1,0,0,0,330,331,5,46,0,0,331,332,5, + 46,0,0,332,24,1,0,0,0,333,334,5,43,0,0,334,26,1,0,0,0,335,336,5, + 45,0,0,336,28,1,0,0,0,337,338,5,47,0,0,338,30,1,0,0,0,339,340,5, + 37,0,0,340,32,1,0,0,0,341,342,5,94,0,0,342,34,1,0,0,0,343,344,5, + 60,0,0,344,345,5,62,0,0,345,36,1,0,0,0,346,347,5,60,0,0,347,38,1, + 0,0,0,348,349,5,62,0,0,349,40,1,0,0,0,350,351,5,60,0,0,351,352,5, + 61,0,0,352,42,1,0,0,0,353,354,5,62,0,0,354,355,5,61,0,0,355,44,1, + 0,0,0,356,357,5,46,0,0,357,46,1,0,0,0,358,359,5,123,0,0,359,48,1, + 0,0,0,360,361,5,125,0,0,361,50,1,0,0,0,362,363,5,36,0,0,363,52,1, + 0,0,0,364,365,5,10216,0,0,365,54,1,0,0,0,366,367,5,12296,0,0,367, + 56,1,0,0,0,368,369,5,65124,0,0,369,58,1,0,0,0,370,371,5,65308,0, + 0,371,60,1,0,0,0,372,373,5,10217,0,0,373,62,1,0,0,0,374,375,5,12297, + 0,0,375,64,1,0,0,0,376,377,5,65125,0,0,377,66,1,0,0,0,378,379,5, + 65310,0,0,379,68,1,0,0,0,380,381,5,173,0,0,381,70,1,0,0,0,382,383, + 5,8208,0,0,383,72,1,0,0,0,384,385,5,8209,0,0,385,74,1,0,0,0,386, + 387,5,8210,0,0,387,76,1,0,0,0,388,389,5,8211,0,0,389,78,1,0,0,0, + 390,391,5,8212,0,0,391,80,1,0,0,0,392,393,5,8213,0,0,393,82,1,0, + 0,0,394,395,5,8722,0,0,395,84,1,0,0,0,396,397,5,65112,0,0,397,86, + 1,0,0,0,398,399,5,65123,0,0,399,88,1,0,0,0,400,401,5,65293,0,0,401, + 90,1,0,0,0,402,403,7,0,0,0,403,404,7,1,0,0,404,405,7,2,0,0,405,406, + 7,3,0,0,406,407,7,4,0,0,407,408,7,5,0,0,408,409,7,6,0,0,409,92,1, + 0,0,0,410,411,7,2,0,0,411,412,7,7,0,0,412,413,7,8,0,0,413,414,7, + 9,0,0,414,415,7,5,0,0,415,416,7,3,0,0,416,417,7,0,0,0,417,94,1,0, + 0,0,418,419,7,10,0,0,419,420,7,6,0,0,420,421,7,5,0,0,421,422,7,8, + 0,0,422,423,7,6,0,0,423,96,1,0,0,0,424,425,7,4,0,0,425,426,7,3,0, + 0,426,427,7,3,0,0,427,98,1,0,0,0,428,429,7,8,0,0,429,430,7,2,0,0, + 430,431,7,11,0,0,431,432,7,5,0,0,432,433,7,8,0,0,433,434,7,6,0,0, + 434,435,7,4,0,0,435,436,7,3,0,0,436,100,1,0,0,0,437,438,7,12,0,0, + 438,439,7,4,0,0,439,440,7,11,0,0,440,441,7,13,0,0,441,442,7,14,0, + 0,442,102,1,0,0,0,443,444,7,10,0,0,444,445,7,6,0,0,445,446,7,15, + 0,0,446,447,7,5,0,0,447,448,7,6,0,0,448,449,7,16,0,0,449,104,1,0, + 0,0,450,451,7,4,0,0,451,452,7,17,0,0,452,106,1,0,0,0,453,454,7,12, + 0,0,454,455,7,0,0,0,455,456,7,7,0,0,456,457,7,18,0,0,457,458,7,0, + 0,0,458,108,1,0,0,0,459,460,7,8,0,0,460,461,7,6,0,0,461,110,1,0, + 0,0,462,463,7,13,0,0,463,464,7,7,0,0,464,465,7,0,0,0,465,466,7,4, + 0,0,466,467,7,11,0,0,467,468,7,0,0,0,468,112,1,0,0,0,469,470,7,17, + 0,0,470,471,7,0,0,0,471,472,7,11,0,0,472,114,1,0,0,0,473,474,7,16, + 0,0,474,475,7,0,0,0,475,476,7,11,0,0,476,477,7,4,0,0,477,478,7,13, + 0,0,478,479,7,14,0,0,479,116,1,0,0,0,480,481,7,16,0,0,481,482,7, + 0,0,0,482,483,7,3,0,0,483,484,7,0,0,0,484,485,7,11,0,0,485,486,7, + 0,0,0,486,118,1,0,0,0,487,488,7,7,0,0,488,489,7,0,0,0,489,490,7, + 12,0,0,490,491,7,8,0,0,491,492,7,19,0,0,492,493,7,0,0,0,493,120, + 1,0,0,0,494,495,7,13,0,0,495,496,7,4,0,0,496,497,7,3,0,0,497,498, + 7,3,0,0,498,122,1,0,0,0,499,500,7,20,0,0,500,501,7,5,0,0,501,502, + 7,0,0,0,502,503,7,3,0,0,503,504,7,16,0,0,504,124,1,0,0,0,505,506, + 7,15,0,0,506,507,7,5,0,0,507,508,7,11,0,0,508,509,7,14,0,0,509,126, + 1,0,0,0,510,511,7,16,0,0,511,512,7,5,0,0,512,513,7,17,0,0,513,514, + 7,11,0,0,514,515,7,5,0,0,515,516,7,6,0,0,516,517,7,13,0,0,517,518, + 7,11,0,0,518,128,1,0,0,0,519,520,7,7,0,0,520,521,7,0,0,0,521,522, + 7,11,0,0,522,523,7,10,0,0,523,524,7,7,0,0,524,525,7,6,0,0,525,130, + 1,0,0,0,526,527,7,8,0,0,527,528,7,7,0,0,528,529,7,16,0,0,529,530, + 7,0,0,0,530,531,7,7,0,0,531,132,1,0,0,0,532,533,7,21,0,0,533,534, + 7,20,0,0,534,134,1,0,0,0,535,536,7,17,0,0,536,537,7,22,0,0,537,538, + 7,5,0,0,538,539,7,2,0,0,539,136,1,0,0,0,540,541,7,3,0,0,541,542, + 7,5,0,0,542,543,7,12,0,0,543,544,7,5,0,0,544,545,7,11,0,0,545,138, + 1,0,0,0,546,547,7,4,0,0,547,548,7,17,0,0,548,549,7,13,0,0,549,550, + 7,0,0,0,550,551,7,6,0,0,551,552,7,16,0,0,552,553,7,5,0,0,553,554, + 7,6,0,0,554,555,7,18,0,0,555,140,1,0,0,0,556,557,7,4,0,0,557,558, + 7,17,0,0,558,559,7,13,0,0,559,142,1,0,0,0,560,561,7,16,0,0,561,562, + 7,0,0,0,562,563,7,17,0,0,563,564,7,13,0,0,564,565,7,0,0,0,565,566, + 7,6,0,0,566,567,7,16,0,0,567,568,7,5,0,0,568,569,7,6,0,0,569,570, + 7,18,0,0,570,144,1,0,0,0,571,572,7,16,0,0,572,573,7,0,0,0,573,574, + 7,17,0,0,574,575,7,13,0,0,575,146,1,0,0,0,576,577,7,10,0,0,577,578, + 7,17,0,0,578,579,7,5,0,0,579,580,7,6,0,0,580,581,7,18,0,0,581,148, + 1,0,0,0,582,583,7,23,0,0,583,584,7,8,0,0,584,585,7,5,0,0,585,586, + 7,6,0,0,586,150,1,0,0,0,587,588,7,17,0,0,588,589,7,11,0,0,589,590, + 7,4,0,0,590,591,7,7,0,0,591,592,7,11,0,0,592,152,1,0,0,0,593,594, + 7,15,0,0,594,595,7,14,0,0,595,596,7,0,0,0,596,597,7,7,0,0,597,598, + 7,0,0,0,598,154,1,0,0,0,599,600,7,8,0,0,600,601,7,7,0,0,601,156, + 1,0,0,0,602,603,7,1,0,0,603,604,7,8,0,0,604,605,7,7,0,0,605,158, + 1,0,0,0,606,607,7,4,0,0,607,608,7,6,0,0,608,609,7,16,0,0,609,160, + 1,0,0,0,610,611,7,6,0,0,611,612,7,8,0,0,612,613,7,11,0,0,613,162, + 1,0,0,0,614,615,7,5,0,0,615,616,7,6,0,0,616,164,1,0,0,0,617,618, + 7,17,0,0,618,619,7,11,0,0,619,620,7,4,0,0,620,621,7,7,0,0,621,622, + 7,11,0,0,622,623,7,17,0,0,623,166,1,0,0,0,624,625,7,0,0,0,625,626, + 7,6,0,0,626,627,7,16,0,0,627,628,7,17,0,0,628,168,1,0,0,0,629,630, + 7,13,0,0,630,631,7,8,0,0,631,632,7,6,0,0,632,633,7,11,0,0,633,634, + 7,4,0,0,634,635,7,5,0,0,635,636,7,6,0,0,636,637,7,17,0,0,637,170, + 1,0,0,0,638,639,7,7,0,0,639,640,7,0,0,0,640,641,7,18,0,0,641,642, + 7,0,0,0,642,643,7,1,0,0,643,644,7,2,0,0,644,172,1,0,0,0,645,646, + 7,5,0,0,646,647,7,17,0,0,647,174,1,0,0,0,648,649,7,6,0,0,649,650, + 7,10,0,0,650,651,7,3,0,0,651,652,7,3,0,0,652,176,1,0,0,0,653,654, + 7,13,0,0,654,655,7,8,0,0,655,656,7,10,0,0,656,657,7,6,0,0,657,658, + 7,11,0,0,658,178,1,0,0,0,659,660,7,4,0,0,660,661,7,6,0,0,661,662, + 7,20,0,0,662,180,1,0,0,0,663,664,7,6,0,0,664,665,7,8,0,0,665,666, + 7,6,0,0,666,667,7,0,0,0,667,182,1,0,0,0,668,669,7,17,0,0,669,670, + 7,5,0,0,670,671,7,6,0,0,671,672,7,18,0,0,672,673,7,3,0,0,673,674, + 7,0,0,0,674,184,1,0,0,0,675,676,7,11,0,0,676,677,7,7,0,0,677,678, + 7,10,0,0,678,679,7,0,0,0,679,186,1,0,0,0,680,681,7,9,0,0,681,682, + 7,4,0,0,682,683,7,3,0,0,683,684,7,17,0,0,684,685,7,0,0,0,685,188, + 1,0,0,0,686,687,7,0,0,0,687,688,7,1,0,0,688,689,7,5,0,0,689,690, + 7,17,0,0,690,691,7,11,0,0,691,692,7,17,0,0,692,190,1,0,0,0,693,694, + 7,13,0,0,694,695,7,4,0,0,695,696,7,17,0,0,696,697,7,0,0,0,697,192, + 1,0,0,0,698,699,7,0,0,0,699,700,7,3,0,0,700,701,7,17,0,0,701,702, + 7,0,0,0,702,194,1,0,0,0,703,704,7,0,0,0,704,705,7,6,0,0,705,706, + 7,16,0,0,706,196,1,0,0,0,707,708,7,15,0,0,708,709,7,14,0,0,709,710, + 7,0,0,0,710,711,7,6,0,0,711,198,1,0,0,0,712,713,7,11,0,0,713,714, + 7,14,0,0,714,715,7,0,0,0,715,716,7,6,0,0,716,200,1,0,0,0,717,722, + 5,34,0,0,718,721,3,297,148,0,719,721,3,203,101,0,720,718,1,0,0,0, + 720,719,1,0,0,0,721,724,1,0,0,0,722,720,1,0,0,0,722,723,1,0,0,0, + 723,725,1,0,0,0,724,722,1,0,0,0,725,736,5,34,0,0,726,731,5,39,0, + 0,727,730,3,277,138,0,728,730,3,203,101,0,729,727,1,0,0,0,729,728, + 1,0,0,0,730,733,1,0,0,0,731,729,1,0,0,0,731,732,1,0,0,0,732,734, + 1,0,0,0,733,731,1,0,0,0,734,736,5,39,0,0,735,717,1,0,0,0,735,726, + 1,0,0,0,736,202,1,0,0,0,737,755,5,92,0,0,738,756,7,24,0,0,739,740, + 7,10,0,0,740,741,3,213,106,0,741,742,3,213,106,0,742,743,3,213,106, + 0,743,744,3,213,106,0,744,756,1,0,0,0,745,746,7,10,0,0,746,747,3, + 213,106,0,747,748,3,213,106,0,748,749,3,213,106,0,749,750,3,213, + 106,0,750,751,3,213,106,0,751,752,3,213,106,0,752,753,3,213,106, + 0,753,754,3,213,106,0,754,756,1,0,0,0,755,738,1,0,0,0,755,739,1, + 0,0,0,755,745,1,0,0,0,756,204,1,0,0,0,757,758,5,48,0,0,758,759,5, + 120,0,0,759,761,1,0,0,0,760,762,3,213,106,0,761,760,1,0,0,0,762, + 763,1,0,0,0,763,761,1,0,0,0,763,764,1,0,0,0,764,206,1,0,0,0,765, + 774,3,223,111,0,766,770,3,217,108,0,767,769,3,215,107,0,768,767, + 1,0,0,0,769,772,1,0,0,0,770,768,1,0,0,0,770,771,1,0,0,0,771,774, + 1,0,0,0,772,770,1,0,0,0,773,765,1,0,0,0,773,766,1,0,0,0,774,208, + 1,0,0,0,775,777,3,223,111,0,776,778,3,221,110,0,777,776,1,0,0,0, + 778,779,1,0,0,0,779,777,1,0,0,0,779,780,1,0,0,0,780,210,1,0,0,0, + 781,783,7,25,0,0,782,781,1,0,0,0,783,212,1,0,0,0,784,787,3,215,107, + 0,785,787,3,211,105,0,786,784,1,0,0,0,786,785,1,0,0,0,787,214,1, + 0,0,0,788,791,3,223,111,0,789,791,3,217,108,0,790,788,1,0,0,0,790, + 789,1,0,0,0,791,216,1,0,0,0,792,795,3,219,109,0,793,795,2,56,57, + 0,794,792,1,0,0,0,794,793,1,0,0,0,795,218,1,0,0,0,796,797,2,49,55, + 0,797,220,1,0,0,0,798,801,3,223,111,0,799,801,3,219,109,0,800,798, + 1,0,0,0,800,799,1,0,0,0,801,222,1,0,0,0,802,803,5,48,0,0,803,224, + 1,0,0,0,804,806,3,215,107,0,805,804,1,0,0,0,806,807,1,0,0,0,807, + 805,1,0,0,0,807,808,1,0,0,0,808,827,1,0,0,0,809,811,3,215,107,0, + 810,809,1,0,0,0,811,812,1,0,0,0,812,810,1,0,0,0,812,813,1,0,0,0, + 813,814,1,0,0,0,814,816,5,46,0,0,815,817,3,215,107,0,816,815,1,0, + 0,0,817,818,1,0,0,0,818,816,1,0,0,0,818,819,1,0,0,0,819,827,1,0, + 0,0,820,822,5,46,0,0,821,823,3,215,107,0,822,821,1,0,0,0,823,824, + 1,0,0,0,824,822,1,0,0,0,824,825,1,0,0,0,825,827,1,0,0,0,826,805, + 1,0,0,0,826,810,1,0,0,0,826,820,1,0,0,0,827,828,1,0,0,0,828,830, + 7,0,0,0,829,831,5,45,0,0,830,829,1,0,0,0,830,831,1,0,0,0,831,833, + 1,0,0,0,832,834,3,215,107,0,833,832,1,0,0,0,834,835,1,0,0,0,835, + 833,1,0,0,0,835,836,1,0,0,0,836,226,1,0,0,0,837,839,3,215,107,0, + 838,837,1,0,0,0,839,842,1,0,0,0,840,838,1,0,0,0,840,841,1,0,0,0, + 841,843,1,0,0,0,842,840,1,0,0,0,843,845,5,46,0,0,844,846,3,215,107, + 0,845,844,1,0,0,0,846,847,1,0,0,0,847,845,1,0,0,0,847,848,1,0,0, + 0,848,228,1,0,0,0,849,850,7,9,0,0,850,851,7,5,0,0,851,852,7,3,0, + 0,852,853,7,11,0,0,853,854,7,0,0,0,854,855,7,7,0,0,855,230,1,0,0, + 0,856,857,7,0,0,0,857,858,7,1,0,0,858,859,7,11,0,0,859,860,7,7,0, + 0,860,861,7,4,0,0,861,862,7,13,0,0,862,863,7,11,0,0,863,232,1,0, + 0,0,864,868,3,255,127,0,865,867,3,257,128,0,866,865,1,0,0,0,867, + 870,1,0,0,0,868,866,1,0,0,0,868,869,1,0,0,0,869,234,1,0,0,0,870, + 868,1,0,0,0,871,872,7,13,0,0,872,873,7,8,0,0,873,874,7,6,0,0,874, + 875,7,17,0,0,875,876,7,11,0,0,876,877,7,7,0,0,877,878,7,4,0,0,878, + 879,7,5,0,0,879,880,7,6,0,0,880,881,7,11,0,0,881,236,1,0,0,0,882, + 883,7,16,0,0,883,884,7,8,0,0,884,238,1,0,0,0,885,886,7,9,0,0,886, + 887,7,8,0,0,887,888,7,7,0,0,888,240,1,0,0,0,889,890,7,7,0,0,890, + 891,7,0,0,0,891,892,7,26,0,0,892,893,7,10,0,0,893,894,7,5,0,0,894, + 895,7,7,0,0,895,896,7,0,0,0,896,242,1,0,0,0,897,898,7,10,0,0,898, + 899,7,6,0,0,899,900,7,5,0,0,900,901,7,26,0,0,901,902,7,10,0,0,902, + 903,7,0,0,0,903,244,1,0,0,0,904,905,7,12,0,0,905,906,7,4,0,0,906, + 907,7,6,0,0,907,908,7,16,0,0,908,909,7,4,0,0,909,910,7,11,0,0,910, + 911,7,8,0,0,911,912,7,7,0,0,912,913,7,20,0,0,913,246,1,0,0,0,914, + 915,7,17,0,0,915,916,7,13,0,0,916,917,7,4,0,0,917,918,7,3,0,0,918, + 919,7,4,0,0,919,920,7,7,0,0,920,248,1,0,0,0,921,922,7,8,0,0,922, + 923,7,9,0,0,923,250,1,0,0,0,924,925,7,4,0,0,925,926,7,16,0,0,926, + 927,7,16,0,0,927,252,1,0,0,0,928,929,7,16,0,0,929,930,7,7,0,0,930, + 931,7,8,0,0,931,932,7,2,0,0,932,254,1,0,0,0,933,936,3,305,152,0, + 934,936,3,293,146,0,935,933,1,0,0,0,935,934,1,0,0,0,936,256,1,0, + 0,0,937,940,3,273,136,0,938,940,3,289,144,0,939,937,1,0,0,0,939, + 938,1,0,0,0,940,258,1,0,0,0,941,945,5,96,0,0,942,944,3,269,134,0, + 943,942,1,0,0,0,944,947,1,0,0,0,945,943,1,0,0,0,945,946,1,0,0,0, + 946,948,1,0,0,0,947,945,1,0,0,0,948,950,5,96,0,0,949,941,1,0,0,0, + 950,951,1,0,0,0,951,949,1,0,0,0,951,952,1,0,0,0,952,260,1,0,0,0, + 953,955,3,263,131,0,954,953,1,0,0,0,955,956,1,0,0,0,956,954,1,0, + 0,0,956,957,1,0,0,0,957,262,1,0,0,0,958,971,3,291,145,0,959,971, + 3,295,147,0,960,971,3,299,149,0,961,971,3,301,150,0,962,971,3,267, + 133,0,963,971,3,287,143,0,964,971,3,285,142,0,965,971,3,283,141, + 0,966,971,3,271,135,0,967,971,3,303,151,0,968,971,7,27,0,0,969,971, + 3,265,132,0,970,958,1,0,0,0,970,959,1,0,0,0,970,960,1,0,0,0,970, + 961,1,0,0,0,970,962,1,0,0,0,970,963,1,0,0,0,970,964,1,0,0,0,970, + 965,1,0,0,0,970,966,1,0,0,0,970,967,1,0,0,0,970,968,1,0,0,0,970, + 969,1,0,0,0,971,264,1,0,0,0,972,973,5,47,0,0,973,974,5,42,0,0,974, + 980,1,0,0,0,975,979,3,275,137,0,976,977,5,42,0,0,977,979,3,281,140, + 0,978,975,1,0,0,0,978,976,1,0,0,0,979,982,1,0,0,0,980,978,1,0,0, + 0,980,981,1,0,0,0,981,983,1,0,0,0,982,980,1,0,0,0,983,984,5,42,0, + 0,984,1002,5,47,0,0,985,986,5,47,0,0,986,987,5,47,0,0,987,991,1, + 0,0,0,988,990,3,279,139,0,989,988,1,0,0,0,990,993,1,0,0,0,991,989, + 1,0,0,0,991,992,1,0,0,0,992,995,1,0,0,0,993,991,1,0,0,0,994,996, + 3,287,143,0,995,994,1,0,0,0,995,996,1,0,0,0,996,999,1,0,0,0,997, + 1000,3,299,149,0,998,1000,5,0,0,1,999,997,1,0,0,0,999,998,1,0,0, + 0,1000,1002,1,0,0,0,1001,972,1,0,0,0,1001,985,1,0,0,0,1002,266,1, + 0,0,0,1003,1004,7,28,0,0,1004,268,1,0,0,0,1005,1006,7,29,0,0,1006, + 270,1,0,0,0,1007,1008,7,30,0,0,1008,272,1,0,0,0,1009,1010,7,31,0, + 0,1010,274,1,0,0,0,1011,1012,7,32,0,0,1012,276,1,0,0,0,1013,1014, + 7,33,0,0,1014,278,1,0,0,0,1015,1016,7,34,0,0,1016,280,1,0,0,0,1017, + 1018,7,35,0,0,1018,282,1,0,0,0,1019,1020,7,36,0,0,1020,284,1,0,0, + 0,1021,1022,7,37,0,0,1022,286,1,0,0,0,1023,1024,7,38,0,0,1024,288, + 1,0,0,0,1025,1026,7,39,0,0,1026,290,1,0,0,0,1027,1028,7,40,0,0,1028, + 292,1,0,0,0,1029,1030,7,41,0,0,1030,294,1,0,0,0,1031,1032,7,42,0, + 0,1032,296,1,0,0,0,1033,1034,7,43,0,0,1034,298,1,0,0,0,1035,1036, + 7,44,0,0,1036,300,1,0,0,0,1037,1038,7,45,0,0,1038,302,1,0,0,0,1039, + 1040,7,46,0,0,1040,304,1,0,0,0,1041,1042,7,47,0,0,1042,306,1,0,0, + 0,38,0,720,722,729,731,735,755,763,770,773,779,782,786,790,794,800, + 807,812,818,824,826,830,835,840,847,868,935,939,945,951,956,970, + 978,980,991,995,999,1001,0 + ] + +class LcypherLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + T__0 = 1 + T__1 = 2 + T__2 = 3 + T__3 = 4 + T__4 = 5 + T__5 = 6 + T__6 = 7 + T__7 = 8 + T__8 = 9 + T__9 = 10 + T__10 = 11 + T__11 = 12 + T__12 = 13 + T__13 = 14 + T__14 = 15 + T__15 = 16 + T__16 = 17 + T__17 = 18 + T__18 = 19 + T__19 = 20 + T__20 = 21 + T__21 = 22 + T__22 = 23 + T__23 = 24 + T__24 = 25 + T__25 = 26 + T__26 = 27 + T__27 = 28 + T__28 = 29 + T__29 = 30 + T__30 = 31 + T__31 = 32 + T__32 = 33 + T__33 = 34 + T__34 = 35 + T__35 = 36 + T__36 = 37 + T__37 = 38 + T__38 = 39 + T__39 = 40 + T__40 = 41 + T__41 = 42 + T__42 = 43 + T__43 = 44 + T__44 = 45 + EXPLAIN = 46 + PROFILE = 47 + UNION = 48 + ALL = 49 + OPTIONAL_ = 50 + MATCH = 51 + UNWIND = 52 + AS = 53 + MERGE = 54 + ON = 55 + CREATE = 56 + SET = 57 + DETACH = 58 + DELETE_ = 59 + REMOVE = 60 + CALL = 61 + YIELD = 62 + WITH = 63 + DISTINCT = 64 + RETURN = 65 + ORDER = 66 + BY = 67 + L_SKIP = 68 + LIMIT = 69 + ASCENDING = 70 + ASC = 71 + DESCENDING = 72 + DESC = 73 + USING = 74 + JOIN = 75 + START = 76 + WHERE = 77 + OR = 78 + XOR = 79 + AND = 80 + NOT = 81 + IN = 82 + STARTS = 83 + ENDS = 84 + CONTAINS = 85 + REGEXP = 86 + IS = 87 + NULL_ = 88 + COUNT = 89 + ANY = 90 + NONE = 91 + SINGLE = 92 + TRUE_ = 93 + FALSE_ = 94 + EXISTS = 95 + CASE = 96 + ELSE = 97 + END = 98 + WHEN = 99 + THEN = 100 + StringLiteral = 101 + EscapedChar = 102 + HexInteger = 103 + DecimalInteger = 104 + OctalInteger = 105 + HexLetter = 106 + HexDigit = 107 + Digit = 108 + NonZeroDigit = 109 + NonZeroOctDigit = 110 + OctDigit = 111 + ZeroDigit = 112 + ExponentDecimalReal = 113 + RegularDecimalReal = 114 + FILTER = 115 + EXTRACT = 116 + UnescapedSymbolicName = 117 + CONSTRAINT = 118 + DO = 119 + FOR = 120 + REQUIRE = 121 + UNIQUE = 122 + MANDATORY = 123 + SCALAR = 124 + OF = 125 + ADD = 126 + DROP = 127 + IdentifierStart = 128 + IdentifierPart = 129 + EscapedSymbolicName = 130 + SP = 131 + WHITESPACE = 132 + Comment = 133 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "';'", "','", "'='", "'+='", "'*'", "'('", "')'", "'['", "']'", + "':'", "'|'", "'..'", "'+'", "'-'", "'/'", "'%'", "'^'", "'<>'", + "'<'", "'>'", "'<='", "'>='", "'.'", "'{'", "'}'", "'$'", "'\\u27E8'", + "'\\u3008'", "'\\uFE64'", "'\\uFF1C'", "'\\u27E9'", "'\\u3009'", + "'\\uFE65'", "'\\uFF1E'", "'\\u00AD'", "'\\u2010'", "'\\u2011'", + "'\\u2012'", "'\\u2013'", "'\\u2014'", "'\\u2015'", "'\\u2212'", + "'\\uFE58'", "'\\uFE63'", "'\\uFF0D'", "'0'" ] + + symbolicNames = [ "", + "EXPLAIN", "PROFILE", "UNION", "ALL", "OPTIONAL_", "MATCH", + "UNWIND", "AS", "MERGE", "ON", "CREATE", "SET", "DETACH", "DELETE_", + "REMOVE", "CALL", "YIELD", "WITH", "DISTINCT", "RETURN", "ORDER", + "BY", "L_SKIP", "LIMIT", "ASCENDING", "ASC", "DESCENDING", "DESC", + "USING", "JOIN", "START", "WHERE", "OR", "XOR", "AND", "NOT", + "IN", "STARTS", "ENDS", "CONTAINS", "REGEXP", "IS", "NULL_", + "COUNT", "ANY", "NONE", "SINGLE", "TRUE_", "FALSE_", "EXISTS", + "CASE", "ELSE", "END", "WHEN", "THEN", "StringLiteral", "EscapedChar", + "HexInteger", "DecimalInteger", "OctalInteger", "HexLetter", + "HexDigit", "Digit", "NonZeroDigit", "NonZeroOctDigit", "OctDigit", + "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", "FILTER", + "EXTRACT", "UnescapedSymbolicName", "CONSTRAINT", "DO", "FOR", + "REQUIRE", "UNIQUE", "MANDATORY", "SCALAR", "OF", "ADD", "DROP", + "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", + "SP", "WHITESPACE", "Comment" ] + + ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", + "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", + "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", + "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", + "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", + "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", + "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", + "T__44", "EXPLAIN", "PROFILE", "UNION", "ALL", "OPTIONAL_", + "MATCH", "UNWIND", "AS", "MERGE", "ON", "CREATE", "SET", + "DETACH", "DELETE_", "REMOVE", "CALL", "YIELD", "WITH", + "DISTINCT", "RETURN", "ORDER", "BY", "L_SKIP", "LIMIT", + "ASCENDING", "ASC", "DESCENDING", "DESC", "USING", "JOIN", + "START", "WHERE", "OR", "XOR", "AND", "NOT", "IN", "STARTS", + "ENDS", "CONTAINS", "REGEXP", "IS", "NULL_", "COUNT", + "ANY", "NONE", "SINGLE", "TRUE_", "FALSE_", "EXISTS", + "CASE", "ELSE", "END", "WHEN", "THEN", "StringLiteral", + "EscapedChar", "HexInteger", "DecimalInteger", "OctalInteger", + "HexLetter", "HexDigit", "Digit", "NonZeroDigit", "NonZeroOctDigit", + "OctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", + "FILTER", "EXTRACT", "UnescapedSymbolicName", "CONSTRAINT", + "DO", "FOR", "REQUIRE", "UNIQUE", "MANDATORY", "SCALAR", + "OF", "ADD", "DROP", "IdentifierStart", "IdentifierPart", + "EscapedSymbolicName", "SP", "WHITESPACE", "Comment", + "FF", "EscapedSymbolicName_0", "RS", "ID_Continue", "Comment_1", + "StringLiteral_1", "Comment_3", "Comment_2", "GS", "FS", + "CR", "Sc", "SPACE", "Pc", "TAB", "StringLiteral_0", "LF", + "VT", "US", "ID_Start" ] + + grammarFileName = "Lcypher.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.tokens b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.tokens new file mode 100644 index 00000000..856ae310 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherLexer.tokens @@ -0,0 +1,179 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +T__25=26 +T__26=27 +T__27=28 +T__28=29 +T__29=30 +T__30=31 +T__31=32 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +T__38=39 +T__39=40 +T__40=41 +T__41=42 +T__42=43 +T__43=44 +T__44=45 +EXPLAIN=46 +PROFILE=47 +UNION=48 +ALL=49 +OPTIONAL_=50 +MATCH=51 +UNWIND=52 +AS=53 +MERGE=54 +ON=55 +CREATE=56 +SET=57 +DETACH=58 +DELETE_=59 +REMOVE=60 +CALL=61 +YIELD=62 +WITH=63 +DISTINCT=64 +RETURN=65 +ORDER=66 +BY=67 +L_SKIP=68 +LIMIT=69 +ASCENDING=70 +ASC=71 +DESCENDING=72 +DESC=73 +USING=74 +JOIN=75 +START=76 +WHERE=77 +OR=78 +XOR=79 +AND=80 +NOT=81 +IN=82 +STARTS=83 +ENDS=84 +CONTAINS=85 +REGEXP=86 +IS=87 +NULL_=88 +COUNT=89 +ANY=90 +NONE=91 +SINGLE=92 +TRUE_=93 +FALSE_=94 +EXISTS=95 +CASE=96 +ELSE=97 +END=98 +WHEN=99 +THEN=100 +StringLiteral=101 +EscapedChar=102 +HexInteger=103 +DecimalInteger=104 +OctalInteger=105 +HexLetter=106 +HexDigit=107 +Digit=108 +NonZeroDigit=109 +NonZeroOctDigit=110 +OctDigit=111 +ZeroDigit=112 +ExponentDecimalReal=113 +RegularDecimalReal=114 +FILTER=115 +EXTRACT=116 +UnescapedSymbolicName=117 +CONSTRAINT=118 +DO=119 +FOR=120 +REQUIRE=121 +UNIQUE=122 +MANDATORY=123 +SCALAR=124 +OF=125 +ADD=126 +DROP=127 +IdentifierStart=128 +IdentifierPart=129 +EscapedSymbolicName=130 +SP=131 +WHITESPACE=132 +Comment=133 +';'=1 +','=2 +'='=3 +'+='=4 +'*'=5 +'('=6 +')'=7 +'['=8 +']'=9 +':'=10 +'|'=11 +'..'=12 +'+'=13 +'-'=14 +'/'=15 +'%'=16 +'^'=17 +'<>'=18 +'<'=19 +'>'=20 +'<='=21 +'>='=22 +'.'=23 +'{'=24 +'}'=25 +'$'=26 +'⟨'=27 +'〈'=28 +'﹤'=29 +'<'=30 +'⟩'=31 +'〉'=32 +'﹥'=33 +'>'=34 +'­'=35 +'‐'=36 +'‑'=37 +'‒'=38 +'–'=39 +'—'=40 +'―'=41 +'−'=42 +'﹘'=43 +'﹣'=44 +'-'=45 +'0'=112 diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherListener.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherListener.py new file mode 100644 index 00000000..b4dba09d --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherListener.py @@ -0,0 +1,912 @@ +# Generated from Lcypher.g4 by ANTLR 4.13.2 +from antlr4 import * +if "." in __name__: + from .LcypherParser import LcypherParser +else: + from LcypherParser import LcypherParser + +# This class defines a complete listener for a parse tree produced by LcypherParser. +class LcypherListener(ParseTreeListener): + + # Enter a parse tree produced by LcypherParser#oC_Cypher. + def enterOC_Cypher(self, ctx:LcypherParser.OC_CypherContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Cypher. + def exitOC_Cypher(self, ctx:LcypherParser.OC_CypherContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Statement. + def enterOC_Statement(self, ctx:LcypherParser.OC_StatementContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Statement. + def exitOC_Statement(self, ctx:LcypherParser.OC_StatementContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Query. + def enterOC_Query(self, ctx:LcypherParser.OC_QueryContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Query. + def exitOC_Query(self, ctx:LcypherParser.OC_QueryContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RegularQuery. + def enterOC_RegularQuery(self, ctx:LcypherParser.OC_RegularQueryContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RegularQuery. + def exitOC_RegularQuery(self, ctx:LcypherParser.OC_RegularQueryContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Union. + def enterOC_Union(self, ctx:LcypherParser.OC_UnionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Union. + def exitOC_Union(self, ctx:LcypherParser.OC_UnionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_SingleQuery. + def enterOC_SingleQuery(self, ctx:LcypherParser.OC_SingleQueryContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_SingleQuery. + def exitOC_SingleQuery(self, ctx:LcypherParser.OC_SingleQueryContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_SinglePartQuery. + def enterOC_SinglePartQuery(self, ctx:LcypherParser.OC_SinglePartQueryContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_SinglePartQuery. + def exitOC_SinglePartQuery(self, ctx:LcypherParser.OC_SinglePartQueryContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_MultiPartQuery. + def enterOC_MultiPartQuery(self, ctx:LcypherParser.OC_MultiPartQueryContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_MultiPartQuery. + def exitOC_MultiPartQuery(self, ctx:LcypherParser.OC_MultiPartQueryContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_UpdatingClause. + def enterOC_UpdatingClause(self, ctx:LcypherParser.OC_UpdatingClauseContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_UpdatingClause. + def exitOC_UpdatingClause(self, ctx:LcypherParser.OC_UpdatingClauseContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ReadingClause. + def enterOC_ReadingClause(self, ctx:LcypherParser.OC_ReadingClauseContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ReadingClause. + def exitOC_ReadingClause(self, ctx:LcypherParser.OC_ReadingClauseContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Match. + def enterOC_Match(self, ctx:LcypherParser.OC_MatchContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Match. + def exitOC_Match(self, ctx:LcypherParser.OC_MatchContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Unwind. + def enterOC_Unwind(self, ctx:LcypherParser.OC_UnwindContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Unwind. + def exitOC_Unwind(self, ctx:LcypherParser.OC_UnwindContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Merge. + def enterOC_Merge(self, ctx:LcypherParser.OC_MergeContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Merge. + def exitOC_Merge(self, ctx:LcypherParser.OC_MergeContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_MergeAction. + def enterOC_MergeAction(self, ctx:LcypherParser.OC_MergeActionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_MergeAction. + def exitOC_MergeAction(self, ctx:LcypherParser.OC_MergeActionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Create. + def enterOC_Create(self, ctx:LcypherParser.OC_CreateContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Create. + def exitOC_Create(self, ctx:LcypherParser.OC_CreateContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Set. + def enterOC_Set(self, ctx:LcypherParser.OC_SetContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Set. + def exitOC_Set(self, ctx:LcypherParser.OC_SetContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_SetItem. + def enterOC_SetItem(self, ctx:LcypherParser.OC_SetItemContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_SetItem. + def exitOC_SetItem(self, ctx:LcypherParser.OC_SetItemContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Delete. + def enterOC_Delete(self, ctx:LcypherParser.OC_DeleteContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Delete. + def exitOC_Delete(self, ctx:LcypherParser.OC_DeleteContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Remove. + def enterOC_Remove(self, ctx:LcypherParser.OC_RemoveContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Remove. + def exitOC_Remove(self, ctx:LcypherParser.OC_RemoveContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RemoveItem. + def enterOC_RemoveItem(self, ctx:LcypherParser.OC_RemoveItemContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RemoveItem. + def exitOC_RemoveItem(self, ctx:LcypherParser.OC_RemoveItemContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_InQueryCall. + def enterOC_InQueryCall(self, ctx:LcypherParser.OC_InQueryCallContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_InQueryCall. + def exitOC_InQueryCall(self, ctx:LcypherParser.OC_InQueryCallContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_StandaloneCall. + def enterOC_StandaloneCall(self, ctx:LcypherParser.OC_StandaloneCallContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_StandaloneCall. + def exitOC_StandaloneCall(self, ctx:LcypherParser.OC_StandaloneCallContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_YieldItems. + def enterOC_YieldItems(self, ctx:LcypherParser.OC_YieldItemsContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_YieldItems. + def exitOC_YieldItems(self, ctx:LcypherParser.OC_YieldItemsContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_YieldItem. + def enterOC_YieldItem(self, ctx:LcypherParser.OC_YieldItemContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_YieldItem. + def exitOC_YieldItem(self, ctx:LcypherParser.OC_YieldItemContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_With. + def enterOC_With(self, ctx:LcypherParser.OC_WithContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_With. + def exitOC_With(self, ctx:LcypherParser.OC_WithContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Return. + def enterOC_Return(self, ctx:LcypherParser.OC_ReturnContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Return. + def exitOC_Return(self, ctx:LcypherParser.OC_ReturnContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ReturnBody. + def enterOC_ReturnBody(self, ctx:LcypherParser.OC_ReturnBodyContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ReturnBody. + def exitOC_ReturnBody(self, ctx:LcypherParser.OC_ReturnBodyContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ReturnItems. + def enterOC_ReturnItems(self, ctx:LcypherParser.OC_ReturnItemsContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ReturnItems. + def exitOC_ReturnItems(self, ctx:LcypherParser.OC_ReturnItemsContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ReturnItem. + def enterOC_ReturnItem(self, ctx:LcypherParser.OC_ReturnItemContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ReturnItem. + def exitOC_ReturnItem(self, ctx:LcypherParser.OC_ReturnItemContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Order. + def enterOC_Order(self, ctx:LcypherParser.OC_OrderContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Order. + def exitOC_Order(self, ctx:LcypherParser.OC_OrderContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Skip. + def enterOC_Skip(self, ctx:LcypherParser.OC_SkipContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Skip. + def exitOC_Skip(self, ctx:LcypherParser.OC_SkipContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Limit. + def enterOC_Limit(self, ctx:LcypherParser.OC_LimitContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Limit. + def exitOC_Limit(self, ctx:LcypherParser.OC_LimitContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_SortItem. + def enterOC_SortItem(self, ctx:LcypherParser.OC_SortItemContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_SortItem. + def exitOC_SortItem(self, ctx:LcypherParser.OC_SortItemContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Hint. + def enterOC_Hint(self, ctx:LcypherParser.OC_HintContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Hint. + def exitOC_Hint(self, ctx:LcypherParser.OC_HintContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Where. + def enterOC_Where(self, ctx:LcypherParser.OC_WhereContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Where. + def exitOC_Where(self, ctx:LcypherParser.OC_WhereContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Pattern. + def enterOC_Pattern(self, ctx:LcypherParser.OC_PatternContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Pattern. + def exitOC_Pattern(self, ctx:LcypherParser.OC_PatternContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PatternPart. + def enterOC_PatternPart(self, ctx:LcypherParser.OC_PatternPartContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PatternPart. + def exitOC_PatternPart(self, ctx:LcypherParser.OC_PatternPartContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_AnonymousPatternPart. + def enterOC_AnonymousPatternPart(self, ctx:LcypherParser.OC_AnonymousPatternPartContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_AnonymousPatternPart. + def exitOC_AnonymousPatternPart(self, ctx:LcypherParser.OC_AnonymousPatternPartContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PatternElement. + def enterOC_PatternElement(self, ctx:LcypherParser.OC_PatternElementContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PatternElement. + def exitOC_PatternElement(self, ctx:LcypherParser.OC_PatternElementContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_NodePattern. + def enterOC_NodePattern(self, ctx:LcypherParser.OC_NodePatternContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_NodePattern. + def exitOC_NodePattern(self, ctx:LcypherParser.OC_NodePatternContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PatternElementChain. + def enterOC_PatternElementChain(self, ctx:LcypherParser.OC_PatternElementChainContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PatternElementChain. + def exitOC_PatternElementChain(self, ctx:LcypherParser.OC_PatternElementChainContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RelationshipPattern. + def enterOC_RelationshipPattern(self, ctx:LcypherParser.OC_RelationshipPatternContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RelationshipPattern. + def exitOC_RelationshipPattern(self, ctx:LcypherParser.OC_RelationshipPatternContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RelationshipDetail. + def enterOC_RelationshipDetail(self, ctx:LcypherParser.OC_RelationshipDetailContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RelationshipDetail. + def exitOC_RelationshipDetail(self, ctx:LcypherParser.OC_RelationshipDetailContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Properties. + def enterOC_Properties(self, ctx:LcypherParser.OC_PropertiesContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Properties. + def exitOC_Properties(self, ctx:LcypherParser.OC_PropertiesContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RelationshipTypes. + def enterOC_RelationshipTypes(self, ctx:LcypherParser.OC_RelationshipTypesContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RelationshipTypes. + def exitOC_RelationshipTypes(self, ctx:LcypherParser.OC_RelationshipTypesContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_NodeLabels. + def enterOC_NodeLabels(self, ctx:LcypherParser.OC_NodeLabelsContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_NodeLabels. + def exitOC_NodeLabels(self, ctx:LcypherParser.OC_NodeLabelsContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_NodeLabel. + def enterOC_NodeLabel(self, ctx:LcypherParser.OC_NodeLabelContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_NodeLabel. + def exitOC_NodeLabel(self, ctx:LcypherParser.OC_NodeLabelContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RangeLiteral. + def enterOC_RangeLiteral(self, ctx:LcypherParser.OC_RangeLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RangeLiteral. + def exitOC_RangeLiteral(self, ctx:LcypherParser.OC_RangeLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_LabelName. + def enterOC_LabelName(self, ctx:LcypherParser.OC_LabelNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_LabelName. + def exitOC_LabelName(self, ctx:LcypherParser.OC_LabelNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RelTypeName. + def enterOC_RelTypeName(self, ctx:LcypherParser.OC_RelTypeNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RelTypeName. + def exitOC_RelTypeName(self, ctx:LcypherParser.OC_RelTypeNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Expression. + def enterOC_Expression(self, ctx:LcypherParser.OC_ExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Expression. + def exitOC_Expression(self, ctx:LcypherParser.OC_ExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_OrExpression. + def enterOC_OrExpression(self, ctx:LcypherParser.OC_OrExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_OrExpression. + def exitOC_OrExpression(self, ctx:LcypherParser.OC_OrExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_XorExpression. + def enterOC_XorExpression(self, ctx:LcypherParser.OC_XorExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_XorExpression. + def exitOC_XorExpression(self, ctx:LcypherParser.OC_XorExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_AndExpression. + def enterOC_AndExpression(self, ctx:LcypherParser.OC_AndExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_AndExpression. + def exitOC_AndExpression(self, ctx:LcypherParser.OC_AndExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_NotExpression. + def enterOC_NotExpression(self, ctx:LcypherParser.OC_NotExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_NotExpression. + def exitOC_NotExpression(self, ctx:LcypherParser.OC_NotExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ComparisonExpression. + def enterOC_ComparisonExpression(self, ctx:LcypherParser.OC_ComparisonExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ComparisonExpression. + def exitOC_ComparisonExpression(self, ctx:LcypherParser.OC_ComparisonExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_AddOrSubtractExpression. + def enterOC_AddOrSubtractExpression(self, ctx:LcypherParser.OC_AddOrSubtractExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_AddOrSubtractExpression. + def exitOC_AddOrSubtractExpression(self, ctx:LcypherParser.OC_AddOrSubtractExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_MultiplyDivideModuloExpression. + def enterOC_MultiplyDivideModuloExpression(self, ctx:LcypherParser.OC_MultiplyDivideModuloExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_MultiplyDivideModuloExpression. + def exitOC_MultiplyDivideModuloExpression(self, ctx:LcypherParser.OC_MultiplyDivideModuloExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PowerOfExpression. + def enterOC_PowerOfExpression(self, ctx:LcypherParser.OC_PowerOfExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PowerOfExpression. + def exitOC_PowerOfExpression(self, ctx:LcypherParser.OC_PowerOfExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_UnaryAddOrSubtractExpression. + def enterOC_UnaryAddOrSubtractExpression(self, ctx:LcypherParser.OC_UnaryAddOrSubtractExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_UnaryAddOrSubtractExpression. + def exitOC_UnaryAddOrSubtractExpression(self, ctx:LcypherParser.OC_UnaryAddOrSubtractExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_StringListNullOperatorExpression. + def enterOC_StringListNullOperatorExpression(self, ctx:LcypherParser.OC_StringListNullOperatorExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_StringListNullOperatorExpression. + def exitOC_StringListNullOperatorExpression(self, ctx:LcypherParser.OC_StringListNullOperatorExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ListOperatorExpression. + def enterOC_ListOperatorExpression(self, ctx:LcypherParser.OC_ListOperatorExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ListOperatorExpression. + def exitOC_ListOperatorExpression(self, ctx:LcypherParser.OC_ListOperatorExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_StringOperatorExpression. + def enterOC_StringOperatorExpression(self, ctx:LcypherParser.OC_StringOperatorExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_StringOperatorExpression. + def exitOC_StringOperatorExpression(self, ctx:LcypherParser.OC_StringOperatorExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_NullOperatorExpression. + def enterOC_NullOperatorExpression(self, ctx:LcypherParser.OC_NullOperatorExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_NullOperatorExpression. + def exitOC_NullOperatorExpression(self, ctx:LcypherParser.OC_NullOperatorExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PropertyOrLabelsExpression. + def enterOC_PropertyOrLabelsExpression(self, ctx:LcypherParser.OC_PropertyOrLabelsExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PropertyOrLabelsExpression. + def exitOC_PropertyOrLabelsExpression(self, ctx:LcypherParser.OC_PropertyOrLabelsExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Atom. + def enterOC_Atom(self, ctx:LcypherParser.OC_AtomContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Atom. + def exitOC_Atom(self, ctx:LcypherParser.OC_AtomContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Literal. + def enterOC_Literal(self, ctx:LcypherParser.OC_LiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Literal. + def exitOC_Literal(self, ctx:LcypherParser.OC_LiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_BooleanLiteral. + def enterOC_BooleanLiteral(self, ctx:LcypherParser.OC_BooleanLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_BooleanLiteral. + def exitOC_BooleanLiteral(self, ctx:LcypherParser.OC_BooleanLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ListLiteral. + def enterOC_ListLiteral(self, ctx:LcypherParser.OC_ListLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ListLiteral. + def exitOC_ListLiteral(self, ctx:LcypherParser.OC_ListLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PartialComparisonExpression. + def enterOC_PartialComparisonExpression(self, ctx:LcypherParser.OC_PartialComparisonExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PartialComparisonExpression. + def exitOC_PartialComparisonExpression(self, ctx:LcypherParser.OC_PartialComparisonExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ParenthesizedExpression. + def enterOC_ParenthesizedExpression(self, ctx:LcypherParser.OC_ParenthesizedExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ParenthesizedExpression. + def exitOC_ParenthesizedExpression(self, ctx:LcypherParser.OC_ParenthesizedExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RelationshipsPattern. + def enterOC_RelationshipsPattern(self, ctx:LcypherParser.OC_RelationshipsPatternContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RelationshipsPattern. + def exitOC_RelationshipsPattern(self, ctx:LcypherParser.OC_RelationshipsPatternContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_FilterExpression. + def enterOC_FilterExpression(self, ctx:LcypherParser.OC_FilterExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_FilterExpression. + def exitOC_FilterExpression(self, ctx:LcypherParser.OC_FilterExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_IdInColl. + def enterOC_IdInColl(self, ctx:LcypherParser.OC_IdInCollContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_IdInColl. + def exitOC_IdInColl(self, ctx:LcypherParser.OC_IdInCollContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_FunctionInvocation. + def enterOC_FunctionInvocation(self, ctx:LcypherParser.OC_FunctionInvocationContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_FunctionInvocation. + def exitOC_FunctionInvocation(self, ctx:LcypherParser.OC_FunctionInvocationContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_FunctionName. + def enterOC_FunctionName(self, ctx:LcypherParser.OC_FunctionNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_FunctionName. + def exitOC_FunctionName(self, ctx:LcypherParser.OC_FunctionNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ExplicitProcedureInvocation. + def enterOC_ExplicitProcedureInvocation(self, ctx:LcypherParser.OC_ExplicitProcedureInvocationContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ExplicitProcedureInvocation. + def exitOC_ExplicitProcedureInvocation(self, ctx:LcypherParser.OC_ExplicitProcedureInvocationContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ImplicitProcedureInvocation. + def enterOC_ImplicitProcedureInvocation(self, ctx:LcypherParser.OC_ImplicitProcedureInvocationContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ImplicitProcedureInvocation. + def exitOC_ImplicitProcedureInvocation(self, ctx:LcypherParser.OC_ImplicitProcedureInvocationContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ProcedureResultField. + def enterOC_ProcedureResultField(self, ctx:LcypherParser.OC_ProcedureResultFieldContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ProcedureResultField. + def exitOC_ProcedureResultField(self, ctx:LcypherParser.OC_ProcedureResultFieldContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ProcedureName. + def enterOC_ProcedureName(self, ctx:LcypherParser.OC_ProcedureNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ProcedureName. + def exitOC_ProcedureName(self, ctx:LcypherParser.OC_ProcedureNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Namespace. + def enterOC_Namespace(self, ctx:LcypherParser.OC_NamespaceContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Namespace. + def exitOC_Namespace(self, ctx:LcypherParser.OC_NamespaceContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ListComprehension. + def enterOC_ListComprehension(self, ctx:LcypherParser.OC_ListComprehensionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ListComprehension. + def exitOC_ListComprehension(self, ctx:LcypherParser.OC_ListComprehensionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PatternComprehension. + def enterOC_PatternComprehension(self, ctx:LcypherParser.OC_PatternComprehensionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PatternComprehension. + def exitOC_PatternComprehension(self, ctx:LcypherParser.OC_PatternComprehensionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PropertyLookup. + def enterOC_PropertyLookup(self, ctx:LcypherParser.OC_PropertyLookupContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PropertyLookup. + def exitOC_PropertyLookup(self, ctx:LcypherParser.OC_PropertyLookupContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_CaseExpression. + def enterOC_CaseExpression(self, ctx:LcypherParser.OC_CaseExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_CaseExpression. + def exitOC_CaseExpression(self, ctx:LcypherParser.OC_CaseExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_CaseAlternatives. + def enterOC_CaseAlternatives(self, ctx:LcypherParser.OC_CaseAlternativesContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_CaseAlternatives. + def exitOC_CaseAlternatives(self, ctx:LcypherParser.OC_CaseAlternativesContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Variable. + def enterOC_Variable(self, ctx:LcypherParser.OC_VariableContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Variable. + def exitOC_Variable(self, ctx:LcypherParser.OC_VariableContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_NumberLiteral. + def enterOC_NumberLiteral(self, ctx:LcypherParser.OC_NumberLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_NumberLiteral. + def exitOC_NumberLiteral(self, ctx:LcypherParser.OC_NumberLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_MapLiteral. + def enterOC_MapLiteral(self, ctx:LcypherParser.OC_MapLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_MapLiteral. + def exitOC_MapLiteral(self, ctx:LcypherParser.OC_MapLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Parameter. + def enterOC_Parameter(self, ctx:LcypherParser.OC_ParameterContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Parameter. + def exitOC_Parameter(self, ctx:LcypherParser.OC_ParameterContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PropertyExpression. + def enterOC_PropertyExpression(self, ctx:LcypherParser.OC_PropertyExpressionContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PropertyExpression. + def exitOC_PropertyExpression(self, ctx:LcypherParser.OC_PropertyExpressionContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_PropertyKeyName. + def enterOC_PropertyKeyName(self, ctx:LcypherParser.OC_PropertyKeyNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_PropertyKeyName. + def exitOC_PropertyKeyName(self, ctx:LcypherParser.OC_PropertyKeyNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_IntegerLiteral. + def enterOC_IntegerLiteral(self, ctx:LcypherParser.OC_IntegerLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_IntegerLiteral. + def exitOC_IntegerLiteral(self, ctx:LcypherParser.OC_IntegerLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_DoubleLiteral. + def enterOC_DoubleLiteral(self, ctx:LcypherParser.OC_DoubleLiteralContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_DoubleLiteral. + def exitOC_DoubleLiteral(self, ctx:LcypherParser.OC_DoubleLiteralContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_SchemaName. + def enterOC_SchemaName(self, ctx:LcypherParser.OC_SchemaNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_SchemaName. + def exitOC_SchemaName(self, ctx:LcypherParser.OC_SchemaNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_SymbolicName. + def enterOC_SymbolicName(self, ctx:LcypherParser.OC_SymbolicNameContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_SymbolicName. + def exitOC_SymbolicName(self, ctx:LcypherParser.OC_SymbolicNameContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_ReservedWord. + def enterOC_ReservedWord(self, ctx:LcypherParser.OC_ReservedWordContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_ReservedWord. + def exitOC_ReservedWord(self, ctx:LcypherParser.OC_ReservedWordContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_LeftArrowHead. + def enterOC_LeftArrowHead(self, ctx:LcypherParser.OC_LeftArrowHeadContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_LeftArrowHead. + def exitOC_LeftArrowHead(self, ctx:LcypherParser.OC_LeftArrowHeadContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_RightArrowHead. + def enterOC_RightArrowHead(self, ctx:LcypherParser.OC_RightArrowHeadContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_RightArrowHead. + def exitOC_RightArrowHead(self, ctx:LcypherParser.OC_RightArrowHeadContext): + pass + + + # Enter a parse tree produced by LcypherParser#oC_Dash. + def enterOC_Dash(self, ctx:LcypherParser.OC_DashContext): + pass + + # Exit a parse tree produced by LcypherParser#oC_Dash. + def exitOC_Dash(self, ctx:LcypherParser.OC_DashContext): + pass + + + +del LcypherParser \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherParser.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherParser.py new file mode 100644 index 00000000..9f632f79 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/LcypherParser.py @@ -0,0 +1,9797 @@ +# Generated from Lcypher.g4 by ANTLR 4.13.2 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +def serializedATN(): + return [ + 4,1,133,1594,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, + 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, + 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, + 26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2, + 33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7, + 39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, + 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7, + 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, + 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7, + 65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2, + 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7, + 78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2, + 85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7, + 91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2, + 98,7,98,2,99,7,99,1,0,3,0,202,8,0,1,0,1,0,3,0,206,8,0,1,0,3,0,209, + 8,0,1,0,3,0,212,8,0,1,0,1,0,1,1,1,1,1,1,3,1,219,8,1,1,1,1,1,1,1, + 3,1,224,8,1,1,1,3,1,227,8,1,1,2,1,2,3,2,231,8,2,1,3,1,3,3,3,235, + 8,3,1,3,5,3,238,8,3,10,3,12,3,241,9,3,1,4,1,4,1,4,1,4,3,4,247,8, + 4,1,4,1,4,1,4,3,4,252,8,4,1,4,3,4,255,8,4,1,5,1,5,3,5,259,8,5,1, + 6,1,6,3,6,263,8,6,5,6,265,8,6,10,6,12,6,268,9,6,1,6,1,6,1,6,3,6, + 273,8,6,5,6,275,8,6,10,6,12,6,278,9,6,1,6,1,6,3,6,282,8,6,1,6,5, + 6,285,8,6,10,6,12,6,288,9,6,1,6,3,6,291,8,6,1,6,3,6,294,8,6,3,6, + 296,8,6,1,7,1,7,3,7,300,8,7,5,7,302,8,7,10,7,12,7,305,9,7,1,7,1, + 7,3,7,309,8,7,5,7,311,8,7,10,7,12,7,314,9,7,1,7,1,7,3,7,318,8,7, + 4,7,320,8,7,11,7,12,7,321,1,7,1,7,1,8,1,8,1,8,1,8,1,8,3,8,331,8, + 8,1,9,1,9,1,9,3,9,336,8,9,1,10,1,10,3,10,340,8,10,1,10,1,10,3,10, + 344,8,10,1,10,1,10,3,10,348,8,10,1,10,5,10,351,8,10,10,10,12,10, + 354,9,10,1,10,3,10,357,8,10,1,10,3,10,360,8,10,1,11,1,11,3,11,364, + 8,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,3,12,374,8,12,1,12, + 1,12,1,12,5,12,379,8,12,10,12,12,12,382,9,12,1,13,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,13,3,13,394,8,13,1,14,1,14,3,14,398,8, + 14,1,14,1,14,1,15,1,15,3,15,404,8,15,1,15,1,15,3,15,408,8,15,1,15, + 1,15,3,15,412,8,15,1,15,5,15,415,8,15,10,15,12,15,418,9,15,1,16, + 1,16,3,16,422,8,16,1,16,1,16,3,16,426,8,16,1,16,1,16,1,16,1,16,3, + 16,432,8,16,1,16,1,16,3,16,436,8,16,1,16,1,16,1,16,1,16,3,16,442, + 8,16,1,16,1,16,3,16,446,8,16,1,16,1,16,1,16,1,16,3,16,452,8,16,1, + 16,1,16,3,16,456,8,16,1,17,1,17,3,17,460,8,17,1,17,1,17,3,17,464, + 8,17,1,17,1,17,3,17,468,8,17,1,17,1,17,3,17,472,8,17,1,17,5,17,475, + 8,17,10,17,12,17,478,9,17,1,18,1,18,1,18,1,18,3,18,484,8,18,1,18, + 1,18,3,18,488,8,18,1,18,5,18,491,8,18,10,18,12,18,494,9,18,1,19, + 1,19,1,19,1,19,3,19,500,8,19,1,20,1,20,1,20,1,20,3,20,506,8,20,1, + 20,1,20,1,20,3,20,511,8,20,1,21,1,21,1,21,1,21,3,21,517,8,21,1,21, + 1,21,1,21,1,21,3,21,523,8,21,1,22,1,22,1,22,3,22,528,8,22,1,22,1, + 22,3,22,532,8,22,1,22,5,22,535,8,22,10,22,12,22,538,9,22,3,22,540, + 8,22,1,22,3,22,543,8,22,1,22,3,22,546,8,22,1,23,1,23,1,23,1,23,1, + 23,3,23,553,8,23,1,23,1,23,1,24,1,24,3,24,559,8,24,1,24,3,24,562, + 8,24,1,24,1,24,1,24,3,24,567,8,24,1,24,3,24,570,8,24,1,25,1,25,3, + 25,574,8,25,1,25,3,25,577,8,25,1,25,1,25,1,25,1,26,1,26,1,26,3,26, + 585,8,26,1,26,1,26,3,26,589,8,26,1,26,1,26,3,26,593,8,26,1,27,1, + 27,3,27,597,8,27,1,27,1,27,3,27,601,8,27,1,27,5,27,604,8,27,10,27, + 12,27,607,9,27,1,27,1,27,3,27,611,8,27,1,27,1,27,3,27,615,8,27,1, + 27,5,27,618,8,27,10,27,12,27,621,9,27,3,27,623,8,27,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,3,28,632,8,28,1,29,1,29,1,29,1,29,1,29,1, + 29,1,29,3,29,641,8,29,1,29,5,29,644,8,29,10,29,12,29,647,9,29,1, + 30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,3,32,659,8,32,1, + 32,3,32,662,8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1, + 33,1,33,1,33,1,33,1,33,3,33,678,8,33,1,34,1,34,1,34,1,34,1,35,1, + 35,3,35,686,8,35,1,35,1,35,3,35,690,8,35,1,35,5,35,693,8,35,10,35, + 12,35,696,9,35,1,36,1,36,3,36,700,8,36,1,36,1,36,3,36,704,8,36,1, + 36,1,36,1,36,3,36,709,8,36,1,37,1,37,1,38,1,38,3,38,715,8,38,1,38, + 5,38,718,8,38,10,38,12,38,721,9,38,1,38,1,38,1,38,1,38,3,38,727, + 8,38,1,39,1,39,3,39,731,8,39,1,39,1,39,3,39,735,8,39,3,39,737,8, + 39,1,39,1,39,3,39,741,8,39,3,39,743,8,39,1,39,1,39,3,39,747,8,39, + 3,39,749,8,39,1,39,1,39,1,40,1,40,3,40,755,8,40,1,40,1,40,1,41,1, + 41,3,41,761,8,41,1,41,1,41,3,41,765,8,41,1,41,3,41,768,8,41,1,41, + 3,41,771,8,41,1,41,1,41,3,41,775,8,41,1,41,1,41,1,41,1,41,3,41,781, + 8,41,1,41,1,41,3,41,785,8,41,1,41,3,41,788,8,41,1,41,3,41,791,8, + 41,1,41,1,41,1,41,1,41,3,41,797,8,41,1,41,3,41,800,8,41,1,41,3,41, + 803,8,41,1,41,1,41,3,41,807,8,41,1,41,1,41,1,41,1,41,3,41,813,8, + 41,1,41,3,41,816,8,41,1,41,3,41,819,8,41,1,41,1,41,3,41,823,8,41, + 1,42,1,42,3,42,827,8,42,1,42,1,42,3,42,831,8,42,3,42,833,8,42,1, + 42,1,42,3,42,837,8,42,3,42,839,8,42,1,42,3,42,842,8,42,1,42,1,42, + 3,42,846,8,42,3,42,848,8,42,1,42,1,42,1,43,1,43,3,43,854,8,43,1, + 44,1,44,3,44,858,8,44,1,44,1,44,3,44,862,8,44,1,44,1,44,3,44,866, + 8,44,1,44,3,44,869,8,44,1,44,5,44,872,8,44,10,44,12,44,875,9,44, + 1,45,1,45,3,45,879,8,45,1,45,5,45,882,8,45,10,45,12,45,885,9,45, + 1,46,1,46,3,46,889,8,46,1,46,1,46,1,47,1,47,3,47,895,8,47,1,47,1, + 47,3,47,899,8,47,3,47,901,8,47,1,47,1,47,3,47,905,8,47,1,47,1,47, + 3,47,909,8,47,3,47,911,8,47,3,47,913,8,47,1,48,1,48,1,49,1,49,1, + 50,1,50,1,51,1,51,1,51,1,51,1,51,5,51,926,8,51,10,51,12,51,929,9, + 51,1,52,1,52,1,52,1,52,1,52,5,52,936,8,52,10,52,12,52,939,9,52,1, + 53,1,53,1,53,1,53,1,53,5,53,946,8,53,10,53,12,53,949,9,53,1,54,1, + 54,3,54,953,8,54,5,54,955,8,54,10,54,12,54,958,9,54,1,54,1,54,1, + 55,1,55,3,55,964,8,55,1,55,5,55,967,8,55,10,55,12,55,970,9,55,1, + 56,1,56,3,56,974,8,56,1,56,1,56,3,56,978,8,56,1,56,1,56,3,56,982, + 8,56,1,56,1,56,3,56,986,8,56,1,56,5,56,989,8,56,10,56,12,56,992, + 9,56,1,57,1,57,3,57,996,8,57,1,57,1,57,3,57,1000,8,57,1,57,1,57, + 3,57,1004,8,57,1,57,1,57,3,57,1008,8,57,1,57,1,57,3,57,1012,8,57, + 1,57,1,57,3,57,1016,8,57,1,57,5,57,1019,8,57,10,57,12,57,1022,9, + 57,1,58,1,58,3,58,1026,8,58,1,58,1,58,3,58,1030,8,58,1,58,5,58,1033, + 8,58,10,58,12,58,1036,9,58,1,59,1,59,3,59,1040,8,59,5,59,1042,8, + 59,10,59,12,59,1045,9,59,1,59,1,59,1,60,1,60,1,60,1,60,5,60,1053, + 8,60,10,60,12,60,1056,9,60,1,61,1,61,1,61,3,61,1061,8,61,1,61,1, + 61,3,61,1065,8,61,1,61,1,61,1,61,1,61,1,61,3,61,1072,8,61,1,61,1, + 61,3,61,1076,8,61,1,61,1,61,3,61,1080,8,61,1,61,3,61,1083,8,61,1, + 62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,3,62,1097, + 8,62,1,62,3,62,1100,8,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,3,63,1114,8,63,1,64,1,64,3,64,1118,8,64,1,64, + 5,64,1121,8,64,10,64,12,64,1124,9,64,1,64,3,64,1127,8,64,1,64,3, + 64,1130,8,64,1,65,1,65,1,65,1,65,1,65,3,65,1137,8,65,1,65,1,65,3, + 65,1141,8,65,1,65,1,65,3,65,1145,8,65,1,65,1,65,1,65,1,65,1,65,3, + 65,1152,8,65,1,65,1,65,3,65,1156,8,65,1,65,1,65,3,65,1160,8,65,1, + 65,1,65,1,65,1,65,3,65,1166,8,65,1,65,1,65,3,65,1170,8,65,1,65,1, + 65,3,65,1174,8,65,1,65,1,65,1,65,1,65,3,65,1180,8,65,1,65,1,65,3, + 65,1184,8,65,1,65,1,65,3,65,1188,8,65,1,65,1,65,1,65,1,65,3,65,1194, + 8,65,1,65,1,65,3,65,1198,8,65,1,65,1,65,3,65,1202,8,65,1,65,1,65, + 1,65,1,65,1,65,1,65,3,65,1210,8,65,1,66,1,66,1,66,1,66,1,66,1,66, + 3,66,1218,8,66,1,67,1,67,1,68,1,68,3,68,1224,8,68,1,68,1,68,3,68, + 1228,8,68,1,68,1,68,3,68,1232,8,68,1,68,1,68,3,68,1236,8,68,5,68, + 1238,8,68,10,68,12,68,1241,9,68,3,68,1243,8,68,1,68,1,68,1,69,1, + 69,3,69,1249,8,69,1,69,1,69,1,69,3,69,1254,8,69,1,69,1,69,1,69,3, + 69,1259,8,69,1,69,1,69,1,69,3,69,1264,8,69,1,69,1,69,1,69,3,69,1269, + 8,69,1,69,1,69,1,69,3,69,1274,8,69,1,69,3,69,1277,8,69,1,70,1,70, + 3,70,1281,8,70,1,70,1,70,3,70,1285,8,70,1,70,1,70,1,71,1,71,3,71, + 1291,8,71,1,71,4,71,1294,8,71,11,71,12,71,1295,1,72,1,72,3,72,1300, + 8,72,1,72,3,72,1303,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74, + 3,74,1313,8,74,1,74,1,74,3,74,1317,8,74,1,74,1,74,3,74,1321,8,74, + 3,74,1323,8,74,1,74,1,74,3,74,1327,8,74,1,74,1,74,3,74,1331,8,74, + 1,74,1,74,3,74,1335,8,74,5,74,1337,8,74,10,74,12,74,1340,9,74,3, + 74,1342,8,74,1,74,1,74,1,75,1,75,1,75,1,75,3,75,1350,8,75,1,76,1, + 76,3,76,1354,8,76,1,76,1,76,3,76,1358,8,76,1,76,1,76,3,76,1362,8, + 76,1,76,1,76,3,76,1366,8,76,1,76,1,76,3,76,1370,8,76,5,76,1372,8, + 76,10,76,12,76,1375,9,76,3,76,1377,8,76,1,76,1,76,1,77,1,77,1,78, + 1,78,1,79,1,79,1,79,1,80,1,80,1,80,5,80,1391,8,80,10,80,12,80,1394, + 9,80,1,81,1,81,3,81,1398,8,81,1,81,1,81,3,81,1402,8,81,1,81,1,81, + 3,81,1406,8,81,1,81,3,81,1409,8,81,1,81,3,81,1412,8,81,1,81,1,81, + 1,82,1,82,3,82,1418,8,82,1,82,1,82,3,82,1422,8,82,1,82,1,82,3,82, + 1426,8,82,3,82,1428,8,82,1,82,1,82,3,82,1432,8,82,1,82,1,82,3,82, + 1436,8,82,1,82,1,82,3,82,1440,8,82,3,82,1442,8,82,1,82,1,82,3,82, + 1446,8,82,1,82,1,82,3,82,1450,8,82,1,82,1,82,1,83,1,83,3,83,1456, + 8,83,1,83,1,83,1,84,1,84,3,84,1462,8,84,1,84,4,84,1465,8,84,11,84, + 12,84,1466,1,84,1,84,3,84,1471,8,84,1,84,1,84,3,84,1475,8,84,1,84, + 4,84,1478,8,84,11,84,12,84,1479,3,84,1482,8,84,1,84,3,84,1485,8, + 84,1,84,1,84,3,84,1489,8,84,1,84,3,84,1492,8,84,1,84,3,84,1495,8, + 84,1,84,1,84,1,85,1,85,3,85,1501,8,85,1,85,1,85,3,85,1505,8,85,1, + 85,1,85,3,85,1509,8,85,1,85,1,85,1,86,1,86,1,87,1,87,3,87,1517,8, + 87,1,88,1,88,3,88,1521,8,88,1,88,1,88,3,88,1525,8,88,1,88,1,88,3, + 88,1529,8,88,1,88,1,88,3,88,1533,8,88,1,88,1,88,3,88,1537,8,88,1, + 88,1,88,3,88,1541,8,88,1,88,1,88,3,88,1545,8,88,1,88,1,88,3,88,1549, + 8,88,5,88,1551,8,88,10,88,12,88,1554,9,88,3,88,1556,8,88,1,88,1, + 88,1,89,1,89,1,89,3,89,1563,8,89,1,90,1,90,3,90,1567,8,90,1,90,4, + 90,1570,8,90,11,90,12,90,1571,1,91,1,91,1,92,1,92,1,93,1,93,1,94, + 1,94,3,94,1582,8,94,1,95,1,95,1,96,1,96,1,97,1,97,1,98,1,98,1,99, + 1,99,1,99,0,0,100,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32, + 34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76, + 78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114, + 116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146, + 148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178, + 180,182,184,186,188,190,192,194,196,198,0,10,1,0,70,73,1,0,13,14, + 1,0,93,94,1,0,103,105,1,0,113,114,4,0,89,92,106,106,115,117,130, + 130,6,0,48,60,63,73,77,85,87,88,93,100,118,127,2,0,19,19,27,30,2, + 0,20,20,31,34,2,0,14,14,35,45,1820,0,201,1,0,0,0,2,226,1,0,0,0,4, + 230,1,0,0,0,6,232,1,0,0,0,8,254,1,0,0,0,10,258,1,0,0,0,12,295,1, + 0,0,0,14,319,1,0,0,0,16,330,1,0,0,0,18,335,1,0,0,0,20,339,1,0,0, + 0,22,361,1,0,0,0,24,371,1,0,0,0,26,393,1,0,0,0,28,395,1,0,0,0,30, + 401,1,0,0,0,32,455,1,0,0,0,34,459,1,0,0,0,36,479,1,0,0,0,38,499, + 1,0,0,0,40,501,1,0,0,0,42,512,1,0,0,0,44,539,1,0,0,0,46,552,1,0, + 0,0,48,556,1,0,0,0,50,571,1,0,0,0,52,581,1,0,0,0,54,622,1,0,0,0, + 56,631,1,0,0,0,58,633,1,0,0,0,60,648,1,0,0,0,62,652,1,0,0,0,64,656, + 1,0,0,0,66,677,1,0,0,0,68,679,1,0,0,0,70,683,1,0,0,0,72,708,1,0, + 0,0,74,710,1,0,0,0,76,726,1,0,0,0,78,728,1,0,0,0,80,752,1,0,0,0, + 82,822,1,0,0,0,84,824,1,0,0,0,86,853,1,0,0,0,88,855,1,0,0,0,90,876, + 1,0,0,0,92,886,1,0,0,0,94,892,1,0,0,0,96,914,1,0,0,0,98,916,1,0, + 0,0,100,918,1,0,0,0,102,920,1,0,0,0,104,930,1,0,0,0,106,940,1,0, + 0,0,108,956,1,0,0,0,110,961,1,0,0,0,112,971,1,0,0,0,114,993,1,0, + 0,0,116,1023,1,0,0,0,118,1043,1,0,0,0,120,1048,1,0,0,0,122,1082, + 1,0,0,0,124,1096,1,0,0,0,126,1113,1,0,0,0,128,1115,1,0,0,0,130,1209, + 1,0,0,0,132,1217,1,0,0,0,134,1219,1,0,0,0,136,1221,1,0,0,0,138,1276, + 1,0,0,0,140,1278,1,0,0,0,142,1288,1,0,0,0,144,1297,1,0,0,0,146,1304, + 1,0,0,0,148,1310,1,0,0,0,150,1349,1,0,0,0,152,1351,1,0,0,0,154,1380, + 1,0,0,0,156,1382,1,0,0,0,158,1384,1,0,0,0,160,1392,1,0,0,0,162,1395, + 1,0,0,0,164,1415,1,0,0,0,166,1453,1,0,0,0,168,1481,1,0,0,0,170,1498, + 1,0,0,0,172,1512,1,0,0,0,174,1516,1,0,0,0,176,1518,1,0,0,0,178,1559, + 1,0,0,0,180,1564,1,0,0,0,182,1573,1,0,0,0,184,1575,1,0,0,0,186,1577, + 1,0,0,0,188,1581,1,0,0,0,190,1583,1,0,0,0,192,1585,1,0,0,0,194,1587, + 1,0,0,0,196,1589,1,0,0,0,198,1591,1,0,0,0,200,202,5,131,0,0,201, + 200,1,0,0,0,201,202,1,0,0,0,202,203,1,0,0,0,203,208,3,2,1,0,204, + 206,5,131,0,0,205,204,1,0,0,0,205,206,1,0,0,0,206,207,1,0,0,0,207, + 209,5,1,0,0,208,205,1,0,0,0,208,209,1,0,0,0,209,211,1,0,0,0,210, + 212,5,131,0,0,211,210,1,0,0,0,211,212,1,0,0,0,212,213,1,0,0,0,213, + 214,5,0,0,1,214,1,1,0,0,0,215,227,3,4,2,0,216,218,5,46,0,0,217,219, + 5,131,0,0,218,217,1,0,0,0,218,219,1,0,0,0,219,220,1,0,0,0,220,227, + 3,4,2,0,221,223,5,47,0,0,222,224,5,131,0,0,223,222,1,0,0,0,223,224, + 1,0,0,0,224,225,1,0,0,0,225,227,3,4,2,0,226,215,1,0,0,0,226,216, + 1,0,0,0,226,221,1,0,0,0,227,3,1,0,0,0,228,231,3,6,3,0,229,231,3, + 42,21,0,230,228,1,0,0,0,230,229,1,0,0,0,231,5,1,0,0,0,232,239,3, + 10,5,0,233,235,5,131,0,0,234,233,1,0,0,0,234,235,1,0,0,0,235,236, + 1,0,0,0,236,238,3,8,4,0,237,234,1,0,0,0,238,241,1,0,0,0,239,237, + 1,0,0,0,239,240,1,0,0,0,240,7,1,0,0,0,241,239,1,0,0,0,242,243,5, + 48,0,0,243,244,5,131,0,0,244,246,5,49,0,0,245,247,5,131,0,0,246, + 245,1,0,0,0,246,247,1,0,0,0,247,248,1,0,0,0,248,255,3,10,5,0,249, + 251,5,48,0,0,250,252,5,131,0,0,251,250,1,0,0,0,251,252,1,0,0,0,252, + 253,1,0,0,0,253,255,3,10,5,0,254,242,1,0,0,0,254,249,1,0,0,0,255, + 9,1,0,0,0,256,259,3,12,6,0,257,259,3,14,7,0,258,256,1,0,0,0,258, + 257,1,0,0,0,259,11,1,0,0,0,260,262,3,18,9,0,261,263,5,131,0,0,262, + 261,1,0,0,0,262,263,1,0,0,0,263,265,1,0,0,0,264,260,1,0,0,0,265, + 268,1,0,0,0,266,264,1,0,0,0,266,267,1,0,0,0,267,269,1,0,0,0,268, + 266,1,0,0,0,269,296,3,50,25,0,270,272,3,18,9,0,271,273,5,131,0,0, + 272,271,1,0,0,0,272,273,1,0,0,0,273,275,1,0,0,0,274,270,1,0,0,0, + 275,278,1,0,0,0,276,274,1,0,0,0,276,277,1,0,0,0,277,279,1,0,0,0, + 278,276,1,0,0,0,279,286,3,16,8,0,280,282,5,131,0,0,281,280,1,0,0, + 0,281,282,1,0,0,0,282,283,1,0,0,0,283,285,3,16,8,0,284,281,1,0,0, + 0,285,288,1,0,0,0,286,284,1,0,0,0,286,287,1,0,0,0,287,293,1,0,0, + 0,288,286,1,0,0,0,289,291,5,131,0,0,290,289,1,0,0,0,290,291,1,0, + 0,0,291,292,1,0,0,0,292,294,3,50,25,0,293,290,1,0,0,0,293,294,1, + 0,0,0,294,296,1,0,0,0,295,266,1,0,0,0,295,276,1,0,0,0,296,13,1,0, + 0,0,297,299,3,18,9,0,298,300,5,131,0,0,299,298,1,0,0,0,299,300,1, + 0,0,0,300,302,1,0,0,0,301,297,1,0,0,0,302,305,1,0,0,0,303,301,1, + 0,0,0,303,304,1,0,0,0,304,312,1,0,0,0,305,303,1,0,0,0,306,308,3, + 16,8,0,307,309,5,131,0,0,308,307,1,0,0,0,308,309,1,0,0,0,309,311, + 1,0,0,0,310,306,1,0,0,0,311,314,1,0,0,0,312,310,1,0,0,0,312,313, + 1,0,0,0,313,315,1,0,0,0,314,312,1,0,0,0,315,317,3,48,24,0,316,318, + 5,131,0,0,317,316,1,0,0,0,317,318,1,0,0,0,318,320,1,0,0,0,319,303, + 1,0,0,0,320,321,1,0,0,0,321,319,1,0,0,0,321,322,1,0,0,0,322,323, + 1,0,0,0,323,324,3,12,6,0,324,15,1,0,0,0,325,331,3,28,14,0,326,331, + 3,24,12,0,327,331,3,34,17,0,328,331,3,30,15,0,329,331,3,36,18,0, + 330,325,1,0,0,0,330,326,1,0,0,0,330,327,1,0,0,0,330,328,1,0,0,0, + 330,329,1,0,0,0,331,17,1,0,0,0,332,336,3,20,10,0,333,336,3,22,11, + 0,334,336,3,40,20,0,335,332,1,0,0,0,335,333,1,0,0,0,335,334,1,0, + 0,0,336,19,1,0,0,0,337,338,5,50,0,0,338,340,5,131,0,0,339,337,1, + 0,0,0,339,340,1,0,0,0,340,341,1,0,0,0,341,343,5,51,0,0,342,344,5, + 131,0,0,343,342,1,0,0,0,343,344,1,0,0,0,344,345,1,0,0,0,345,352, + 3,70,35,0,346,348,5,131,0,0,347,346,1,0,0,0,347,348,1,0,0,0,348, + 349,1,0,0,0,349,351,3,66,33,0,350,347,1,0,0,0,351,354,1,0,0,0,352, + 350,1,0,0,0,352,353,1,0,0,0,353,359,1,0,0,0,354,352,1,0,0,0,355, + 357,5,131,0,0,356,355,1,0,0,0,356,357,1,0,0,0,357,358,1,0,0,0,358, + 360,3,68,34,0,359,356,1,0,0,0,359,360,1,0,0,0,360,21,1,0,0,0,361, + 363,5,52,0,0,362,364,5,131,0,0,363,362,1,0,0,0,363,364,1,0,0,0,364, + 365,1,0,0,0,365,366,3,100,50,0,366,367,5,131,0,0,367,368,5,53,0, + 0,368,369,5,131,0,0,369,370,3,172,86,0,370,23,1,0,0,0,371,373,5, + 54,0,0,372,374,5,131,0,0,373,372,1,0,0,0,373,374,1,0,0,0,374,375, + 1,0,0,0,375,380,3,72,36,0,376,377,5,131,0,0,377,379,3,26,13,0,378, + 376,1,0,0,0,379,382,1,0,0,0,380,378,1,0,0,0,380,381,1,0,0,0,381, + 25,1,0,0,0,382,380,1,0,0,0,383,384,5,55,0,0,384,385,5,131,0,0,385, + 386,5,51,0,0,386,387,5,131,0,0,387,394,3,30,15,0,388,389,5,55,0, + 0,389,390,5,131,0,0,390,391,5,56,0,0,391,392,5,131,0,0,392,394,3, + 30,15,0,393,383,1,0,0,0,393,388,1,0,0,0,394,27,1,0,0,0,395,397,5, + 56,0,0,396,398,5,131,0,0,397,396,1,0,0,0,397,398,1,0,0,0,398,399, + 1,0,0,0,399,400,3,70,35,0,400,29,1,0,0,0,401,403,5,57,0,0,402,404, + 5,131,0,0,403,402,1,0,0,0,403,404,1,0,0,0,404,405,1,0,0,0,405,416, + 3,32,16,0,406,408,5,131,0,0,407,406,1,0,0,0,407,408,1,0,0,0,408, + 409,1,0,0,0,409,411,5,2,0,0,410,412,5,131,0,0,411,410,1,0,0,0,411, + 412,1,0,0,0,412,413,1,0,0,0,413,415,3,32,16,0,414,407,1,0,0,0,415, + 418,1,0,0,0,416,414,1,0,0,0,416,417,1,0,0,0,417,31,1,0,0,0,418,416, + 1,0,0,0,419,421,3,180,90,0,420,422,5,131,0,0,421,420,1,0,0,0,421, + 422,1,0,0,0,422,423,1,0,0,0,423,425,5,3,0,0,424,426,5,131,0,0,425, + 424,1,0,0,0,425,426,1,0,0,0,426,427,1,0,0,0,427,428,3,100,50,0,428, + 456,1,0,0,0,429,431,3,172,86,0,430,432,5,131,0,0,431,430,1,0,0,0, + 431,432,1,0,0,0,432,433,1,0,0,0,433,435,5,3,0,0,434,436,5,131,0, + 0,435,434,1,0,0,0,435,436,1,0,0,0,436,437,1,0,0,0,437,438,3,100, + 50,0,438,456,1,0,0,0,439,441,3,172,86,0,440,442,5,131,0,0,441,440, + 1,0,0,0,441,442,1,0,0,0,442,443,1,0,0,0,443,445,5,4,0,0,444,446, + 5,131,0,0,445,444,1,0,0,0,445,446,1,0,0,0,446,447,1,0,0,0,447,448, + 3,100,50,0,448,456,1,0,0,0,449,451,3,172,86,0,450,452,5,131,0,0, + 451,450,1,0,0,0,451,452,1,0,0,0,452,453,1,0,0,0,453,454,3,90,45, + 0,454,456,1,0,0,0,455,419,1,0,0,0,455,429,1,0,0,0,455,439,1,0,0, + 0,455,449,1,0,0,0,456,33,1,0,0,0,457,458,5,58,0,0,458,460,5,131, + 0,0,459,457,1,0,0,0,459,460,1,0,0,0,460,461,1,0,0,0,461,463,5,59, + 0,0,462,464,5,131,0,0,463,462,1,0,0,0,463,464,1,0,0,0,464,465,1, + 0,0,0,465,476,3,100,50,0,466,468,5,131,0,0,467,466,1,0,0,0,467,468, + 1,0,0,0,468,469,1,0,0,0,469,471,5,2,0,0,470,472,5,131,0,0,471,470, + 1,0,0,0,471,472,1,0,0,0,472,473,1,0,0,0,473,475,3,100,50,0,474,467, + 1,0,0,0,475,478,1,0,0,0,476,474,1,0,0,0,476,477,1,0,0,0,477,35,1, + 0,0,0,478,476,1,0,0,0,479,480,5,60,0,0,480,481,5,131,0,0,481,492, + 3,38,19,0,482,484,5,131,0,0,483,482,1,0,0,0,483,484,1,0,0,0,484, + 485,1,0,0,0,485,487,5,2,0,0,486,488,5,131,0,0,487,486,1,0,0,0,487, + 488,1,0,0,0,488,489,1,0,0,0,489,491,3,38,19,0,490,483,1,0,0,0,491, + 494,1,0,0,0,492,490,1,0,0,0,492,493,1,0,0,0,493,37,1,0,0,0,494,492, + 1,0,0,0,495,496,3,172,86,0,496,497,3,90,45,0,497,500,1,0,0,0,498, + 500,3,180,90,0,499,495,1,0,0,0,499,498,1,0,0,0,500,39,1,0,0,0,501, + 502,5,61,0,0,502,503,5,131,0,0,503,510,3,152,76,0,504,506,5,131, + 0,0,505,504,1,0,0,0,505,506,1,0,0,0,506,507,1,0,0,0,507,508,5,62, + 0,0,508,509,5,131,0,0,509,511,3,44,22,0,510,505,1,0,0,0,510,511, + 1,0,0,0,511,41,1,0,0,0,512,513,5,61,0,0,513,516,5,131,0,0,514,517, + 3,152,76,0,515,517,3,154,77,0,516,514,1,0,0,0,516,515,1,0,0,0,517, + 522,1,0,0,0,518,519,5,131,0,0,519,520,5,62,0,0,520,521,5,131,0,0, + 521,523,3,44,22,0,522,518,1,0,0,0,522,523,1,0,0,0,523,43,1,0,0,0, + 524,540,5,5,0,0,525,536,3,46,23,0,526,528,5,131,0,0,527,526,1,0, + 0,0,527,528,1,0,0,0,528,529,1,0,0,0,529,531,5,2,0,0,530,532,5,131, + 0,0,531,530,1,0,0,0,531,532,1,0,0,0,532,533,1,0,0,0,533,535,3,46, + 23,0,534,527,1,0,0,0,535,538,1,0,0,0,536,534,1,0,0,0,536,537,1,0, + 0,0,537,540,1,0,0,0,538,536,1,0,0,0,539,524,1,0,0,0,539,525,1,0, + 0,0,540,545,1,0,0,0,541,543,5,131,0,0,542,541,1,0,0,0,542,543,1, + 0,0,0,543,544,1,0,0,0,544,546,3,68,34,0,545,542,1,0,0,0,545,546, + 1,0,0,0,546,45,1,0,0,0,547,548,3,156,78,0,548,549,5,131,0,0,549, + 550,5,53,0,0,550,551,5,131,0,0,551,553,1,0,0,0,552,547,1,0,0,0,552, + 553,1,0,0,0,553,554,1,0,0,0,554,555,3,172,86,0,555,47,1,0,0,0,556, + 561,5,63,0,0,557,559,5,131,0,0,558,557,1,0,0,0,558,559,1,0,0,0,559, + 560,1,0,0,0,560,562,5,64,0,0,561,558,1,0,0,0,561,562,1,0,0,0,562, + 563,1,0,0,0,563,564,5,131,0,0,564,569,3,52,26,0,565,567,5,131,0, + 0,566,565,1,0,0,0,566,567,1,0,0,0,567,568,1,0,0,0,568,570,3,68,34, + 0,569,566,1,0,0,0,569,570,1,0,0,0,570,49,1,0,0,0,571,576,5,65,0, + 0,572,574,5,131,0,0,573,572,1,0,0,0,573,574,1,0,0,0,574,575,1,0, + 0,0,575,577,5,64,0,0,576,573,1,0,0,0,576,577,1,0,0,0,577,578,1,0, + 0,0,578,579,5,131,0,0,579,580,3,52,26,0,580,51,1,0,0,0,581,584,3, + 54,27,0,582,583,5,131,0,0,583,585,3,58,29,0,584,582,1,0,0,0,584, + 585,1,0,0,0,585,588,1,0,0,0,586,587,5,131,0,0,587,589,3,60,30,0, + 588,586,1,0,0,0,588,589,1,0,0,0,589,592,1,0,0,0,590,591,5,131,0, + 0,591,593,3,62,31,0,592,590,1,0,0,0,592,593,1,0,0,0,593,53,1,0,0, + 0,594,605,5,5,0,0,595,597,5,131,0,0,596,595,1,0,0,0,596,597,1,0, + 0,0,597,598,1,0,0,0,598,600,5,2,0,0,599,601,5,131,0,0,600,599,1, + 0,0,0,600,601,1,0,0,0,601,602,1,0,0,0,602,604,3,56,28,0,603,596, + 1,0,0,0,604,607,1,0,0,0,605,603,1,0,0,0,605,606,1,0,0,0,606,623, + 1,0,0,0,607,605,1,0,0,0,608,619,3,56,28,0,609,611,5,131,0,0,610, + 609,1,0,0,0,610,611,1,0,0,0,611,612,1,0,0,0,612,614,5,2,0,0,613, + 615,5,131,0,0,614,613,1,0,0,0,614,615,1,0,0,0,615,616,1,0,0,0,616, + 618,3,56,28,0,617,610,1,0,0,0,618,621,1,0,0,0,619,617,1,0,0,0,619, + 620,1,0,0,0,620,623,1,0,0,0,621,619,1,0,0,0,622,594,1,0,0,0,622, + 608,1,0,0,0,623,55,1,0,0,0,624,625,3,100,50,0,625,626,5,131,0,0, + 626,627,5,53,0,0,627,628,5,131,0,0,628,629,3,172,86,0,629,632,1, + 0,0,0,630,632,3,100,50,0,631,624,1,0,0,0,631,630,1,0,0,0,632,57, + 1,0,0,0,633,634,5,66,0,0,634,635,5,131,0,0,635,636,5,67,0,0,636, + 637,5,131,0,0,637,645,3,64,32,0,638,640,5,2,0,0,639,641,5,131,0, + 0,640,639,1,0,0,0,640,641,1,0,0,0,641,642,1,0,0,0,642,644,3,64,32, + 0,643,638,1,0,0,0,644,647,1,0,0,0,645,643,1,0,0,0,645,646,1,0,0, + 0,646,59,1,0,0,0,647,645,1,0,0,0,648,649,5,68,0,0,649,650,5,131, + 0,0,650,651,3,100,50,0,651,61,1,0,0,0,652,653,5,69,0,0,653,654,5, + 131,0,0,654,655,3,100,50,0,655,63,1,0,0,0,656,661,3,100,50,0,657, + 659,5,131,0,0,658,657,1,0,0,0,658,659,1,0,0,0,659,660,1,0,0,0,660, + 662,7,0,0,0,661,658,1,0,0,0,661,662,1,0,0,0,662,65,1,0,0,0,663,664, + 5,74,0,0,664,665,5,131,0,0,665,666,5,75,0,0,666,667,5,131,0,0,667, + 668,5,55,0,0,668,669,5,131,0,0,669,678,3,172,86,0,670,671,5,74,0, + 0,671,672,5,131,0,0,672,673,5,76,0,0,673,674,5,131,0,0,674,675,5, + 55,0,0,675,676,5,131,0,0,676,678,3,172,86,0,677,663,1,0,0,0,677, + 670,1,0,0,0,678,67,1,0,0,0,679,680,5,77,0,0,680,681,5,131,0,0,681, + 682,3,100,50,0,682,69,1,0,0,0,683,694,3,72,36,0,684,686,5,131,0, + 0,685,684,1,0,0,0,685,686,1,0,0,0,686,687,1,0,0,0,687,689,5,2,0, + 0,688,690,5,131,0,0,689,688,1,0,0,0,689,690,1,0,0,0,690,691,1,0, + 0,0,691,693,3,72,36,0,692,685,1,0,0,0,693,696,1,0,0,0,694,692,1, + 0,0,0,694,695,1,0,0,0,695,71,1,0,0,0,696,694,1,0,0,0,697,699,3,172, + 86,0,698,700,5,131,0,0,699,698,1,0,0,0,699,700,1,0,0,0,700,701,1, + 0,0,0,701,703,5,3,0,0,702,704,5,131,0,0,703,702,1,0,0,0,703,704, + 1,0,0,0,704,705,1,0,0,0,705,706,3,74,37,0,706,709,1,0,0,0,707,709, + 3,74,37,0,708,697,1,0,0,0,708,707,1,0,0,0,709,73,1,0,0,0,710,711, + 3,76,38,0,711,75,1,0,0,0,712,719,3,78,39,0,713,715,5,131,0,0,714, + 713,1,0,0,0,714,715,1,0,0,0,715,716,1,0,0,0,716,718,3,80,40,0,717, + 714,1,0,0,0,718,721,1,0,0,0,719,717,1,0,0,0,719,720,1,0,0,0,720, + 727,1,0,0,0,721,719,1,0,0,0,722,723,5,6,0,0,723,724,3,76,38,0,724, + 725,5,7,0,0,725,727,1,0,0,0,726,712,1,0,0,0,726,722,1,0,0,0,727, + 77,1,0,0,0,728,730,5,6,0,0,729,731,5,131,0,0,730,729,1,0,0,0,730, + 731,1,0,0,0,731,736,1,0,0,0,732,734,3,172,86,0,733,735,5,131,0,0, + 734,733,1,0,0,0,734,735,1,0,0,0,735,737,1,0,0,0,736,732,1,0,0,0, + 736,737,1,0,0,0,737,742,1,0,0,0,738,740,3,90,45,0,739,741,5,131, + 0,0,740,739,1,0,0,0,740,741,1,0,0,0,741,743,1,0,0,0,742,738,1,0, + 0,0,742,743,1,0,0,0,743,748,1,0,0,0,744,746,3,86,43,0,745,747,5, + 131,0,0,746,745,1,0,0,0,746,747,1,0,0,0,747,749,1,0,0,0,748,744, + 1,0,0,0,748,749,1,0,0,0,749,750,1,0,0,0,750,751,5,7,0,0,751,79,1, + 0,0,0,752,754,3,82,41,0,753,755,5,131,0,0,754,753,1,0,0,0,754,755, + 1,0,0,0,755,756,1,0,0,0,756,757,3,78,39,0,757,81,1,0,0,0,758,760, + 3,194,97,0,759,761,5,131,0,0,760,759,1,0,0,0,760,761,1,0,0,0,761, + 762,1,0,0,0,762,764,3,198,99,0,763,765,5,131,0,0,764,763,1,0,0,0, + 764,765,1,0,0,0,765,767,1,0,0,0,766,768,3,84,42,0,767,766,1,0,0, + 0,767,768,1,0,0,0,768,770,1,0,0,0,769,771,5,131,0,0,770,769,1,0, + 0,0,770,771,1,0,0,0,771,772,1,0,0,0,772,774,3,198,99,0,773,775,5, + 131,0,0,774,773,1,0,0,0,774,775,1,0,0,0,775,776,1,0,0,0,776,777, + 3,196,98,0,777,823,1,0,0,0,778,780,3,194,97,0,779,781,5,131,0,0, + 780,779,1,0,0,0,780,781,1,0,0,0,781,782,1,0,0,0,782,784,3,198,99, + 0,783,785,5,131,0,0,784,783,1,0,0,0,784,785,1,0,0,0,785,787,1,0, + 0,0,786,788,3,84,42,0,787,786,1,0,0,0,787,788,1,0,0,0,788,790,1, + 0,0,0,789,791,5,131,0,0,790,789,1,0,0,0,790,791,1,0,0,0,791,792, + 1,0,0,0,792,793,3,198,99,0,793,823,1,0,0,0,794,796,3,198,99,0,795, + 797,5,131,0,0,796,795,1,0,0,0,796,797,1,0,0,0,797,799,1,0,0,0,798, + 800,3,84,42,0,799,798,1,0,0,0,799,800,1,0,0,0,800,802,1,0,0,0,801, + 803,5,131,0,0,802,801,1,0,0,0,802,803,1,0,0,0,803,804,1,0,0,0,804, + 806,3,198,99,0,805,807,5,131,0,0,806,805,1,0,0,0,806,807,1,0,0,0, + 807,808,1,0,0,0,808,809,3,196,98,0,809,823,1,0,0,0,810,812,3,198, + 99,0,811,813,5,131,0,0,812,811,1,0,0,0,812,813,1,0,0,0,813,815,1, + 0,0,0,814,816,3,84,42,0,815,814,1,0,0,0,815,816,1,0,0,0,816,818, + 1,0,0,0,817,819,5,131,0,0,818,817,1,0,0,0,818,819,1,0,0,0,819,820, + 1,0,0,0,820,821,3,198,99,0,821,823,1,0,0,0,822,758,1,0,0,0,822,778, + 1,0,0,0,822,794,1,0,0,0,822,810,1,0,0,0,823,83,1,0,0,0,824,826,5, + 8,0,0,825,827,5,131,0,0,826,825,1,0,0,0,826,827,1,0,0,0,827,832, + 1,0,0,0,828,830,3,172,86,0,829,831,5,131,0,0,830,829,1,0,0,0,830, + 831,1,0,0,0,831,833,1,0,0,0,832,828,1,0,0,0,832,833,1,0,0,0,833, + 838,1,0,0,0,834,836,3,88,44,0,835,837,5,131,0,0,836,835,1,0,0,0, + 836,837,1,0,0,0,837,839,1,0,0,0,838,834,1,0,0,0,838,839,1,0,0,0, + 839,841,1,0,0,0,840,842,3,94,47,0,841,840,1,0,0,0,841,842,1,0,0, + 0,842,847,1,0,0,0,843,845,3,86,43,0,844,846,5,131,0,0,845,844,1, + 0,0,0,845,846,1,0,0,0,846,848,1,0,0,0,847,843,1,0,0,0,847,848,1, + 0,0,0,848,849,1,0,0,0,849,850,5,9,0,0,850,85,1,0,0,0,851,854,3,176, + 88,0,852,854,3,178,89,0,853,851,1,0,0,0,853,852,1,0,0,0,854,87,1, + 0,0,0,855,857,5,10,0,0,856,858,5,131,0,0,857,856,1,0,0,0,857,858, + 1,0,0,0,858,859,1,0,0,0,859,873,3,98,49,0,860,862,5,131,0,0,861, + 860,1,0,0,0,861,862,1,0,0,0,862,863,1,0,0,0,863,865,5,11,0,0,864, + 866,5,10,0,0,865,864,1,0,0,0,865,866,1,0,0,0,866,868,1,0,0,0,867, + 869,5,131,0,0,868,867,1,0,0,0,868,869,1,0,0,0,869,870,1,0,0,0,870, + 872,3,98,49,0,871,861,1,0,0,0,872,875,1,0,0,0,873,871,1,0,0,0,873, + 874,1,0,0,0,874,89,1,0,0,0,875,873,1,0,0,0,876,883,3,92,46,0,877, + 879,5,131,0,0,878,877,1,0,0,0,878,879,1,0,0,0,879,880,1,0,0,0,880, + 882,3,92,46,0,881,878,1,0,0,0,882,885,1,0,0,0,883,881,1,0,0,0,883, + 884,1,0,0,0,884,91,1,0,0,0,885,883,1,0,0,0,886,888,5,10,0,0,887, + 889,5,131,0,0,888,887,1,0,0,0,888,889,1,0,0,0,889,890,1,0,0,0,890, + 891,3,96,48,0,891,93,1,0,0,0,892,894,5,5,0,0,893,895,5,131,0,0,894, + 893,1,0,0,0,894,895,1,0,0,0,895,900,1,0,0,0,896,898,3,184,92,0,897, + 899,5,131,0,0,898,897,1,0,0,0,898,899,1,0,0,0,899,901,1,0,0,0,900, + 896,1,0,0,0,900,901,1,0,0,0,901,912,1,0,0,0,902,904,5,12,0,0,903, + 905,5,131,0,0,904,903,1,0,0,0,904,905,1,0,0,0,905,910,1,0,0,0,906, + 908,3,184,92,0,907,909,5,131,0,0,908,907,1,0,0,0,908,909,1,0,0,0, + 909,911,1,0,0,0,910,906,1,0,0,0,910,911,1,0,0,0,911,913,1,0,0,0, + 912,902,1,0,0,0,912,913,1,0,0,0,913,95,1,0,0,0,914,915,3,188,94, + 0,915,97,1,0,0,0,916,917,3,188,94,0,917,99,1,0,0,0,918,919,3,102, + 51,0,919,101,1,0,0,0,920,927,3,104,52,0,921,922,5,131,0,0,922,923, + 5,78,0,0,923,924,5,131,0,0,924,926,3,104,52,0,925,921,1,0,0,0,926, + 929,1,0,0,0,927,925,1,0,0,0,927,928,1,0,0,0,928,103,1,0,0,0,929, + 927,1,0,0,0,930,937,3,106,53,0,931,932,5,131,0,0,932,933,5,79,0, + 0,933,934,5,131,0,0,934,936,3,106,53,0,935,931,1,0,0,0,936,939,1, + 0,0,0,937,935,1,0,0,0,937,938,1,0,0,0,938,105,1,0,0,0,939,937,1, + 0,0,0,940,947,3,108,54,0,941,942,5,131,0,0,942,943,5,80,0,0,943, + 944,5,131,0,0,944,946,3,108,54,0,945,941,1,0,0,0,946,949,1,0,0,0, + 947,945,1,0,0,0,947,948,1,0,0,0,948,107,1,0,0,0,949,947,1,0,0,0, + 950,952,5,81,0,0,951,953,5,131,0,0,952,951,1,0,0,0,952,953,1,0,0, + 0,953,955,1,0,0,0,954,950,1,0,0,0,955,958,1,0,0,0,956,954,1,0,0, + 0,956,957,1,0,0,0,957,959,1,0,0,0,958,956,1,0,0,0,959,960,3,110, + 55,0,960,109,1,0,0,0,961,968,3,112,56,0,962,964,5,131,0,0,963,962, + 1,0,0,0,963,964,1,0,0,0,964,965,1,0,0,0,965,967,3,138,69,0,966,963, + 1,0,0,0,967,970,1,0,0,0,968,966,1,0,0,0,968,969,1,0,0,0,969,111, + 1,0,0,0,970,968,1,0,0,0,971,990,3,114,57,0,972,974,5,131,0,0,973, + 972,1,0,0,0,973,974,1,0,0,0,974,975,1,0,0,0,975,977,5,13,0,0,976, + 978,5,131,0,0,977,976,1,0,0,0,977,978,1,0,0,0,978,979,1,0,0,0,979, + 989,3,114,57,0,980,982,5,131,0,0,981,980,1,0,0,0,981,982,1,0,0,0, + 982,983,1,0,0,0,983,985,5,14,0,0,984,986,5,131,0,0,985,984,1,0,0, + 0,985,986,1,0,0,0,986,987,1,0,0,0,987,989,3,114,57,0,988,973,1,0, + 0,0,988,981,1,0,0,0,989,992,1,0,0,0,990,988,1,0,0,0,990,991,1,0, + 0,0,991,113,1,0,0,0,992,990,1,0,0,0,993,1020,3,116,58,0,994,996, + 5,131,0,0,995,994,1,0,0,0,995,996,1,0,0,0,996,997,1,0,0,0,997,999, + 5,5,0,0,998,1000,5,131,0,0,999,998,1,0,0,0,999,1000,1,0,0,0,1000, + 1001,1,0,0,0,1001,1019,3,116,58,0,1002,1004,5,131,0,0,1003,1002, + 1,0,0,0,1003,1004,1,0,0,0,1004,1005,1,0,0,0,1005,1007,5,15,0,0,1006, + 1008,5,131,0,0,1007,1006,1,0,0,0,1007,1008,1,0,0,0,1008,1009,1,0, + 0,0,1009,1019,3,116,58,0,1010,1012,5,131,0,0,1011,1010,1,0,0,0,1011, + 1012,1,0,0,0,1012,1013,1,0,0,0,1013,1015,5,16,0,0,1014,1016,5,131, + 0,0,1015,1014,1,0,0,0,1015,1016,1,0,0,0,1016,1017,1,0,0,0,1017,1019, + 3,116,58,0,1018,995,1,0,0,0,1018,1003,1,0,0,0,1018,1011,1,0,0,0, + 1019,1022,1,0,0,0,1020,1018,1,0,0,0,1020,1021,1,0,0,0,1021,115,1, + 0,0,0,1022,1020,1,0,0,0,1023,1034,3,118,59,0,1024,1026,5,131,0,0, + 1025,1024,1,0,0,0,1025,1026,1,0,0,0,1026,1027,1,0,0,0,1027,1029, + 5,17,0,0,1028,1030,5,131,0,0,1029,1028,1,0,0,0,1029,1030,1,0,0,0, + 1030,1031,1,0,0,0,1031,1033,3,118,59,0,1032,1025,1,0,0,0,1033,1036, + 1,0,0,0,1034,1032,1,0,0,0,1034,1035,1,0,0,0,1035,117,1,0,0,0,1036, + 1034,1,0,0,0,1037,1039,7,1,0,0,1038,1040,5,131,0,0,1039,1038,1,0, + 0,0,1039,1040,1,0,0,0,1040,1042,1,0,0,0,1041,1037,1,0,0,0,1042,1045, + 1,0,0,0,1043,1041,1,0,0,0,1043,1044,1,0,0,0,1044,1046,1,0,0,0,1045, + 1043,1,0,0,0,1046,1047,3,120,60,0,1047,119,1,0,0,0,1048,1054,3,128, + 64,0,1049,1053,3,124,62,0,1050,1053,3,122,61,0,1051,1053,3,126,63, + 0,1052,1049,1,0,0,0,1052,1050,1,0,0,0,1052,1051,1,0,0,0,1053,1056, + 1,0,0,0,1054,1052,1,0,0,0,1054,1055,1,0,0,0,1055,121,1,0,0,0,1056, + 1054,1,0,0,0,1057,1058,5,131,0,0,1058,1060,5,82,0,0,1059,1061,5, + 131,0,0,1060,1059,1,0,0,0,1060,1061,1,0,0,0,1061,1062,1,0,0,0,1062, + 1083,3,128,64,0,1063,1065,5,131,0,0,1064,1063,1,0,0,0,1064,1065, + 1,0,0,0,1065,1066,1,0,0,0,1066,1067,5,8,0,0,1067,1068,3,100,50,0, + 1068,1069,5,9,0,0,1069,1083,1,0,0,0,1070,1072,5,131,0,0,1071,1070, + 1,0,0,0,1071,1072,1,0,0,0,1072,1073,1,0,0,0,1073,1075,5,8,0,0,1074, + 1076,3,100,50,0,1075,1074,1,0,0,0,1075,1076,1,0,0,0,1076,1077,1, + 0,0,0,1077,1079,5,12,0,0,1078,1080,3,100,50,0,1079,1078,1,0,0,0, + 1079,1080,1,0,0,0,1080,1081,1,0,0,0,1081,1083,5,9,0,0,1082,1057, + 1,0,0,0,1082,1064,1,0,0,0,1082,1071,1,0,0,0,1083,123,1,0,0,0,1084, + 1085,5,131,0,0,1085,1086,5,83,0,0,1086,1087,5,131,0,0,1087,1097, + 5,63,0,0,1088,1089,5,131,0,0,1089,1090,5,84,0,0,1090,1091,5,131, + 0,0,1091,1097,5,63,0,0,1092,1093,5,131,0,0,1093,1097,5,85,0,0,1094, + 1095,5,131,0,0,1095,1097,5,86,0,0,1096,1084,1,0,0,0,1096,1088,1, + 0,0,0,1096,1092,1,0,0,0,1096,1094,1,0,0,0,1097,1099,1,0,0,0,1098, + 1100,5,131,0,0,1099,1098,1,0,0,0,1099,1100,1,0,0,0,1100,1101,1,0, + 0,0,1101,1102,3,128,64,0,1102,125,1,0,0,0,1103,1104,5,131,0,0,1104, + 1105,5,87,0,0,1105,1106,5,131,0,0,1106,1114,5,88,0,0,1107,1108,5, + 131,0,0,1108,1109,5,87,0,0,1109,1110,5,131,0,0,1110,1111,5,81,0, + 0,1111,1112,5,131,0,0,1112,1114,5,88,0,0,1113,1103,1,0,0,0,1113, + 1107,1,0,0,0,1114,127,1,0,0,0,1115,1122,3,130,65,0,1116,1118,5,131, + 0,0,1117,1116,1,0,0,0,1117,1118,1,0,0,0,1118,1119,1,0,0,0,1119,1121, + 3,166,83,0,1120,1117,1,0,0,0,1121,1124,1,0,0,0,1122,1120,1,0,0,0, + 1122,1123,1,0,0,0,1123,1129,1,0,0,0,1124,1122,1,0,0,0,1125,1127, + 5,131,0,0,1126,1125,1,0,0,0,1126,1127,1,0,0,0,1127,1128,1,0,0,0, + 1128,1130,3,90,45,0,1129,1126,1,0,0,0,1129,1130,1,0,0,0,1130,129, + 1,0,0,0,1131,1210,3,132,66,0,1132,1210,3,178,89,0,1133,1210,3,168, + 84,0,1134,1136,5,89,0,0,1135,1137,5,131,0,0,1136,1135,1,0,0,0,1136, + 1137,1,0,0,0,1137,1138,1,0,0,0,1138,1140,5,6,0,0,1139,1141,5,131, + 0,0,1140,1139,1,0,0,0,1140,1141,1,0,0,0,1141,1142,1,0,0,0,1142,1144, + 5,5,0,0,1143,1145,5,131,0,0,1144,1143,1,0,0,0,1144,1145,1,0,0,0, + 1145,1146,1,0,0,0,1146,1210,5,7,0,0,1147,1210,3,162,81,0,1148,1210, + 3,164,82,0,1149,1151,5,49,0,0,1150,1152,5,131,0,0,1151,1150,1,0, + 0,0,1151,1152,1,0,0,0,1152,1153,1,0,0,0,1153,1155,5,6,0,0,1154,1156, + 5,131,0,0,1155,1154,1,0,0,0,1155,1156,1,0,0,0,1156,1157,1,0,0,0, + 1157,1159,3,144,72,0,1158,1160,5,131,0,0,1159,1158,1,0,0,0,1159, + 1160,1,0,0,0,1160,1161,1,0,0,0,1161,1162,5,7,0,0,1162,1210,1,0,0, + 0,1163,1165,5,90,0,0,1164,1166,5,131,0,0,1165,1164,1,0,0,0,1165, + 1166,1,0,0,0,1166,1167,1,0,0,0,1167,1169,5,6,0,0,1168,1170,5,131, + 0,0,1169,1168,1,0,0,0,1169,1170,1,0,0,0,1170,1171,1,0,0,0,1171,1173, + 3,144,72,0,1172,1174,5,131,0,0,1173,1172,1,0,0,0,1173,1174,1,0,0, + 0,1174,1175,1,0,0,0,1175,1176,5,7,0,0,1176,1210,1,0,0,0,1177,1179, + 5,91,0,0,1178,1180,5,131,0,0,1179,1178,1,0,0,0,1179,1180,1,0,0,0, + 1180,1181,1,0,0,0,1181,1183,5,6,0,0,1182,1184,5,131,0,0,1183,1182, + 1,0,0,0,1183,1184,1,0,0,0,1184,1185,1,0,0,0,1185,1187,3,144,72,0, + 1186,1188,5,131,0,0,1187,1186,1,0,0,0,1187,1188,1,0,0,0,1188,1189, + 1,0,0,0,1189,1190,5,7,0,0,1190,1210,1,0,0,0,1191,1193,5,92,0,0,1192, + 1194,5,131,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0,1194,1195,1,0, + 0,0,1195,1197,5,6,0,0,1196,1198,5,131,0,0,1197,1196,1,0,0,0,1197, + 1198,1,0,0,0,1198,1199,1,0,0,0,1199,1201,3,144,72,0,1200,1202,5, + 131,0,0,1201,1200,1,0,0,0,1201,1202,1,0,0,0,1202,1203,1,0,0,0,1203, + 1204,5,7,0,0,1204,1210,1,0,0,0,1205,1210,3,142,71,0,1206,1210,3, + 140,70,0,1207,1210,3,148,74,0,1208,1210,3,172,86,0,1209,1131,1,0, + 0,0,1209,1132,1,0,0,0,1209,1133,1,0,0,0,1209,1134,1,0,0,0,1209,1147, + 1,0,0,0,1209,1148,1,0,0,0,1209,1149,1,0,0,0,1209,1163,1,0,0,0,1209, + 1177,1,0,0,0,1209,1191,1,0,0,0,1209,1205,1,0,0,0,1209,1206,1,0,0, + 0,1209,1207,1,0,0,0,1209,1208,1,0,0,0,1210,131,1,0,0,0,1211,1218, + 3,174,87,0,1212,1218,5,101,0,0,1213,1218,3,134,67,0,1214,1218,5, + 88,0,0,1215,1218,3,176,88,0,1216,1218,3,136,68,0,1217,1211,1,0,0, + 0,1217,1212,1,0,0,0,1217,1213,1,0,0,0,1217,1214,1,0,0,0,1217,1215, + 1,0,0,0,1217,1216,1,0,0,0,1218,133,1,0,0,0,1219,1220,7,2,0,0,1220, + 135,1,0,0,0,1221,1223,5,8,0,0,1222,1224,5,131,0,0,1223,1222,1,0, + 0,0,1223,1224,1,0,0,0,1224,1242,1,0,0,0,1225,1227,3,100,50,0,1226, + 1228,5,131,0,0,1227,1226,1,0,0,0,1227,1228,1,0,0,0,1228,1239,1,0, + 0,0,1229,1231,5,2,0,0,1230,1232,5,131,0,0,1231,1230,1,0,0,0,1231, + 1232,1,0,0,0,1232,1233,1,0,0,0,1233,1235,3,100,50,0,1234,1236,5, + 131,0,0,1235,1234,1,0,0,0,1235,1236,1,0,0,0,1236,1238,1,0,0,0,1237, + 1229,1,0,0,0,1238,1241,1,0,0,0,1239,1237,1,0,0,0,1239,1240,1,0,0, + 0,1240,1243,1,0,0,0,1241,1239,1,0,0,0,1242,1225,1,0,0,0,1242,1243, + 1,0,0,0,1243,1244,1,0,0,0,1244,1245,5,9,0,0,1245,137,1,0,0,0,1246, + 1248,5,3,0,0,1247,1249,5,131,0,0,1248,1247,1,0,0,0,1248,1249,1,0, + 0,0,1249,1250,1,0,0,0,1250,1277,3,112,56,0,1251,1253,5,18,0,0,1252, + 1254,5,131,0,0,1253,1252,1,0,0,0,1253,1254,1,0,0,0,1254,1255,1,0, + 0,0,1255,1277,3,112,56,0,1256,1258,5,19,0,0,1257,1259,5,131,0,0, + 1258,1257,1,0,0,0,1258,1259,1,0,0,0,1259,1260,1,0,0,0,1260,1277, + 3,112,56,0,1261,1263,5,20,0,0,1262,1264,5,131,0,0,1263,1262,1,0, + 0,0,1263,1264,1,0,0,0,1264,1265,1,0,0,0,1265,1277,3,112,56,0,1266, + 1268,5,21,0,0,1267,1269,5,131,0,0,1268,1267,1,0,0,0,1268,1269,1, + 0,0,0,1269,1270,1,0,0,0,1270,1277,3,112,56,0,1271,1273,5,22,0,0, + 1272,1274,5,131,0,0,1273,1272,1,0,0,0,1273,1274,1,0,0,0,1274,1275, + 1,0,0,0,1275,1277,3,112,56,0,1276,1246,1,0,0,0,1276,1251,1,0,0,0, + 1276,1256,1,0,0,0,1276,1261,1,0,0,0,1276,1266,1,0,0,0,1276,1271, + 1,0,0,0,1277,139,1,0,0,0,1278,1280,5,6,0,0,1279,1281,5,131,0,0,1280, + 1279,1,0,0,0,1280,1281,1,0,0,0,1281,1282,1,0,0,0,1282,1284,3,100, + 50,0,1283,1285,5,131,0,0,1284,1283,1,0,0,0,1284,1285,1,0,0,0,1285, + 1286,1,0,0,0,1286,1287,5,7,0,0,1287,141,1,0,0,0,1288,1293,3,78,39, + 0,1289,1291,5,131,0,0,1290,1289,1,0,0,0,1290,1291,1,0,0,0,1291,1292, + 1,0,0,0,1292,1294,3,80,40,0,1293,1290,1,0,0,0,1294,1295,1,0,0,0, + 1295,1293,1,0,0,0,1295,1296,1,0,0,0,1296,143,1,0,0,0,1297,1302,3, + 146,73,0,1298,1300,5,131,0,0,1299,1298,1,0,0,0,1299,1300,1,0,0,0, + 1300,1301,1,0,0,0,1301,1303,3,68,34,0,1302,1299,1,0,0,0,1302,1303, + 1,0,0,0,1303,145,1,0,0,0,1304,1305,3,172,86,0,1305,1306,5,131,0, + 0,1306,1307,5,82,0,0,1307,1308,5,131,0,0,1308,1309,3,100,50,0,1309, + 147,1,0,0,0,1310,1312,3,150,75,0,1311,1313,5,131,0,0,1312,1311,1, + 0,0,0,1312,1313,1,0,0,0,1313,1314,1,0,0,0,1314,1316,5,6,0,0,1315, + 1317,5,131,0,0,1316,1315,1,0,0,0,1316,1317,1,0,0,0,1317,1322,1,0, + 0,0,1318,1320,5,64,0,0,1319,1321,5,131,0,0,1320,1319,1,0,0,0,1320, + 1321,1,0,0,0,1321,1323,1,0,0,0,1322,1318,1,0,0,0,1322,1323,1,0,0, + 0,1323,1341,1,0,0,0,1324,1326,3,100,50,0,1325,1327,5,131,0,0,1326, + 1325,1,0,0,0,1326,1327,1,0,0,0,1327,1338,1,0,0,0,1328,1330,5,2,0, + 0,1329,1331,5,131,0,0,1330,1329,1,0,0,0,1330,1331,1,0,0,0,1331,1332, + 1,0,0,0,1332,1334,3,100,50,0,1333,1335,5,131,0,0,1334,1333,1,0,0, + 0,1334,1335,1,0,0,0,1335,1337,1,0,0,0,1336,1328,1,0,0,0,1337,1340, + 1,0,0,0,1338,1336,1,0,0,0,1338,1339,1,0,0,0,1339,1342,1,0,0,0,1340, + 1338,1,0,0,0,1341,1324,1,0,0,0,1341,1342,1,0,0,0,1342,1343,1,0,0, + 0,1343,1344,5,7,0,0,1344,149,1,0,0,0,1345,1346,3,160,80,0,1346,1347, + 3,190,95,0,1347,1350,1,0,0,0,1348,1350,5,95,0,0,1349,1345,1,0,0, + 0,1349,1348,1,0,0,0,1350,151,1,0,0,0,1351,1353,3,158,79,0,1352,1354, + 5,131,0,0,1353,1352,1,0,0,0,1353,1354,1,0,0,0,1354,1355,1,0,0,0, + 1355,1357,5,6,0,0,1356,1358,5,131,0,0,1357,1356,1,0,0,0,1357,1358, + 1,0,0,0,1358,1376,1,0,0,0,1359,1361,3,100,50,0,1360,1362,5,131,0, + 0,1361,1360,1,0,0,0,1361,1362,1,0,0,0,1362,1373,1,0,0,0,1363,1365, + 5,2,0,0,1364,1366,5,131,0,0,1365,1364,1,0,0,0,1365,1366,1,0,0,0, + 1366,1367,1,0,0,0,1367,1369,3,100,50,0,1368,1370,5,131,0,0,1369, + 1368,1,0,0,0,1369,1370,1,0,0,0,1370,1372,1,0,0,0,1371,1363,1,0,0, + 0,1372,1375,1,0,0,0,1373,1371,1,0,0,0,1373,1374,1,0,0,0,1374,1377, + 1,0,0,0,1375,1373,1,0,0,0,1376,1359,1,0,0,0,1376,1377,1,0,0,0,1377, + 1378,1,0,0,0,1378,1379,5,7,0,0,1379,153,1,0,0,0,1380,1381,3,158, + 79,0,1381,155,1,0,0,0,1382,1383,3,190,95,0,1383,157,1,0,0,0,1384, + 1385,3,160,80,0,1385,1386,3,190,95,0,1386,159,1,0,0,0,1387,1388, + 3,190,95,0,1388,1389,5,23,0,0,1389,1391,1,0,0,0,1390,1387,1,0,0, + 0,1391,1394,1,0,0,0,1392,1390,1,0,0,0,1392,1393,1,0,0,0,1393,161, + 1,0,0,0,1394,1392,1,0,0,0,1395,1397,5,8,0,0,1396,1398,5,131,0,0, + 1397,1396,1,0,0,0,1397,1398,1,0,0,0,1398,1399,1,0,0,0,1399,1408, + 3,144,72,0,1400,1402,5,131,0,0,1401,1400,1,0,0,0,1401,1402,1,0,0, + 0,1402,1403,1,0,0,0,1403,1405,5,11,0,0,1404,1406,5,131,0,0,1405, + 1404,1,0,0,0,1405,1406,1,0,0,0,1406,1407,1,0,0,0,1407,1409,3,100, + 50,0,1408,1401,1,0,0,0,1408,1409,1,0,0,0,1409,1411,1,0,0,0,1410, + 1412,5,131,0,0,1411,1410,1,0,0,0,1411,1412,1,0,0,0,1412,1413,1,0, + 0,0,1413,1414,5,9,0,0,1414,163,1,0,0,0,1415,1417,5,8,0,0,1416,1418, + 5,131,0,0,1417,1416,1,0,0,0,1417,1418,1,0,0,0,1418,1427,1,0,0,0, + 1419,1421,3,172,86,0,1420,1422,5,131,0,0,1421,1420,1,0,0,0,1421, + 1422,1,0,0,0,1422,1423,1,0,0,0,1423,1425,5,3,0,0,1424,1426,5,131, + 0,0,1425,1424,1,0,0,0,1425,1426,1,0,0,0,1426,1428,1,0,0,0,1427,1419, + 1,0,0,0,1427,1428,1,0,0,0,1428,1429,1,0,0,0,1429,1431,3,142,71,0, + 1430,1432,5,131,0,0,1431,1430,1,0,0,0,1431,1432,1,0,0,0,1432,1441, + 1,0,0,0,1433,1435,5,77,0,0,1434,1436,5,131,0,0,1435,1434,1,0,0,0, + 1435,1436,1,0,0,0,1436,1437,1,0,0,0,1437,1439,3,100,50,0,1438,1440, + 5,131,0,0,1439,1438,1,0,0,0,1439,1440,1,0,0,0,1440,1442,1,0,0,0, + 1441,1433,1,0,0,0,1441,1442,1,0,0,0,1442,1443,1,0,0,0,1443,1445, + 5,11,0,0,1444,1446,5,131,0,0,1445,1444,1,0,0,0,1445,1446,1,0,0,0, + 1446,1447,1,0,0,0,1447,1449,3,100,50,0,1448,1450,5,131,0,0,1449, + 1448,1,0,0,0,1449,1450,1,0,0,0,1450,1451,1,0,0,0,1451,1452,5,9,0, + 0,1452,165,1,0,0,0,1453,1455,5,23,0,0,1454,1456,5,131,0,0,1455,1454, + 1,0,0,0,1455,1456,1,0,0,0,1456,1457,1,0,0,0,1457,1458,3,182,91,0, + 1458,167,1,0,0,0,1459,1464,5,96,0,0,1460,1462,5,131,0,0,1461,1460, + 1,0,0,0,1461,1462,1,0,0,0,1462,1463,1,0,0,0,1463,1465,3,170,85,0, + 1464,1461,1,0,0,0,1465,1466,1,0,0,0,1466,1464,1,0,0,0,1466,1467, + 1,0,0,0,1467,1482,1,0,0,0,1468,1470,5,96,0,0,1469,1471,5,131,0,0, + 1470,1469,1,0,0,0,1470,1471,1,0,0,0,1471,1472,1,0,0,0,1472,1477, + 3,100,50,0,1473,1475,5,131,0,0,1474,1473,1,0,0,0,1474,1475,1,0,0, + 0,1475,1476,1,0,0,0,1476,1478,3,170,85,0,1477,1474,1,0,0,0,1478, + 1479,1,0,0,0,1479,1477,1,0,0,0,1479,1480,1,0,0,0,1480,1482,1,0,0, + 0,1481,1459,1,0,0,0,1481,1468,1,0,0,0,1482,1491,1,0,0,0,1483,1485, + 5,131,0,0,1484,1483,1,0,0,0,1484,1485,1,0,0,0,1485,1486,1,0,0,0, + 1486,1488,5,97,0,0,1487,1489,5,131,0,0,1488,1487,1,0,0,0,1488,1489, + 1,0,0,0,1489,1490,1,0,0,0,1490,1492,3,100,50,0,1491,1484,1,0,0,0, + 1491,1492,1,0,0,0,1492,1494,1,0,0,0,1493,1495,5,131,0,0,1494,1493, + 1,0,0,0,1494,1495,1,0,0,0,1495,1496,1,0,0,0,1496,1497,5,98,0,0,1497, + 169,1,0,0,0,1498,1500,5,99,0,0,1499,1501,5,131,0,0,1500,1499,1,0, + 0,0,1500,1501,1,0,0,0,1501,1502,1,0,0,0,1502,1504,3,100,50,0,1503, + 1505,5,131,0,0,1504,1503,1,0,0,0,1504,1505,1,0,0,0,1505,1506,1,0, + 0,0,1506,1508,5,100,0,0,1507,1509,5,131,0,0,1508,1507,1,0,0,0,1508, + 1509,1,0,0,0,1509,1510,1,0,0,0,1510,1511,3,100,50,0,1511,171,1,0, + 0,0,1512,1513,3,190,95,0,1513,173,1,0,0,0,1514,1517,3,186,93,0,1515, + 1517,3,184,92,0,1516,1514,1,0,0,0,1516,1515,1,0,0,0,1517,175,1,0, + 0,0,1518,1520,5,24,0,0,1519,1521,5,131,0,0,1520,1519,1,0,0,0,1520, + 1521,1,0,0,0,1521,1555,1,0,0,0,1522,1524,3,182,91,0,1523,1525,5, + 131,0,0,1524,1523,1,0,0,0,1524,1525,1,0,0,0,1525,1526,1,0,0,0,1526, + 1528,5,10,0,0,1527,1529,5,131,0,0,1528,1527,1,0,0,0,1528,1529,1, + 0,0,0,1529,1530,1,0,0,0,1530,1532,3,100,50,0,1531,1533,5,131,0,0, + 1532,1531,1,0,0,0,1532,1533,1,0,0,0,1533,1552,1,0,0,0,1534,1536, + 5,2,0,0,1535,1537,5,131,0,0,1536,1535,1,0,0,0,1536,1537,1,0,0,0, + 1537,1538,1,0,0,0,1538,1540,3,182,91,0,1539,1541,5,131,0,0,1540, + 1539,1,0,0,0,1540,1541,1,0,0,0,1541,1542,1,0,0,0,1542,1544,5,10, + 0,0,1543,1545,5,131,0,0,1544,1543,1,0,0,0,1544,1545,1,0,0,0,1545, + 1546,1,0,0,0,1546,1548,3,100,50,0,1547,1549,5,131,0,0,1548,1547, + 1,0,0,0,1548,1549,1,0,0,0,1549,1551,1,0,0,0,1550,1534,1,0,0,0,1551, + 1554,1,0,0,0,1552,1550,1,0,0,0,1552,1553,1,0,0,0,1553,1556,1,0,0, + 0,1554,1552,1,0,0,0,1555,1522,1,0,0,0,1555,1556,1,0,0,0,1556,1557, + 1,0,0,0,1557,1558,5,25,0,0,1558,177,1,0,0,0,1559,1562,5,26,0,0,1560, + 1563,3,190,95,0,1561,1563,5,104,0,0,1562,1560,1,0,0,0,1562,1561, + 1,0,0,0,1563,179,1,0,0,0,1564,1569,3,130,65,0,1565,1567,5,131,0, + 0,1566,1565,1,0,0,0,1566,1567,1,0,0,0,1567,1568,1,0,0,0,1568,1570, + 3,166,83,0,1569,1566,1,0,0,0,1570,1571,1,0,0,0,1571,1569,1,0,0,0, + 1571,1572,1,0,0,0,1572,181,1,0,0,0,1573,1574,3,188,94,0,1574,183, + 1,0,0,0,1575,1576,7,3,0,0,1576,185,1,0,0,0,1577,1578,7,4,0,0,1578, + 187,1,0,0,0,1579,1582,3,190,95,0,1580,1582,3,192,96,0,1581,1579, + 1,0,0,0,1581,1580,1,0,0,0,1582,189,1,0,0,0,1583,1584,7,5,0,0,1584, + 191,1,0,0,0,1585,1586,7,6,0,0,1586,193,1,0,0,0,1587,1588,7,7,0,0, + 1588,195,1,0,0,0,1589,1590,7,8,0,0,1590,197,1,0,0,0,1591,1592,7, + 9,0,0,1592,199,1,0,0,0,293,201,205,208,211,218,223,226,230,234,239, + 246,251,254,258,262,266,272,276,281,286,290,293,295,299,303,308, + 312,317,321,330,335,339,343,347,352,356,359,363,373,380,393,397, + 403,407,411,416,421,425,431,435,441,445,451,455,459,463,467,471, + 476,483,487,492,499,505,510,516,522,527,531,536,539,542,545,552, + 558,561,566,569,573,576,584,588,592,596,600,605,610,614,619,622, + 631,640,645,658,661,677,685,689,694,699,703,708,714,719,726,730, + 734,736,740,742,746,748,754,760,764,767,770,774,780,784,787,790, + 796,799,802,806,812,815,818,822,826,830,832,836,838,841,845,847, + 853,857,861,865,868,873,878,883,888,894,898,900,904,908,910,912, + 927,937,947,952,956,963,968,973,977,981,985,988,990,995,999,1003, + 1007,1011,1015,1018,1020,1025,1029,1034,1039,1043,1052,1054,1060, + 1064,1071,1075,1079,1082,1096,1099,1113,1117,1122,1126,1129,1136, + 1140,1144,1151,1155,1159,1165,1169,1173,1179,1183,1187,1193,1197, + 1201,1209,1217,1223,1227,1231,1235,1239,1242,1248,1253,1258,1263, + 1268,1273,1276,1280,1284,1290,1295,1299,1302,1312,1316,1320,1322, + 1326,1330,1334,1338,1341,1349,1353,1357,1361,1365,1369,1373,1376, + 1392,1397,1401,1405,1408,1411,1417,1421,1425,1427,1431,1435,1439, + 1441,1445,1449,1455,1461,1466,1470,1474,1479,1481,1484,1488,1491, + 1494,1500,1504,1508,1516,1520,1524,1528,1532,1536,1540,1544,1548, + 1552,1555,1562,1566,1571,1581 + ] + +class LcypherParser ( Parser ): + + grammarFileName = "Lcypher.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "';'", "','", "'='", "'+='", "'*'", "'('", + "')'", "'['", "']'", "':'", "'|'", "'..'", "'+'", "'-'", + "'/'", "'%'", "'^'", "'<>'", "'<'", "'>'", "'<='", + "'>='", "'.'", "'{'", "'}'", "'$'", "'\\u27E8'", "'\\u3008'", + "'\\uFE64'", "'\\uFF1C'", "'\\u27E9'", "'\\u3009'", + "'\\uFE65'", "'\\uFF1E'", "'\\u00AD'", "'\\u2010'", + "'\\u2011'", "'\\u2012'", "'\\u2013'", "'\\u2014'", + "'\\u2015'", "'\\u2212'", "'\\uFE58'", "'\\uFE63'", + "'\\uFF0D'", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "'0'" ] + + symbolicNames = [ "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "EXPLAIN", "PROFILE", "UNION", + "ALL", "OPTIONAL_", "MATCH", "UNWIND", "AS", "MERGE", + "ON", "CREATE", "SET", "DETACH", "DELETE_", "REMOVE", + "CALL", "YIELD", "WITH", "DISTINCT", "RETURN", "ORDER", + "BY", "L_SKIP", "LIMIT", "ASCENDING", "ASC", "DESCENDING", + "DESC", "USING", "JOIN", "START", "WHERE", "OR", "XOR", + "AND", "NOT", "IN", "STARTS", "ENDS", "CONTAINS", + "REGEXP", "IS", "NULL_", "COUNT", "ANY", "NONE", "SINGLE", + "TRUE_", "FALSE_", "EXISTS", "CASE", "ELSE", "END", + "WHEN", "THEN", "StringLiteral", "EscapedChar", "HexInteger", + "DecimalInteger", "OctalInteger", "HexLetter", "HexDigit", + "Digit", "NonZeroDigit", "NonZeroOctDigit", "OctDigit", + "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", + "FILTER", "EXTRACT", "UnescapedSymbolicName", "CONSTRAINT", + "DO", "FOR", "REQUIRE", "UNIQUE", "MANDATORY", "SCALAR", + "OF", "ADD", "DROP", "IdentifierStart", "IdentifierPart", + "EscapedSymbolicName", "SP", "WHITESPACE", "Comment" ] + + RULE_oC_Cypher = 0 + RULE_oC_Statement = 1 + RULE_oC_Query = 2 + RULE_oC_RegularQuery = 3 + RULE_oC_Union = 4 + RULE_oC_SingleQuery = 5 + RULE_oC_SinglePartQuery = 6 + RULE_oC_MultiPartQuery = 7 + RULE_oC_UpdatingClause = 8 + RULE_oC_ReadingClause = 9 + RULE_oC_Match = 10 + RULE_oC_Unwind = 11 + RULE_oC_Merge = 12 + RULE_oC_MergeAction = 13 + RULE_oC_Create = 14 + RULE_oC_Set = 15 + RULE_oC_SetItem = 16 + RULE_oC_Delete = 17 + RULE_oC_Remove = 18 + RULE_oC_RemoveItem = 19 + RULE_oC_InQueryCall = 20 + RULE_oC_StandaloneCall = 21 + RULE_oC_YieldItems = 22 + RULE_oC_YieldItem = 23 + RULE_oC_With = 24 + RULE_oC_Return = 25 + RULE_oC_ReturnBody = 26 + RULE_oC_ReturnItems = 27 + RULE_oC_ReturnItem = 28 + RULE_oC_Order = 29 + RULE_oC_Skip = 30 + RULE_oC_Limit = 31 + RULE_oC_SortItem = 32 + RULE_oC_Hint = 33 + RULE_oC_Where = 34 + RULE_oC_Pattern = 35 + RULE_oC_PatternPart = 36 + RULE_oC_AnonymousPatternPart = 37 + RULE_oC_PatternElement = 38 + RULE_oC_NodePattern = 39 + RULE_oC_PatternElementChain = 40 + RULE_oC_RelationshipPattern = 41 + RULE_oC_RelationshipDetail = 42 + RULE_oC_Properties = 43 + RULE_oC_RelationshipTypes = 44 + RULE_oC_NodeLabels = 45 + RULE_oC_NodeLabel = 46 + RULE_oC_RangeLiteral = 47 + RULE_oC_LabelName = 48 + RULE_oC_RelTypeName = 49 + RULE_oC_Expression = 50 + RULE_oC_OrExpression = 51 + RULE_oC_XorExpression = 52 + RULE_oC_AndExpression = 53 + RULE_oC_NotExpression = 54 + RULE_oC_ComparisonExpression = 55 + RULE_oC_AddOrSubtractExpression = 56 + RULE_oC_MultiplyDivideModuloExpression = 57 + RULE_oC_PowerOfExpression = 58 + RULE_oC_UnaryAddOrSubtractExpression = 59 + RULE_oC_StringListNullOperatorExpression = 60 + RULE_oC_ListOperatorExpression = 61 + RULE_oC_StringOperatorExpression = 62 + RULE_oC_NullOperatorExpression = 63 + RULE_oC_PropertyOrLabelsExpression = 64 + RULE_oC_Atom = 65 + RULE_oC_Literal = 66 + RULE_oC_BooleanLiteral = 67 + RULE_oC_ListLiteral = 68 + RULE_oC_PartialComparisonExpression = 69 + RULE_oC_ParenthesizedExpression = 70 + RULE_oC_RelationshipsPattern = 71 + RULE_oC_FilterExpression = 72 + RULE_oC_IdInColl = 73 + RULE_oC_FunctionInvocation = 74 + RULE_oC_FunctionName = 75 + RULE_oC_ExplicitProcedureInvocation = 76 + RULE_oC_ImplicitProcedureInvocation = 77 + RULE_oC_ProcedureResultField = 78 + RULE_oC_ProcedureName = 79 + RULE_oC_Namespace = 80 + RULE_oC_ListComprehension = 81 + RULE_oC_PatternComprehension = 82 + RULE_oC_PropertyLookup = 83 + RULE_oC_CaseExpression = 84 + RULE_oC_CaseAlternatives = 85 + RULE_oC_Variable = 86 + RULE_oC_NumberLiteral = 87 + RULE_oC_MapLiteral = 88 + RULE_oC_Parameter = 89 + RULE_oC_PropertyExpression = 90 + RULE_oC_PropertyKeyName = 91 + RULE_oC_IntegerLiteral = 92 + RULE_oC_DoubleLiteral = 93 + RULE_oC_SchemaName = 94 + RULE_oC_SymbolicName = 95 + RULE_oC_ReservedWord = 96 + RULE_oC_LeftArrowHead = 97 + RULE_oC_RightArrowHead = 98 + RULE_oC_Dash = 99 + + ruleNames = [ "oC_Cypher", "oC_Statement", "oC_Query", "oC_RegularQuery", + "oC_Union", "oC_SingleQuery", "oC_SinglePartQuery", "oC_MultiPartQuery", + "oC_UpdatingClause", "oC_ReadingClause", "oC_Match", + "oC_Unwind", "oC_Merge", "oC_MergeAction", "oC_Create", + "oC_Set", "oC_SetItem", "oC_Delete", "oC_Remove", "oC_RemoveItem", + "oC_InQueryCall", "oC_StandaloneCall", "oC_YieldItems", + "oC_YieldItem", "oC_With", "oC_Return", "oC_ReturnBody", + "oC_ReturnItems", "oC_ReturnItem", "oC_Order", "oC_Skip", + "oC_Limit", "oC_SortItem", "oC_Hint", "oC_Where", "oC_Pattern", + "oC_PatternPart", "oC_AnonymousPatternPart", "oC_PatternElement", + "oC_NodePattern", "oC_PatternElementChain", "oC_RelationshipPattern", + "oC_RelationshipDetail", "oC_Properties", "oC_RelationshipTypes", + "oC_NodeLabels", "oC_NodeLabel", "oC_RangeLiteral", "oC_LabelName", + "oC_RelTypeName", "oC_Expression", "oC_OrExpression", + "oC_XorExpression", "oC_AndExpression", "oC_NotExpression", + "oC_ComparisonExpression", "oC_AddOrSubtractExpression", + "oC_MultiplyDivideModuloExpression", "oC_PowerOfExpression", + "oC_UnaryAddOrSubtractExpression", "oC_StringListNullOperatorExpression", + "oC_ListOperatorExpression", "oC_StringOperatorExpression", + "oC_NullOperatorExpression", "oC_PropertyOrLabelsExpression", + "oC_Atom", "oC_Literal", "oC_BooleanLiteral", "oC_ListLiteral", + "oC_PartialComparisonExpression", "oC_ParenthesizedExpression", + "oC_RelationshipsPattern", "oC_FilterExpression", "oC_IdInColl", + "oC_FunctionInvocation", "oC_FunctionName", "oC_ExplicitProcedureInvocation", + "oC_ImplicitProcedureInvocation", "oC_ProcedureResultField", + "oC_ProcedureName", "oC_Namespace", "oC_ListComprehension", + "oC_PatternComprehension", "oC_PropertyLookup", "oC_CaseExpression", + "oC_CaseAlternatives", "oC_Variable", "oC_NumberLiteral", + "oC_MapLiteral", "oC_Parameter", "oC_PropertyExpression", + "oC_PropertyKeyName", "oC_IntegerLiteral", "oC_DoubleLiteral", + "oC_SchemaName", "oC_SymbolicName", "oC_ReservedWord", + "oC_LeftArrowHead", "oC_RightArrowHead", "oC_Dash" ] + + EOF = Token.EOF + T__0=1 + T__1=2 + T__2=3 + T__3=4 + T__4=5 + T__5=6 + T__6=7 + T__7=8 + T__8=9 + T__9=10 + T__10=11 + T__11=12 + T__12=13 + T__13=14 + T__14=15 + T__15=16 + T__16=17 + T__17=18 + T__18=19 + T__19=20 + T__20=21 + T__21=22 + T__22=23 + T__23=24 + T__24=25 + T__25=26 + T__26=27 + T__27=28 + T__28=29 + T__29=30 + T__30=31 + T__31=32 + T__32=33 + T__33=34 + T__34=35 + T__35=36 + T__36=37 + T__37=38 + T__38=39 + T__39=40 + T__40=41 + T__41=42 + T__42=43 + T__43=44 + T__44=45 + EXPLAIN=46 + PROFILE=47 + UNION=48 + ALL=49 + OPTIONAL_=50 + MATCH=51 + UNWIND=52 + AS=53 + MERGE=54 + ON=55 + CREATE=56 + SET=57 + DETACH=58 + DELETE_=59 + REMOVE=60 + CALL=61 + YIELD=62 + WITH=63 + DISTINCT=64 + RETURN=65 + ORDER=66 + BY=67 + L_SKIP=68 + LIMIT=69 + ASCENDING=70 + ASC=71 + DESCENDING=72 + DESC=73 + USING=74 + JOIN=75 + START=76 + WHERE=77 + OR=78 + XOR=79 + AND=80 + NOT=81 + IN=82 + STARTS=83 + ENDS=84 + CONTAINS=85 + REGEXP=86 + IS=87 + NULL_=88 + COUNT=89 + ANY=90 + NONE=91 + SINGLE=92 + TRUE_=93 + FALSE_=94 + EXISTS=95 + CASE=96 + ELSE=97 + END=98 + WHEN=99 + THEN=100 + StringLiteral=101 + EscapedChar=102 + HexInteger=103 + DecimalInteger=104 + OctalInteger=105 + HexLetter=106 + HexDigit=107 + Digit=108 + NonZeroDigit=109 + NonZeroOctDigit=110 + OctDigit=111 + ZeroDigit=112 + ExponentDecimalReal=113 + RegularDecimalReal=114 + FILTER=115 + EXTRACT=116 + UnescapedSymbolicName=117 + CONSTRAINT=118 + DO=119 + FOR=120 + REQUIRE=121 + UNIQUE=122 + MANDATORY=123 + SCALAR=124 + OF=125 + ADD=126 + DROP=127 + IdentifierStart=128 + IdentifierPart=129 + EscapedSymbolicName=130 + SP=131 + WHITESPACE=132 + Comment=133 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class OC_CypherContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Statement(self): + return self.getTypedRuleContext(LcypherParser.OC_StatementContext,0) + + + def EOF(self): + return self.getToken(LcypherParser.EOF, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Cypher + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Cypher" ): + listener.enterOC_Cypher(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Cypher" ): + listener.exitOC_Cypher(self) + + + + + def oC_Cypher(self): + + localctx = LcypherParser.OC_CypherContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_oC_Cypher) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 201 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 200 + self.match(LcypherParser.SP) + + + self.state = 203 + self.oC_Statement() + self.state = 208 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,2,self._ctx) + if la_ == 1: + self.state = 205 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 204 + self.match(LcypherParser.SP) + + + self.state = 207 + self.match(LcypherParser.T__0) + + + self.state = 211 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 210 + self.match(LcypherParser.SP) + + + self.state = 213 + self.match(LcypherParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Query(self): + return self.getTypedRuleContext(LcypherParser.OC_QueryContext,0) + + + def EXPLAIN(self): + return self.getToken(LcypherParser.EXPLAIN, 0) + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def PROFILE(self): + return self.getToken(LcypherParser.PROFILE, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Statement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Statement" ): + listener.enterOC_Statement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Statement" ): + listener.exitOC_Statement(self) + + + + + def oC_Statement(self): + + localctx = LcypherParser.OC_StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_oC_Statement) + self._la = 0 # Token type + try: + self.state = 226 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [50, 51, 52, 54, 56, 57, 58, 59, 60, 61, 63, 65]: + self.enterOuterAlt(localctx, 1) + self.state = 215 + self.oC_Query() + pass + elif token in [46]: + self.enterOuterAlt(localctx, 2) + self.state = 216 + self.match(LcypherParser.EXPLAIN) + self.state = 218 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 217 + self.match(LcypherParser.SP) + + + self.state = 220 + self.oC_Query() + pass + elif token in [47]: + self.enterOuterAlt(localctx, 3) + self.state = 221 + self.match(LcypherParser.PROFILE) + self.state = 223 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 222 + self.match(LcypherParser.SP) + + + self.state = 225 + self.oC_Query() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_QueryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_RegularQuery(self): + return self.getTypedRuleContext(LcypherParser.OC_RegularQueryContext,0) + + + def oC_StandaloneCall(self): + return self.getTypedRuleContext(LcypherParser.OC_StandaloneCallContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Query + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Query" ): + listener.enterOC_Query(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Query" ): + listener.exitOC_Query(self) + + + + + def oC_Query(self): + + localctx = LcypherParser.OC_QueryContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_oC_Query) + try: + self.state = 230 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,7,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 228 + self.oC_RegularQuery() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 229 + self.oC_StandaloneCall() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RegularQueryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SingleQuery(self): + return self.getTypedRuleContext(LcypherParser.OC_SingleQueryContext,0) + + + def oC_Union(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_UnionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_UnionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RegularQuery + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RegularQuery" ): + listener.enterOC_RegularQuery(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RegularQuery" ): + listener.exitOC_RegularQuery(self) + + + + + def oC_RegularQuery(self): + + localctx = LcypherParser.OC_RegularQueryContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_oC_RegularQuery) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 232 + self.oC_SingleQuery() + self.state = 239 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,9,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 234 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 233 + self.match(LcypherParser.SP) + + + self.state = 236 + self.oC_Union() + self.state = 241 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,9,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_UnionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def UNION(self): + return self.getToken(LcypherParser.UNION, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def ALL(self): + return self.getToken(LcypherParser.ALL, 0) + + def oC_SingleQuery(self): + return self.getTypedRuleContext(LcypherParser.OC_SingleQueryContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Union + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Union" ): + listener.enterOC_Union(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Union" ): + listener.exitOC_Union(self) + + + + + def oC_Union(self): + + localctx = LcypherParser.OC_UnionContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_oC_Union) + self._la = 0 # Token type + try: + self.state = 254 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,12,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 242 + self.match(LcypherParser.UNION) + self.state = 243 + self.match(LcypherParser.SP) + self.state = 244 + self.match(LcypherParser.ALL) + self.state = 246 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 245 + self.match(LcypherParser.SP) + + + self.state = 248 + self.oC_SingleQuery() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 249 + self.match(LcypherParser.UNION) + self.state = 251 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 250 + self.match(LcypherParser.SP) + + + self.state = 253 + self.oC_SingleQuery() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SingleQueryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SinglePartQuery(self): + return self.getTypedRuleContext(LcypherParser.OC_SinglePartQueryContext,0) + + + def oC_MultiPartQuery(self): + return self.getTypedRuleContext(LcypherParser.OC_MultiPartQueryContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_SingleQuery + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_SingleQuery" ): + listener.enterOC_SingleQuery(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_SingleQuery" ): + listener.exitOC_SingleQuery(self) + + + + + def oC_SingleQuery(self): + + localctx = LcypherParser.OC_SingleQueryContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_oC_SingleQuery) + try: + self.state = 258 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,13,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 256 + self.oC_SinglePartQuery() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 257 + self.oC_MultiPartQuery() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SinglePartQueryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Return(self): + return self.getTypedRuleContext(LcypherParser.OC_ReturnContext,0) + + + def oC_ReadingClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ReadingClauseContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ReadingClauseContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_UpdatingClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_UpdatingClauseContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_UpdatingClauseContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_SinglePartQuery + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_SinglePartQuery" ): + listener.enterOC_SinglePartQuery(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_SinglePartQuery" ): + listener.exitOC_SinglePartQuery(self) + + + + + def oC_SinglePartQuery(self): + + localctx = LcypherParser.OC_SinglePartQueryContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_oC_SinglePartQuery) + self._la = 0 # Token type + try: + self.state = 295 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,22,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 266 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 2313724308561592320) != 0): + self.state = 260 + self.oC_ReadingClause() + self.state = 262 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 261 + self.match(LcypherParser.SP) + + + self.state = 268 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 269 + self.oC_Return() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 276 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 2313724308561592320) != 0): + self.state = 270 + self.oC_ReadingClause() + self.state = 272 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 271 + self.match(LcypherParser.SP) + + + self.state = 278 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 279 + self.oC_UpdatingClause() + self.state = 286 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 281 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 280 + self.match(LcypherParser.SP) + + + self.state = 283 + self.oC_UpdatingClause() + self.state = 288 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + + self.state = 293 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,21,self._ctx) + if la_ == 1: + self.state = 290 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 289 + self.match(LcypherParser.SP) + + + self.state = 292 + self.oC_Return() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_MultiPartQueryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SinglePartQuery(self): + return self.getTypedRuleContext(LcypherParser.OC_SinglePartQueryContext,0) + + + def oC_With(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_WithContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_WithContext,i) + + + def oC_ReadingClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ReadingClauseContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ReadingClauseContext,i) + + + def oC_UpdatingClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_UpdatingClauseContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_UpdatingClauseContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_MultiPartQuery + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_MultiPartQuery" ): + listener.enterOC_MultiPartQuery(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_MultiPartQuery" ): + listener.exitOC_MultiPartQuery(self) + + + + + def oC_MultiPartQuery(self): + + localctx = LcypherParser.OC_MultiPartQueryContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_oC_MultiPartQuery) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 319 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 303 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 2313724308561592320) != 0): + self.state = 297 + self.oC_ReadingClause() + self.state = 299 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 298 + self.match(LcypherParser.SP) + + + self.state = 305 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 312 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 2251799813685248000) != 0): + self.state = 306 + self.oC_UpdatingClause() + self.state = 308 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 307 + self.match(LcypherParser.SP) + + + self.state = 314 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 315 + self.oC_With() + self.state = 317 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 316 + self.match(LcypherParser.SP) + + + + else: + raise NoViableAltException(self) + self.state = 321 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + + self.state = 323 + self.oC_SinglePartQuery() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_UpdatingClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Create(self): + return self.getTypedRuleContext(LcypherParser.OC_CreateContext,0) + + + def oC_Merge(self): + return self.getTypedRuleContext(LcypherParser.OC_MergeContext,0) + + + def oC_Delete(self): + return self.getTypedRuleContext(LcypherParser.OC_DeleteContext,0) + + + def oC_Set(self): + return self.getTypedRuleContext(LcypherParser.OC_SetContext,0) + + + def oC_Remove(self): + return self.getTypedRuleContext(LcypherParser.OC_RemoveContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_UpdatingClause + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_UpdatingClause" ): + listener.enterOC_UpdatingClause(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_UpdatingClause" ): + listener.exitOC_UpdatingClause(self) + + + + + def oC_UpdatingClause(self): + + localctx = LcypherParser.OC_UpdatingClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_oC_UpdatingClause) + try: + self.state = 330 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [56]: + self.enterOuterAlt(localctx, 1) + self.state = 325 + self.oC_Create() + pass + elif token in [54]: + self.enterOuterAlt(localctx, 2) + self.state = 326 + self.oC_Merge() + pass + elif token in [58, 59]: + self.enterOuterAlt(localctx, 3) + self.state = 327 + self.oC_Delete() + pass + elif token in [57]: + self.enterOuterAlt(localctx, 4) + self.state = 328 + self.oC_Set() + pass + elif token in [60]: + self.enterOuterAlt(localctx, 5) + self.state = 329 + self.oC_Remove() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ReadingClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Match(self): + return self.getTypedRuleContext(LcypherParser.OC_MatchContext,0) + + + def oC_Unwind(self): + return self.getTypedRuleContext(LcypherParser.OC_UnwindContext,0) + + + def oC_InQueryCall(self): + return self.getTypedRuleContext(LcypherParser.OC_InQueryCallContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ReadingClause + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ReadingClause" ): + listener.enterOC_ReadingClause(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ReadingClause" ): + listener.exitOC_ReadingClause(self) + + + + + def oC_ReadingClause(self): + + localctx = LcypherParser.OC_ReadingClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_oC_ReadingClause) + try: + self.state = 335 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [50, 51]: + self.enterOuterAlt(localctx, 1) + self.state = 332 + self.oC_Match() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 333 + self.oC_Unwind() + pass + elif token in [61]: + self.enterOuterAlt(localctx, 3) + self.state = 334 + self.oC_InQueryCall() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_MatchContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def MATCH(self): + return self.getToken(LcypherParser.MATCH, 0) + + def oC_Pattern(self): + return self.getTypedRuleContext(LcypherParser.OC_PatternContext,0) + + + def OPTIONAL_(self): + return self.getToken(LcypherParser.OPTIONAL_, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Hint(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_HintContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_HintContext,i) + + + def oC_Where(self): + return self.getTypedRuleContext(LcypherParser.OC_WhereContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Match + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Match" ): + listener.enterOC_Match(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Match" ): + listener.exitOC_Match(self) + + + + + def oC_Match(self): + + localctx = LcypherParser.OC_MatchContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_oC_Match) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 339 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==50: + self.state = 337 + self.match(LcypherParser.OPTIONAL_) + self.state = 338 + self.match(LcypherParser.SP) + + + self.state = 341 + self.match(LcypherParser.MATCH) + self.state = 343 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 342 + self.match(LcypherParser.SP) + + + self.state = 345 + self.oC_Pattern() + self.state = 352 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 347 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 346 + self.match(LcypherParser.SP) + + + self.state = 349 + self.oC_Hint() + self.state = 354 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + + self.state = 359 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + if la_ == 1: + self.state = 356 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 355 + self.match(LcypherParser.SP) + + + self.state = 358 + self.oC_Where() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_UnwindContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def UNWIND(self): + return self.getToken(LcypherParser.UNWIND, 0) + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def AS(self): + return self.getToken(LcypherParser.AS, 0) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Unwind + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Unwind" ): + listener.enterOC_Unwind(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Unwind" ): + listener.exitOC_Unwind(self) + + + + + def oC_Unwind(self): + + localctx = LcypherParser.OC_UnwindContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_oC_Unwind) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 361 + self.match(LcypherParser.UNWIND) + self.state = 363 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 362 + self.match(LcypherParser.SP) + + + self.state = 365 + self.oC_Expression() + self.state = 366 + self.match(LcypherParser.SP) + self.state = 367 + self.match(LcypherParser.AS) + self.state = 368 + self.match(LcypherParser.SP) + self.state = 369 + self.oC_Variable() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_MergeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def MERGE(self): + return self.getToken(LcypherParser.MERGE, 0) + + def oC_PatternPart(self): + return self.getTypedRuleContext(LcypherParser.OC_PatternPartContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_MergeAction(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_MergeActionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_MergeActionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Merge + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Merge" ): + listener.enterOC_Merge(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Merge" ): + listener.exitOC_Merge(self) + + + + + def oC_Merge(self): + + localctx = LcypherParser.OC_MergeContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_oC_Merge) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 371 + self.match(LcypherParser.MERGE) + self.state = 373 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 372 + self.match(LcypherParser.SP) + + + self.state = 375 + self.oC_PatternPart() + self.state = 380 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 376 + self.match(LcypherParser.SP) + self.state = 377 + self.oC_MergeAction() + self.state = 382 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_MergeActionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ON(self): + return self.getToken(LcypherParser.ON, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def MATCH(self): + return self.getToken(LcypherParser.MATCH, 0) + + def oC_Set(self): + return self.getTypedRuleContext(LcypherParser.OC_SetContext,0) + + + def CREATE(self): + return self.getToken(LcypherParser.CREATE, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_MergeAction + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_MergeAction" ): + listener.enterOC_MergeAction(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_MergeAction" ): + listener.exitOC_MergeAction(self) + + + + + def oC_MergeAction(self): + + localctx = LcypherParser.OC_MergeActionContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_oC_MergeAction) + try: + self.state = 393 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,40,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 383 + self.match(LcypherParser.ON) + self.state = 384 + self.match(LcypherParser.SP) + self.state = 385 + self.match(LcypherParser.MATCH) + self.state = 386 + self.match(LcypherParser.SP) + self.state = 387 + self.oC_Set() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 388 + self.match(LcypherParser.ON) + self.state = 389 + self.match(LcypherParser.SP) + self.state = 390 + self.match(LcypherParser.CREATE) + self.state = 391 + self.match(LcypherParser.SP) + self.state = 392 + self.oC_Set() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_CreateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CREATE(self): + return self.getToken(LcypherParser.CREATE, 0) + + def oC_Pattern(self): + return self.getTypedRuleContext(LcypherParser.OC_PatternContext,0) + + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Create + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Create" ): + listener.enterOC_Create(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Create" ): + listener.exitOC_Create(self) + + + + + def oC_Create(self): + + localctx = LcypherParser.OC_CreateContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_oC_Create) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 395 + self.match(LcypherParser.CREATE) + self.state = 397 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 396 + self.match(LcypherParser.SP) + + + self.state = 399 + self.oC_Pattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SetContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SET(self): + return self.getToken(LcypherParser.SET, 0) + + def oC_SetItem(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_SetItemContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_SetItemContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Set + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Set" ): + listener.enterOC_Set(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Set" ): + listener.exitOC_Set(self) + + + + + def oC_Set(self): + + localctx = LcypherParser.OC_SetContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_oC_Set) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 401 + self.match(LcypherParser.SET) + self.state = 403 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 402 + self.match(LcypherParser.SP) + + + self.state = 405 + self.oC_SetItem() + self.state = 416 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,45,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 407 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 406 + self.match(LcypherParser.SP) + + + self.state = 409 + self.match(LcypherParser.T__1) + self.state = 411 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 410 + self.match(LcypherParser.SP) + + + self.state = 413 + self.oC_SetItem() + self.state = 418 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,45,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SetItemContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PropertyExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertyExpressionContext,0) + + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def oC_NodeLabels(self): + return self.getTypedRuleContext(LcypherParser.OC_NodeLabelsContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_SetItem + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_SetItem" ): + listener.enterOC_SetItem(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_SetItem" ): + listener.exitOC_SetItem(self) + + + + + def oC_SetItem(self): + + localctx = LcypherParser.OC_SetItemContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_oC_SetItem) + self._la = 0 # Token type + try: + self.state = 455 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,53,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 419 + self.oC_PropertyExpression() + self.state = 421 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 420 + self.match(LcypherParser.SP) + + + self.state = 423 + self.match(LcypherParser.T__2) + self.state = 425 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 424 + self.match(LcypherParser.SP) + + + self.state = 427 + self.oC_Expression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 429 + self.oC_Variable() + self.state = 431 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 430 + self.match(LcypherParser.SP) + + + self.state = 433 + self.match(LcypherParser.T__2) + self.state = 435 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 434 + self.match(LcypherParser.SP) + + + self.state = 437 + self.oC_Expression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 439 + self.oC_Variable() + self.state = 441 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 440 + self.match(LcypherParser.SP) + + + self.state = 443 + self.match(LcypherParser.T__3) + self.state = 445 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 444 + self.match(LcypherParser.SP) + + + self.state = 447 + self.oC_Expression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 449 + self.oC_Variable() + self.state = 451 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 450 + self.match(LcypherParser.SP) + + + self.state = 453 + self.oC_NodeLabels() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_DeleteContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DELETE_(self): + return self.getToken(LcypherParser.DELETE_, 0) + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def DETACH(self): + return self.getToken(LcypherParser.DETACH, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Delete + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Delete" ): + listener.enterOC_Delete(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Delete" ): + listener.exitOC_Delete(self) + + + + + def oC_Delete(self): + + localctx = LcypherParser.OC_DeleteContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_oC_Delete) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 459 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==58: + self.state = 457 + self.match(LcypherParser.DETACH) + self.state = 458 + self.match(LcypherParser.SP) + + + self.state = 461 + self.match(LcypherParser.DELETE_) + self.state = 463 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 462 + self.match(LcypherParser.SP) + + + self.state = 465 + self.oC_Expression() + self.state = 476 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,58,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 467 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 466 + self.match(LcypherParser.SP) + + + self.state = 469 + self.match(LcypherParser.T__1) + self.state = 471 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 470 + self.match(LcypherParser.SP) + + + self.state = 473 + self.oC_Expression() + self.state = 478 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,58,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RemoveContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def REMOVE(self): + return self.getToken(LcypherParser.REMOVE, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_RemoveItem(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_RemoveItemContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_RemoveItemContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Remove + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Remove" ): + listener.enterOC_Remove(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Remove" ): + listener.exitOC_Remove(self) + + + + + def oC_Remove(self): + + localctx = LcypherParser.OC_RemoveContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_oC_Remove) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 479 + self.match(LcypherParser.REMOVE) + self.state = 480 + self.match(LcypherParser.SP) + self.state = 481 + self.oC_RemoveItem() + self.state = 492 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 483 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 482 + self.match(LcypherParser.SP) + + + self.state = 485 + self.match(LcypherParser.T__1) + self.state = 487 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 486 + self.match(LcypherParser.SP) + + + self.state = 489 + self.oC_RemoveItem() + self.state = 494 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RemoveItemContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def oC_NodeLabels(self): + return self.getTypedRuleContext(LcypherParser.OC_NodeLabelsContext,0) + + + def oC_PropertyExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertyExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RemoveItem + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RemoveItem" ): + listener.enterOC_RemoveItem(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RemoveItem" ): + listener.exitOC_RemoveItem(self) + + + + + def oC_RemoveItem(self): + + localctx = LcypherParser.OC_RemoveItemContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_oC_RemoveItem) + try: + self.state = 499 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,62,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 495 + self.oC_Variable() + self.state = 496 + self.oC_NodeLabels() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 498 + self.oC_PropertyExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_InQueryCallContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CALL(self): + return self.getToken(LcypherParser.CALL, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_ExplicitProcedureInvocation(self): + return self.getTypedRuleContext(LcypherParser.OC_ExplicitProcedureInvocationContext,0) + + + def YIELD(self): + return self.getToken(LcypherParser.YIELD, 0) + + def oC_YieldItems(self): + return self.getTypedRuleContext(LcypherParser.OC_YieldItemsContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_InQueryCall + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_InQueryCall" ): + listener.enterOC_InQueryCall(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_InQueryCall" ): + listener.exitOC_InQueryCall(self) + + + + + def oC_InQueryCall(self): + + localctx = LcypherParser.OC_InQueryCallContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_oC_InQueryCall) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 501 + self.match(LcypherParser.CALL) + self.state = 502 + self.match(LcypherParser.SP) + self.state = 503 + self.oC_ExplicitProcedureInvocation() + self.state = 510 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,64,self._ctx) + if la_ == 1: + self.state = 505 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 504 + self.match(LcypherParser.SP) + + + self.state = 507 + self.match(LcypherParser.YIELD) + self.state = 508 + self.match(LcypherParser.SP) + self.state = 509 + self.oC_YieldItems() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_StandaloneCallContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CALL(self): + return self.getToken(LcypherParser.CALL, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_ExplicitProcedureInvocation(self): + return self.getTypedRuleContext(LcypherParser.OC_ExplicitProcedureInvocationContext,0) + + + def oC_ImplicitProcedureInvocation(self): + return self.getTypedRuleContext(LcypherParser.OC_ImplicitProcedureInvocationContext,0) + + + def YIELD(self): + return self.getToken(LcypherParser.YIELD, 0) + + def oC_YieldItems(self): + return self.getTypedRuleContext(LcypherParser.OC_YieldItemsContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_StandaloneCall + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_StandaloneCall" ): + listener.enterOC_StandaloneCall(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_StandaloneCall" ): + listener.exitOC_StandaloneCall(self) + + + + + def oC_StandaloneCall(self): + + localctx = LcypherParser.OC_StandaloneCallContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_oC_StandaloneCall) + try: + self.enterOuterAlt(localctx, 1) + self.state = 512 + self.match(LcypherParser.CALL) + self.state = 513 + self.match(LcypherParser.SP) + self.state = 516 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,65,self._ctx) + if la_ == 1: + self.state = 514 + self.oC_ExplicitProcedureInvocation() + pass + + elif la_ == 2: + self.state = 515 + self.oC_ImplicitProcedureInvocation() + pass + + + self.state = 522 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,66,self._ctx) + if la_ == 1: + self.state = 518 + self.match(LcypherParser.SP) + self.state = 519 + self.match(LcypherParser.YIELD) + self.state = 520 + self.match(LcypherParser.SP) + self.state = 521 + self.oC_YieldItems() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_YieldItemsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Where(self): + return self.getTypedRuleContext(LcypherParser.OC_WhereContext,0) + + + def oC_YieldItem(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_YieldItemContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_YieldItemContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_YieldItems + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_YieldItems" ): + listener.enterOC_YieldItems(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_YieldItems" ): + listener.exitOC_YieldItems(self) + + + + + def oC_YieldItems(self): + + localctx = LcypherParser.OC_YieldItemsContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_oC_YieldItems) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 539 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [5]: + self.state = 524 + self.match(LcypherParser.T__4) + pass + elif token in [89, 90, 91, 92, 106, 115, 116, 117, 130]: + self.state = 525 + self.oC_YieldItem() + self.state = 536 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,69,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 527 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 526 + self.match(LcypherParser.SP) + + + self.state = 529 + self.match(LcypherParser.T__1) + self.state = 531 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 530 + self.match(LcypherParser.SP) + + + self.state = 533 + self.oC_YieldItem() + self.state = 538 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,69,self._ctx) + + pass + else: + raise NoViableAltException(self) + + self.state = 545 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,72,self._ctx) + if la_ == 1: + self.state = 542 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 541 + self.match(LcypherParser.SP) + + + self.state = 544 + self.oC_Where() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_YieldItemContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def oC_ProcedureResultField(self): + return self.getTypedRuleContext(LcypherParser.OC_ProcedureResultFieldContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def AS(self): + return self.getToken(LcypherParser.AS, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_YieldItem + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_YieldItem" ): + listener.enterOC_YieldItem(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_YieldItem" ): + listener.exitOC_YieldItem(self) + + + + + def oC_YieldItem(self): + + localctx = LcypherParser.OC_YieldItemContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_oC_YieldItem) + try: + self.enterOuterAlt(localctx, 1) + self.state = 552 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,73,self._ctx) + if la_ == 1: + self.state = 547 + self.oC_ProcedureResultField() + self.state = 548 + self.match(LcypherParser.SP) + self.state = 549 + self.match(LcypherParser.AS) + self.state = 550 + self.match(LcypherParser.SP) + + + self.state = 554 + self.oC_Variable() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_WithContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WITH(self): + return self.getToken(LcypherParser.WITH, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_ReturnBody(self): + return self.getTypedRuleContext(LcypherParser.OC_ReturnBodyContext,0) + + + def DISTINCT(self): + return self.getToken(LcypherParser.DISTINCT, 0) + + def oC_Where(self): + return self.getTypedRuleContext(LcypherParser.OC_WhereContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_With + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_With" ): + listener.enterOC_With(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_With" ): + listener.exitOC_With(self) + + + + + def oC_With(self): + + localctx = LcypherParser.OC_WithContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_oC_With) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 556 + self.match(LcypherParser.WITH) + self.state = 561 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + if la_ == 1: + self.state = 558 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 557 + self.match(LcypherParser.SP) + + + self.state = 560 + self.match(LcypherParser.DISTINCT) + + + self.state = 563 + self.match(LcypherParser.SP) + self.state = 564 + self.oC_ReturnBody() + self.state = 569 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,77,self._ctx) + if la_ == 1: + self.state = 566 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 565 + self.match(LcypherParser.SP) + + + self.state = 568 + self.oC_Where() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ReturnContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def RETURN(self): + return self.getToken(LcypherParser.RETURN, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_ReturnBody(self): + return self.getTypedRuleContext(LcypherParser.OC_ReturnBodyContext,0) + + + def DISTINCT(self): + return self.getToken(LcypherParser.DISTINCT, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Return + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Return" ): + listener.enterOC_Return(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Return" ): + listener.exitOC_Return(self) + + + + + def oC_Return(self): + + localctx = LcypherParser.OC_ReturnContext(self, self._ctx, self.state) + self.enterRule(localctx, 50, self.RULE_oC_Return) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 571 + self.match(LcypherParser.RETURN) + self.state = 576 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,79,self._ctx) + if la_ == 1: + self.state = 573 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 572 + self.match(LcypherParser.SP) + + + self.state = 575 + self.match(LcypherParser.DISTINCT) + + + self.state = 578 + self.match(LcypherParser.SP) + self.state = 579 + self.oC_ReturnBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ReturnBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_ReturnItems(self): + return self.getTypedRuleContext(LcypherParser.OC_ReturnItemsContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Order(self): + return self.getTypedRuleContext(LcypherParser.OC_OrderContext,0) + + + def oC_Skip(self): + return self.getTypedRuleContext(LcypherParser.OC_SkipContext,0) + + + def oC_Limit(self): + return self.getTypedRuleContext(LcypherParser.OC_LimitContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ReturnBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ReturnBody" ): + listener.enterOC_ReturnBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ReturnBody" ): + listener.exitOC_ReturnBody(self) + + + + + def oC_ReturnBody(self): + + localctx = LcypherParser.OC_ReturnBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_oC_ReturnBody) + try: + self.enterOuterAlt(localctx, 1) + self.state = 581 + self.oC_ReturnItems() + self.state = 584 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,80,self._ctx) + if la_ == 1: + self.state = 582 + self.match(LcypherParser.SP) + self.state = 583 + self.oC_Order() + + + self.state = 588 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,81,self._ctx) + if la_ == 1: + self.state = 586 + self.match(LcypherParser.SP) + self.state = 587 + self.oC_Skip() + + + self.state = 592 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,82,self._ctx) + if la_ == 1: + self.state = 590 + self.match(LcypherParser.SP) + self.state = 591 + self.oC_Limit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ReturnItemsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_ReturnItem(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ReturnItemContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ReturnItemContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ReturnItems + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ReturnItems" ): + listener.enterOC_ReturnItems(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ReturnItems" ): + listener.exitOC_ReturnItems(self) + + + + + def oC_ReturnItems(self): + + localctx = LcypherParser.OC_ReturnItemsContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_oC_ReturnItems) + self._la = 0 # Token type + try: + self.state = 622 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [5]: + self.enterOuterAlt(localctx, 1) + self.state = 594 + self.match(LcypherParser.T__4) + self.state = 605 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,85,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 596 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 595 + self.match(LcypherParser.SP) + + + self.state = 598 + self.match(LcypherParser.T__1) + self.state = 600 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 599 + self.match(LcypherParser.SP) + + + self.state = 602 + self.oC_ReturnItem() + self.state = 607 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,85,self._ctx) + + pass + elif token in [6, 8, 13, 14, 24, 26, 49, 81, 88, 89, 90, 91, 92, 93, 94, 95, 96, 101, 103, 104, 105, 106, 113, 114, 115, 116, 117, 130]: + self.enterOuterAlt(localctx, 2) + self.state = 608 + self.oC_ReturnItem() + self.state = 619 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,88,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 610 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 609 + self.match(LcypherParser.SP) + + + self.state = 612 + self.match(LcypherParser.T__1) + self.state = 614 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 613 + self.match(LcypherParser.SP) + + + self.state = 616 + self.oC_ReturnItem() + self.state = 621 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,88,self._ctx) + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ReturnItemContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def AS(self): + return self.getToken(LcypherParser.AS, 0) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ReturnItem + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ReturnItem" ): + listener.enterOC_ReturnItem(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ReturnItem" ): + listener.exitOC_ReturnItem(self) + + + + + def oC_ReturnItem(self): + + localctx = LcypherParser.OC_ReturnItemContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_oC_ReturnItem) + try: + self.state = 631 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,90,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 624 + self.oC_Expression() + self.state = 625 + self.match(LcypherParser.SP) + self.state = 626 + self.match(LcypherParser.AS) + self.state = 627 + self.match(LcypherParser.SP) + self.state = 628 + self.oC_Variable() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 630 + self.oC_Expression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_OrderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ORDER(self): + return self.getToken(LcypherParser.ORDER, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def BY(self): + return self.getToken(LcypherParser.BY, 0) + + def oC_SortItem(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_SortItemContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_SortItemContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Order + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Order" ): + listener.enterOC_Order(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Order" ): + listener.exitOC_Order(self) + + + + + def oC_Order(self): + + localctx = LcypherParser.OC_OrderContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_oC_Order) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 633 + self.match(LcypherParser.ORDER) + self.state = 634 + self.match(LcypherParser.SP) + self.state = 635 + self.match(LcypherParser.BY) + self.state = 636 + self.match(LcypherParser.SP) + self.state = 637 + self.oC_SortItem() + self.state = 645 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==2: + self.state = 638 + self.match(LcypherParser.T__1) + self.state = 640 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 639 + self.match(LcypherParser.SP) + + + self.state = 642 + self.oC_SortItem() + self.state = 647 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SkipContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def L_SKIP(self): + return self.getToken(LcypherParser.L_SKIP, 0) + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Skip + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Skip" ): + listener.enterOC_Skip(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Skip" ): + listener.exitOC_Skip(self) + + + + + def oC_Skip(self): + + localctx = LcypherParser.OC_SkipContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_oC_Skip) + try: + self.enterOuterAlt(localctx, 1) + self.state = 648 + self.match(LcypherParser.L_SKIP) + self.state = 649 + self.match(LcypherParser.SP) + self.state = 650 + self.oC_Expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_LimitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LIMIT(self): + return self.getToken(LcypherParser.LIMIT, 0) + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Limit + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Limit" ): + listener.enterOC_Limit(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Limit" ): + listener.exitOC_Limit(self) + + + + + def oC_Limit(self): + + localctx = LcypherParser.OC_LimitContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_oC_Limit) + try: + self.enterOuterAlt(localctx, 1) + self.state = 652 + self.match(LcypherParser.LIMIT) + self.state = 653 + self.match(LcypherParser.SP) + self.state = 654 + self.oC_Expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SortItemContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def ASCENDING(self): + return self.getToken(LcypherParser.ASCENDING, 0) + + def ASC(self): + return self.getToken(LcypherParser.ASC, 0) + + def DESCENDING(self): + return self.getToken(LcypherParser.DESCENDING, 0) + + def DESC(self): + return self.getToken(LcypherParser.DESC, 0) + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_SortItem + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_SortItem" ): + listener.enterOC_SortItem(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_SortItem" ): + listener.exitOC_SortItem(self) + + + + + def oC_SortItem(self): + + localctx = LcypherParser.OC_SortItemContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_oC_SortItem) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 656 + self.oC_Expression() + self.state = 661 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,94,self._ctx) + if la_ == 1: + self.state = 658 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 657 + self.match(LcypherParser.SP) + + + self.state = 660 + _la = self._input.LA(1) + if not(((((_la - 70)) & ~0x3f) == 0 and ((1 << (_la - 70)) & 15) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_HintContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def USING(self): + return self.getToken(LcypherParser.USING, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def JOIN(self): + return self.getToken(LcypherParser.JOIN, 0) + + def ON(self): + return self.getToken(LcypherParser.ON, 0) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def START(self): + return self.getToken(LcypherParser.START, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Hint + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Hint" ): + listener.enterOC_Hint(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Hint" ): + listener.exitOC_Hint(self) + + + + + def oC_Hint(self): + + localctx = LcypherParser.OC_HintContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_oC_Hint) + try: + self.state = 677 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,95,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 663 + self.match(LcypherParser.USING) + self.state = 664 + self.match(LcypherParser.SP) + self.state = 665 + self.match(LcypherParser.JOIN) + self.state = 666 + self.match(LcypherParser.SP) + self.state = 667 + self.match(LcypherParser.ON) + self.state = 668 + self.match(LcypherParser.SP) + self.state = 669 + self.oC_Variable() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 670 + self.match(LcypherParser.USING) + self.state = 671 + self.match(LcypherParser.SP) + self.state = 672 + self.match(LcypherParser.START) + self.state = 673 + self.match(LcypherParser.SP) + self.state = 674 + self.match(LcypherParser.ON) + self.state = 675 + self.match(LcypherParser.SP) + self.state = 676 + self.oC_Variable() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_WhereContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHERE(self): + return self.getToken(LcypherParser.WHERE, 0) + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Where + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Where" ): + listener.enterOC_Where(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Where" ): + listener.exitOC_Where(self) + + + + + def oC_Where(self): + + localctx = LcypherParser.OC_WhereContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_oC_Where) + try: + self.enterOuterAlt(localctx, 1) + self.state = 679 + self.match(LcypherParser.WHERE) + self.state = 680 + self.match(LcypherParser.SP) + self.state = 681 + self.oC_Expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PatternPart(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PatternPartContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PatternPartContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Pattern + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Pattern" ): + listener.enterOC_Pattern(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Pattern" ): + listener.exitOC_Pattern(self) + + + + + def oC_Pattern(self): + + localctx = LcypherParser.OC_PatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_oC_Pattern) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 683 + self.oC_PatternPart() + self.state = 694 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,98,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 685 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 684 + self.match(LcypherParser.SP) + + + self.state = 687 + self.match(LcypherParser.T__1) + self.state = 689 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 688 + self.match(LcypherParser.SP) + + + self.state = 691 + self.oC_PatternPart() + self.state = 696 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,98,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PatternPartContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def oC_AnonymousPatternPart(self): + return self.getTypedRuleContext(LcypherParser.OC_AnonymousPatternPartContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PatternPart + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PatternPart" ): + listener.enterOC_PatternPart(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PatternPart" ): + listener.exitOC_PatternPart(self) + + + + + def oC_PatternPart(self): + + localctx = LcypherParser.OC_PatternPartContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_oC_PatternPart) + self._la = 0 # Token type + try: + self.state = 708 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89, 90, 91, 92, 106, 115, 116, 117, 130]: + self.enterOuterAlt(localctx, 1) + self.state = 697 + self.oC_Variable() + self.state = 699 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 698 + self.match(LcypherParser.SP) + + + self.state = 701 + self.match(LcypherParser.T__2) + self.state = 703 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 702 + self.match(LcypherParser.SP) + + + self.state = 705 + self.oC_AnonymousPatternPart() + pass + elif token in [6]: + self.enterOuterAlt(localctx, 2) + self.state = 707 + self.oC_AnonymousPatternPart() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_AnonymousPatternPartContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PatternElement(self): + return self.getTypedRuleContext(LcypherParser.OC_PatternElementContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_AnonymousPatternPart + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_AnonymousPatternPart" ): + listener.enterOC_AnonymousPatternPart(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_AnonymousPatternPart" ): + listener.exitOC_AnonymousPatternPart(self) + + + + + def oC_AnonymousPatternPart(self): + + localctx = LcypherParser.OC_AnonymousPatternPartContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_oC_AnonymousPatternPart) + try: + self.enterOuterAlt(localctx, 1) + self.state = 710 + self.oC_PatternElement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PatternElementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_NodePattern(self): + return self.getTypedRuleContext(LcypherParser.OC_NodePatternContext,0) + + + def oC_PatternElementChain(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PatternElementChainContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PatternElementChainContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_PatternElement(self): + return self.getTypedRuleContext(LcypherParser.OC_PatternElementContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PatternElement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PatternElement" ): + listener.enterOC_PatternElement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PatternElement" ): + listener.exitOC_PatternElement(self) + + + + + def oC_PatternElement(self): + + localctx = LcypherParser.OC_PatternElementContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_oC_PatternElement) + self._la = 0 # Token type + try: + self.state = 726 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,104,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 712 + self.oC_NodePattern() + self.state = 719 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,103,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 714 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 713 + self.match(LcypherParser.SP) + + + self.state = 716 + self.oC_PatternElementChain() + self.state = 721 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,103,self._ctx) + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 722 + self.match(LcypherParser.T__5) + self.state = 723 + self.oC_PatternElement() + self.state = 724 + self.match(LcypherParser.T__6) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NodePatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def oC_NodeLabels(self): + return self.getTypedRuleContext(LcypherParser.OC_NodeLabelsContext,0) + + + def oC_Properties(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertiesContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_NodePattern + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_NodePattern" ): + listener.enterOC_NodePattern(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_NodePattern" ): + listener.exitOC_NodePattern(self) + + + + + def oC_NodePattern(self): + + localctx = LcypherParser.OC_NodePatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_oC_NodePattern) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 728 + self.match(LcypherParser.T__5) + self.state = 730 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 729 + self.match(LcypherParser.SP) + + + self.state = 736 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 89)) & ~0x3f) == 0 and ((1 << (_la - 89)) & 2199493148687) != 0): + self.state = 732 + self.oC_Variable() + self.state = 734 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 733 + self.match(LcypherParser.SP) + + + + + self.state = 742 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 738 + self.oC_NodeLabels() + self.state = 740 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 739 + self.match(LcypherParser.SP) + + + + + self.state = 748 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==24 or _la==26: + self.state = 744 + self.oC_Properties() + self.state = 746 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 745 + self.match(LcypherParser.SP) + + + + + self.state = 750 + self.match(LcypherParser.T__6) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PatternElementChainContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_RelationshipPattern(self): + return self.getTypedRuleContext(LcypherParser.OC_RelationshipPatternContext,0) + + + def oC_NodePattern(self): + return self.getTypedRuleContext(LcypherParser.OC_NodePatternContext,0) + + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PatternElementChain + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PatternElementChain" ): + listener.enterOC_PatternElementChain(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PatternElementChain" ): + listener.exitOC_PatternElementChain(self) + + + + + def oC_PatternElementChain(self): + + localctx = LcypherParser.OC_PatternElementChainContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_oC_PatternElementChain) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 752 + self.oC_RelationshipPattern() + self.state = 754 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 753 + self.match(LcypherParser.SP) + + + self.state = 756 + self.oC_NodePattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RelationshipPatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_LeftArrowHead(self): + return self.getTypedRuleContext(LcypherParser.OC_LeftArrowHeadContext,0) + + + def oC_Dash(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_DashContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_DashContext,i) + + + def oC_RightArrowHead(self): + return self.getTypedRuleContext(LcypherParser.OC_RightArrowHeadContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_RelationshipDetail(self): + return self.getTypedRuleContext(LcypherParser.OC_RelationshipDetailContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RelationshipPattern + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RelationshipPattern" ): + listener.enterOC_RelationshipPattern(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RelationshipPattern" ): + listener.exitOC_RelationshipPattern(self) + + + + + def oC_RelationshipPattern(self): + + localctx = LcypherParser.OC_RelationshipPatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_oC_RelationshipPattern) + self._la = 0 # Token type + try: + self.state = 822 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,129,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 758 + self.oC_LeftArrowHead() + self.state = 760 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 759 + self.match(LcypherParser.SP) + + + self.state = 762 + self.oC_Dash() + self.state = 764 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,114,self._ctx) + if la_ == 1: + self.state = 763 + self.match(LcypherParser.SP) + + + self.state = 767 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==8: + self.state = 766 + self.oC_RelationshipDetail() + + + self.state = 770 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 769 + self.match(LcypherParser.SP) + + + self.state = 772 + self.oC_Dash() + self.state = 774 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 773 + self.match(LcypherParser.SP) + + + self.state = 776 + self.oC_RightArrowHead() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 778 + self.oC_LeftArrowHead() + self.state = 780 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 779 + self.match(LcypherParser.SP) + + + self.state = 782 + self.oC_Dash() + self.state = 784 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,119,self._ctx) + if la_ == 1: + self.state = 783 + self.match(LcypherParser.SP) + + + self.state = 787 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==8: + self.state = 786 + self.oC_RelationshipDetail() + + + self.state = 790 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 789 + self.match(LcypherParser.SP) + + + self.state = 792 + self.oC_Dash() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 794 + self.oC_Dash() + self.state = 796 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,122,self._ctx) + if la_ == 1: + self.state = 795 + self.match(LcypherParser.SP) + + + self.state = 799 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==8: + self.state = 798 + self.oC_RelationshipDetail() + + + self.state = 802 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 801 + self.match(LcypherParser.SP) + + + self.state = 804 + self.oC_Dash() + self.state = 806 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 805 + self.match(LcypherParser.SP) + + + self.state = 808 + self.oC_RightArrowHead() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 810 + self.oC_Dash() + self.state = 812 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,126,self._ctx) + if la_ == 1: + self.state = 811 + self.match(LcypherParser.SP) + + + self.state = 815 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==8: + self.state = 814 + self.oC_RelationshipDetail() + + + self.state = 818 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 817 + self.match(LcypherParser.SP) + + + self.state = 820 + self.oC_Dash() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RelationshipDetailContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def oC_RelationshipTypes(self): + return self.getTypedRuleContext(LcypherParser.OC_RelationshipTypesContext,0) + + + def oC_RangeLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_RangeLiteralContext,0) + + + def oC_Properties(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertiesContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RelationshipDetail + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RelationshipDetail" ): + listener.enterOC_RelationshipDetail(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RelationshipDetail" ): + listener.exitOC_RelationshipDetail(self) + + + + + def oC_RelationshipDetail(self): + + localctx = LcypherParser.OC_RelationshipDetailContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_oC_RelationshipDetail) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 824 + self.match(LcypherParser.T__7) + self.state = 826 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 825 + self.match(LcypherParser.SP) + + + self.state = 832 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 89)) & ~0x3f) == 0 and ((1 << (_la - 89)) & 2199493148687) != 0): + self.state = 828 + self.oC_Variable() + self.state = 830 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 829 + self.match(LcypherParser.SP) + + + + + self.state = 838 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 834 + self.oC_RelationshipTypes() + self.state = 836 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 835 + self.match(LcypherParser.SP) + + + + + self.state = 841 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==5: + self.state = 840 + self.oC_RangeLiteral() + + + self.state = 847 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==24 or _la==26: + self.state = 843 + self.oC_Properties() + self.state = 845 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 844 + self.match(LcypherParser.SP) + + + + + self.state = 849 + self.match(LcypherParser.T__8) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PropertiesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_MapLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_MapLiteralContext,0) + + + def oC_Parameter(self): + return self.getTypedRuleContext(LcypherParser.OC_ParameterContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Properties + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Properties" ): + listener.enterOC_Properties(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Properties" ): + listener.exitOC_Properties(self) + + + + + def oC_Properties(self): + + localctx = LcypherParser.OC_PropertiesContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_oC_Properties) + try: + self.state = 853 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [24]: + self.enterOuterAlt(localctx, 1) + self.state = 851 + self.oC_MapLiteral() + pass + elif token in [26]: + self.enterOuterAlt(localctx, 2) + self.state = 852 + self.oC_Parameter() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RelationshipTypesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_RelTypeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_RelTypeNameContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_RelTypeNameContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RelationshipTypes + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RelationshipTypes" ): + listener.enterOC_RelationshipTypes(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RelationshipTypes" ): + listener.exitOC_RelationshipTypes(self) + + + + + def oC_RelationshipTypes(self): + + localctx = LcypherParser.OC_RelationshipTypesContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_oC_RelationshipTypes) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 855 + self.match(LcypherParser.T__9) + self.state = 857 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 856 + self.match(LcypherParser.SP) + + + self.state = 859 + self.oC_RelTypeName() + self.state = 873 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,143,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 861 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 860 + self.match(LcypherParser.SP) + + + self.state = 863 + self.match(LcypherParser.T__10) + self.state = 865 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 864 + self.match(LcypherParser.T__9) + + + self.state = 868 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 867 + self.match(LcypherParser.SP) + + + self.state = 870 + self.oC_RelTypeName() + self.state = 875 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,143,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NodeLabelsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_NodeLabel(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_NodeLabelContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_NodeLabelContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_NodeLabels + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_NodeLabels" ): + listener.enterOC_NodeLabels(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_NodeLabels" ): + listener.exitOC_NodeLabels(self) + + + + + def oC_NodeLabels(self): + + localctx = LcypherParser.OC_NodeLabelsContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_oC_NodeLabels) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 876 + self.oC_NodeLabel() + self.state = 883 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,145,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 878 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 877 + self.match(LcypherParser.SP) + + + self.state = 880 + self.oC_NodeLabel() + self.state = 885 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,145,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NodeLabelContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_LabelName(self): + return self.getTypedRuleContext(LcypherParser.OC_LabelNameContext,0) + + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_NodeLabel + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_NodeLabel" ): + listener.enterOC_NodeLabel(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_NodeLabel" ): + listener.exitOC_NodeLabel(self) + + + + + def oC_NodeLabel(self): + + localctx = LcypherParser.OC_NodeLabelContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_oC_NodeLabel) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 886 + self.match(LcypherParser.T__9) + self.state = 888 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 887 + self.match(LcypherParser.SP) + + + self.state = 890 + self.oC_LabelName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RangeLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_IntegerLiteral(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_IntegerLiteralContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_IntegerLiteralContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RangeLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RangeLiteral" ): + listener.enterOC_RangeLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RangeLiteral" ): + listener.exitOC_RangeLiteral(self) + + + + + def oC_RangeLiteral(self): + + localctx = LcypherParser.OC_RangeLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_oC_RangeLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 892 + self.match(LcypherParser.T__4) + self.state = 894 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 893 + self.match(LcypherParser.SP) + + + self.state = 900 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 103)) & ~0x3f) == 0 and ((1 << (_la - 103)) & 7) != 0): + self.state = 896 + self.oC_IntegerLiteral() + self.state = 898 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 897 + self.match(LcypherParser.SP) + + + + + self.state = 912 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 902 + self.match(LcypherParser.T__11) + self.state = 904 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 903 + self.match(LcypherParser.SP) + + + self.state = 910 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 103)) & ~0x3f) == 0 and ((1 << (_la - 103)) & 7) != 0): + self.state = 906 + self.oC_IntegerLiteral() + self.state = 908 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 907 + self.match(LcypherParser.SP) + + + + + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_LabelNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SchemaName(self): + return self.getTypedRuleContext(LcypherParser.OC_SchemaNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_LabelName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_LabelName" ): + listener.enterOC_LabelName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_LabelName" ): + listener.exitOC_LabelName(self) + + + + + def oC_LabelName(self): + + localctx = LcypherParser.OC_LabelNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_oC_LabelName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 914 + self.oC_SchemaName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RelTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SchemaName(self): + return self.getTypedRuleContext(LcypherParser.OC_SchemaNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RelTypeName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RelTypeName" ): + listener.enterOC_RelTypeName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RelTypeName" ): + listener.exitOC_RelTypeName(self) + + + + + def oC_RelTypeName(self): + + localctx = LcypherParser.OC_RelTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_oC_RelTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 916 + self.oC_SchemaName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_OrExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_OrExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Expression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Expression" ): + listener.enterOC_Expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Expression" ): + listener.exitOC_Expression(self) + + + + + def oC_Expression(self): + + localctx = LcypherParser.OC_ExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_oC_Expression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 918 + self.oC_OrExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_OrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_XorExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_XorExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_XorExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def OR(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.OR) + else: + return self.getToken(LcypherParser.OR, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_OrExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_OrExpression" ): + listener.enterOC_OrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_OrExpression" ): + listener.exitOC_OrExpression(self) + + + + + def oC_OrExpression(self): + + localctx = LcypherParser.OC_OrExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_oC_OrExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 920 + self.oC_XorExpression() + self.state = 927 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,154,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 921 + self.match(LcypherParser.SP) + self.state = 922 + self.match(LcypherParser.OR) + self.state = 923 + self.match(LcypherParser.SP) + self.state = 924 + self.oC_XorExpression() + self.state = 929 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,154,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_XorExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_AndExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_AndExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_AndExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def XOR(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.XOR) + else: + return self.getToken(LcypherParser.XOR, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_XorExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_XorExpression" ): + listener.enterOC_XorExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_XorExpression" ): + listener.exitOC_XorExpression(self) + + + + + def oC_XorExpression(self): + + localctx = LcypherParser.OC_XorExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_oC_XorExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 930 + self.oC_AndExpression() + self.state = 937 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,155,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 931 + self.match(LcypherParser.SP) + self.state = 932 + self.match(LcypherParser.XOR) + self.state = 933 + self.match(LcypherParser.SP) + self.state = 934 + self.oC_AndExpression() + self.state = 939 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,155,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_AndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_NotExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_NotExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_NotExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def AND(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.AND) + else: + return self.getToken(LcypherParser.AND, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_AndExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_AndExpression" ): + listener.enterOC_AndExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_AndExpression" ): + listener.exitOC_AndExpression(self) + + + + + def oC_AndExpression(self): + + localctx = LcypherParser.OC_AndExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_oC_AndExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 940 + self.oC_NotExpression() + self.state = 947 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,156,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 941 + self.match(LcypherParser.SP) + self.state = 942 + self.match(LcypherParser.AND) + self.state = 943 + self.match(LcypherParser.SP) + self.state = 944 + self.oC_NotExpression() + self.state = 949 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,156,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NotExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_ComparisonExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_ComparisonExpressionContext,0) + + + def NOT(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.NOT) + else: + return self.getToken(LcypherParser.NOT, i) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_NotExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_NotExpression" ): + listener.enterOC_NotExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_NotExpression" ): + listener.exitOC_NotExpression(self) + + + + + def oC_NotExpression(self): + + localctx = LcypherParser.OC_NotExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_oC_NotExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 956 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==81: + self.state = 950 + self.match(LcypherParser.NOT) + self.state = 952 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 951 + self.match(LcypherParser.SP) + + + self.state = 958 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 959 + self.oC_ComparisonExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ComparisonExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_AddOrSubtractExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_AddOrSubtractExpressionContext,0) + + + def oC_PartialComparisonExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PartialComparisonExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PartialComparisonExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ComparisonExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ComparisonExpression" ): + listener.enterOC_ComparisonExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ComparisonExpression" ): + listener.exitOC_ComparisonExpression(self) + + + + + def oC_ComparisonExpression(self): + + localctx = LcypherParser.OC_ComparisonExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_oC_ComparisonExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 961 + self.oC_AddOrSubtractExpression() + self.state = 968 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,160,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 963 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 962 + self.match(LcypherParser.SP) + + + self.state = 965 + self.oC_PartialComparisonExpression() + self.state = 970 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,160,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_AddOrSubtractExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_MultiplyDivideModuloExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_MultiplyDivideModuloExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_MultiplyDivideModuloExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_AddOrSubtractExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_AddOrSubtractExpression" ): + listener.enterOC_AddOrSubtractExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_AddOrSubtractExpression" ): + listener.exitOC_AddOrSubtractExpression(self) + + + + + def oC_AddOrSubtractExpression(self): + + localctx = LcypherParser.OC_AddOrSubtractExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_oC_AddOrSubtractExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 971 + self.oC_MultiplyDivideModuloExpression() + self.state = 990 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,166,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 988 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,165,self._ctx) + if la_ == 1: + self.state = 973 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 972 + self.match(LcypherParser.SP) + + + self.state = 975 + self.match(LcypherParser.T__12) + self.state = 977 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 976 + self.match(LcypherParser.SP) + + + self.state = 979 + self.oC_MultiplyDivideModuloExpression() + pass + + elif la_ == 2: + self.state = 981 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 980 + self.match(LcypherParser.SP) + + + self.state = 983 + self.match(LcypherParser.T__13) + self.state = 985 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 984 + self.match(LcypherParser.SP) + + + self.state = 987 + self.oC_MultiplyDivideModuloExpression() + pass + + + self.state = 992 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,166,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_MultiplyDivideModuloExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PowerOfExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PowerOfExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PowerOfExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_MultiplyDivideModuloExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_MultiplyDivideModuloExpression" ): + listener.enterOC_MultiplyDivideModuloExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_MultiplyDivideModuloExpression" ): + listener.exitOC_MultiplyDivideModuloExpression(self) + + + + + def oC_MultiplyDivideModuloExpression(self): + + localctx = LcypherParser.OC_MultiplyDivideModuloExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_oC_MultiplyDivideModuloExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 993 + self.oC_PowerOfExpression() + self.state = 1020 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,174,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1018 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,173,self._ctx) + if la_ == 1: + self.state = 995 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 994 + self.match(LcypherParser.SP) + + + self.state = 997 + self.match(LcypherParser.T__4) + self.state = 999 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 998 + self.match(LcypherParser.SP) + + + self.state = 1001 + self.oC_PowerOfExpression() + pass + + elif la_ == 2: + self.state = 1003 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1002 + self.match(LcypherParser.SP) + + + self.state = 1005 + self.match(LcypherParser.T__14) + self.state = 1007 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1006 + self.match(LcypherParser.SP) + + + self.state = 1009 + self.oC_PowerOfExpression() + pass + + elif la_ == 3: + self.state = 1011 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1010 + self.match(LcypherParser.SP) + + + self.state = 1013 + self.match(LcypherParser.T__15) + self.state = 1015 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1014 + self.match(LcypherParser.SP) + + + self.state = 1017 + self.oC_PowerOfExpression() + pass + + + self.state = 1022 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,174,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PowerOfExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_UnaryAddOrSubtractExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_UnaryAddOrSubtractExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_UnaryAddOrSubtractExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PowerOfExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PowerOfExpression" ): + listener.enterOC_PowerOfExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PowerOfExpression" ): + listener.exitOC_PowerOfExpression(self) + + + + + def oC_PowerOfExpression(self): + + localctx = LcypherParser.OC_PowerOfExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_oC_PowerOfExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1023 + self.oC_UnaryAddOrSubtractExpression() + self.state = 1034 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,177,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1025 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1024 + self.match(LcypherParser.SP) + + + self.state = 1027 + self.match(LcypherParser.T__16) + self.state = 1029 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1028 + self.match(LcypherParser.SP) + + + self.state = 1031 + self.oC_UnaryAddOrSubtractExpression() + self.state = 1036 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,177,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_UnaryAddOrSubtractExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_StringListNullOperatorExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_StringListNullOperatorExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_UnaryAddOrSubtractExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_UnaryAddOrSubtractExpression" ): + listener.enterOC_UnaryAddOrSubtractExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_UnaryAddOrSubtractExpression" ): + listener.exitOC_UnaryAddOrSubtractExpression(self) + + + + + def oC_UnaryAddOrSubtractExpression(self): + + localctx = LcypherParser.OC_UnaryAddOrSubtractExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_oC_UnaryAddOrSubtractExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1043 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==13 or _la==14: + self.state = 1037 + _la = self._input.LA(1) + if not(_la==13 or _la==14): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1039 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1038 + self.match(LcypherParser.SP) + + + self.state = 1045 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1046 + self.oC_StringListNullOperatorExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_StringListNullOperatorExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PropertyOrLabelsExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertyOrLabelsExpressionContext,0) + + + def oC_StringOperatorExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_StringOperatorExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_StringOperatorExpressionContext,i) + + + def oC_ListOperatorExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ListOperatorExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ListOperatorExpressionContext,i) + + + def oC_NullOperatorExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_NullOperatorExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_NullOperatorExpressionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_StringListNullOperatorExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_StringListNullOperatorExpression" ): + listener.enterOC_StringListNullOperatorExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_StringListNullOperatorExpression" ): + listener.exitOC_StringListNullOperatorExpression(self) + + + + + def oC_StringListNullOperatorExpression(self): + + localctx = LcypherParser.OC_StringListNullOperatorExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_oC_StringListNullOperatorExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1048 + self.oC_PropertyOrLabelsExpression() + self.state = 1054 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,181,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1052 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,180,self._ctx) + if la_ == 1: + self.state = 1049 + self.oC_StringOperatorExpression() + pass + + elif la_ == 2: + self.state = 1050 + self.oC_ListOperatorExpression() + pass + + elif la_ == 3: + self.state = 1051 + self.oC_NullOperatorExpression() + pass + + + self.state = 1056 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,181,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ListOperatorExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def IN(self): + return self.getToken(LcypherParser.IN, 0) + + def oC_PropertyOrLabelsExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertyOrLabelsExpressionContext,0) + + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ListOperatorExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ListOperatorExpression" ): + listener.enterOC_ListOperatorExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ListOperatorExpression" ): + listener.exitOC_ListOperatorExpression(self) + + + + + def oC_ListOperatorExpression(self): + + localctx = LcypherParser.OC_ListOperatorExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_oC_ListOperatorExpression) + self._la = 0 # Token type + try: + self.state = 1082 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,187,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1057 + self.match(LcypherParser.SP) + self.state = 1058 + self.match(LcypherParser.IN) + self.state = 1060 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1059 + self.match(LcypherParser.SP) + + + self.state = 1062 + self.oC_PropertyOrLabelsExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1064 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1063 + self.match(LcypherParser.SP) + + + self.state = 1066 + self.match(LcypherParser.T__7) + self.state = 1067 + self.oC_Expression() + self.state = 1068 + self.match(LcypherParser.T__8) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1071 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1070 + self.match(LcypherParser.SP) + + + self.state = 1073 + self.match(LcypherParser.T__7) + self.state = 1075 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 562950037332288) != 0) or ((((_la - 81)) & ~0x3f) == 0 and ((1 << (_la - 81)) & 563083161436033) != 0): + self.state = 1074 + self.oC_Expression() + + + self.state = 1077 + self.match(LcypherParser.T__11) + self.state = 1079 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 562950037332288) != 0) or ((((_la - 81)) & ~0x3f) == 0 and ((1 << (_la - 81)) & 563083161436033) != 0): + self.state = 1078 + self.oC_Expression() + + + self.state = 1081 + self.match(LcypherParser.T__8) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_StringOperatorExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PropertyOrLabelsExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertyOrLabelsExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def STARTS(self): + return self.getToken(LcypherParser.STARTS, 0) + + def WITH(self): + return self.getToken(LcypherParser.WITH, 0) + + def ENDS(self): + return self.getToken(LcypherParser.ENDS, 0) + + def CONTAINS(self): + return self.getToken(LcypherParser.CONTAINS, 0) + + def REGEXP(self): + return self.getToken(LcypherParser.REGEXP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_StringOperatorExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_StringOperatorExpression" ): + listener.enterOC_StringOperatorExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_StringOperatorExpression" ): + listener.exitOC_StringOperatorExpression(self) + + + + + def oC_StringOperatorExpression(self): + + localctx = LcypherParser.OC_StringOperatorExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_oC_StringOperatorExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1096 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,188,self._ctx) + if la_ == 1: + self.state = 1084 + self.match(LcypherParser.SP) + self.state = 1085 + self.match(LcypherParser.STARTS) + self.state = 1086 + self.match(LcypherParser.SP) + self.state = 1087 + self.match(LcypherParser.WITH) + pass + + elif la_ == 2: + self.state = 1088 + self.match(LcypherParser.SP) + self.state = 1089 + self.match(LcypherParser.ENDS) + self.state = 1090 + self.match(LcypherParser.SP) + self.state = 1091 + self.match(LcypherParser.WITH) + pass + + elif la_ == 3: + self.state = 1092 + self.match(LcypherParser.SP) + self.state = 1093 + self.match(LcypherParser.CONTAINS) + pass + + elif la_ == 4: + self.state = 1094 + self.match(LcypherParser.SP) + self.state = 1095 + self.match(LcypherParser.REGEXP) + pass + + + self.state = 1099 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1098 + self.match(LcypherParser.SP) + + + self.state = 1101 + self.oC_PropertyOrLabelsExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NullOperatorExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def IS(self): + return self.getToken(LcypherParser.IS, 0) + + def NULL_(self): + return self.getToken(LcypherParser.NULL_, 0) + + def NOT(self): + return self.getToken(LcypherParser.NOT, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_NullOperatorExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_NullOperatorExpression" ): + listener.enterOC_NullOperatorExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_NullOperatorExpression" ): + listener.exitOC_NullOperatorExpression(self) + + + + + def oC_NullOperatorExpression(self): + + localctx = LcypherParser.OC_NullOperatorExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_oC_NullOperatorExpression) + try: + self.state = 1113 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,190,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1103 + self.match(LcypherParser.SP) + self.state = 1104 + self.match(LcypherParser.IS) + self.state = 1105 + self.match(LcypherParser.SP) + self.state = 1106 + self.match(LcypherParser.NULL_) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1107 + self.match(LcypherParser.SP) + self.state = 1108 + self.match(LcypherParser.IS) + self.state = 1109 + self.match(LcypherParser.SP) + self.state = 1110 + self.match(LcypherParser.NOT) + self.state = 1111 + self.match(LcypherParser.SP) + self.state = 1112 + self.match(LcypherParser.NULL_) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PropertyOrLabelsExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Atom(self): + return self.getTypedRuleContext(LcypherParser.OC_AtomContext,0) + + + def oC_PropertyLookup(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PropertyLookupContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PropertyLookupContext,i) + + + def oC_NodeLabels(self): + return self.getTypedRuleContext(LcypherParser.OC_NodeLabelsContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PropertyOrLabelsExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PropertyOrLabelsExpression" ): + listener.enterOC_PropertyOrLabelsExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PropertyOrLabelsExpression" ): + listener.exitOC_PropertyOrLabelsExpression(self) + + + + + def oC_PropertyOrLabelsExpression(self): + + localctx = LcypherParser.OC_PropertyOrLabelsExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_oC_PropertyOrLabelsExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1115 + self.oC_Atom() + self.state = 1122 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,192,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1117 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1116 + self.match(LcypherParser.SP) + + + self.state = 1119 + self.oC_PropertyLookup() + self.state = 1124 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,192,self._ctx) + + self.state = 1129 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,194,self._ctx) + if la_ == 1: + self.state = 1126 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1125 + self.match(LcypherParser.SP) + + + self.state = 1128 + self.oC_NodeLabels() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_AtomContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Literal(self): + return self.getTypedRuleContext(LcypherParser.OC_LiteralContext,0) + + + def oC_Parameter(self): + return self.getTypedRuleContext(LcypherParser.OC_ParameterContext,0) + + + def oC_CaseExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_CaseExpressionContext,0) + + + def COUNT(self): + return self.getToken(LcypherParser.COUNT, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_ListComprehension(self): + return self.getTypedRuleContext(LcypherParser.OC_ListComprehensionContext,0) + + + def oC_PatternComprehension(self): + return self.getTypedRuleContext(LcypherParser.OC_PatternComprehensionContext,0) + + + def ALL(self): + return self.getToken(LcypherParser.ALL, 0) + + def oC_FilterExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_FilterExpressionContext,0) + + + def ANY(self): + return self.getToken(LcypherParser.ANY, 0) + + def NONE(self): + return self.getToken(LcypherParser.NONE, 0) + + def SINGLE(self): + return self.getToken(LcypherParser.SINGLE, 0) + + def oC_RelationshipsPattern(self): + return self.getTypedRuleContext(LcypherParser.OC_RelationshipsPatternContext,0) + + + def oC_ParenthesizedExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_ParenthesizedExpressionContext,0) + + + def oC_FunctionInvocation(self): + return self.getTypedRuleContext(LcypherParser.OC_FunctionInvocationContext,0) + + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Atom + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Atom" ): + listener.enterOC_Atom(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Atom" ): + listener.exitOC_Atom(self) + + + + + def oC_Atom(self): + + localctx = LcypherParser.OC_AtomContext(self, self._ctx, self.state) + self.enterRule(localctx, 130, self.RULE_oC_Atom) + self._la = 0 # Token type + try: + self.state = 1209 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,210,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1131 + self.oC_Literal() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1132 + self.oC_Parameter() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1133 + self.oC_CaseExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1134 + self.match(LcypherParser.COUNT) + self.state = 1136 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1135 + self.match(LcypherParser.SP) + + + self.state = 1138 + self.match(LcypherParser.T__5) + self.state = 1140 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1139 + self.match(LcypherParser.SP) + + + self.state = 1142 + self.match(LcypherParser.T__4) + self.state = 1144 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1143 + self.match(LcypherParser.SP) + + + self.state = 1146 + self.match(LcypherParser.T__6) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1147 + self.oC_ListComprehension() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1148 + self.oC_PatternComprehension() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1149 + self.match(LcypherParser.ALL) + self.state = 1151 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1150 + self.match(LcypherParser.SP) + + + self.state = 1153 + self.match(LcypherParser.T__5) + self.state = 1155 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1154 + self.match(LcypherParser.SP) + + + self.state = 1157 + self.oC_FilterExpression() + self.state = 1159 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1158 + self.match(LcypherParser.SP) + + + self.state = 1161 + self.match(LcypherParser.T__6) + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 1163 + self.match(LcypherParser.ANY) + self.state = 1165 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1164 + self.match(LcypherParser.SP) + + + self.state = 1167 + self.match(LcypherParser.T__5) + self.state = 1169 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1168 + self.match(LcypherParser.SP) + + + self.state = 1171 + self.oC_FilterExpression() + self.state = 1173 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1172 + self.match(LcypherParser.SP) + + + self.state = 1175 + self.match(LcypherParser.T__6) + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 1177 + self.match(LcypherParser.NONE) + self.state = 1179 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1178 + self.match(LcypherParser.SP) + + + self.state = 1181 + self.match(LcypherParser.T__5) + self.state = 1183 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1182 + self.match(LcypherParser.SP) + + + self.state = 1185 + self.oC_FilterExpression() + self.state = 1187 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1186 + self.match(LcypherParser.SP) + + + self.state = 1189 + self.match(LcypherParser.T__6) + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 1191 + self.match(LcypherParser.SINGLE) + self.state = 1193 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1192 + self.match(LcypherParser.SP) + + + self.state = 1195 + self.match(LcypherParser.T__5) + self.state = 1197 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1196 + self.match(LcypherParser.SP) + + + self.state = 1199 + self.oC_FilterExpression() + self.state = 1201 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1200 + self.match(LcypherParser.SP) + + + self.state = 1203 + self.match(LcypherParser.T__6) + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 1205 + self.oC_RelationshipsPattern() + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 1206 + self.oC_ParenthesizedExpression() + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 1207 + self.oC_FunctionInvocation() + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 1208 + self.oC_Variable() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_LiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_NumberLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_NumberLiteralContext,0) + + + def StringLiteral(self): + return self.getToken(LcypherParser.StringLiteral, 0) + + def oC_BooleanLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_BooleanLiteralContext,0) + + + def NULL_(self): + return self.getToken(LcypherParser.NULL_, 0) + + def oC_MapLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_MapLiteralContext,0) + + + def oC_ListLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_ListLiteralContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Literal + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Literal" ): + listener.enterOC_Literal(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Literal" ): + listener.exitOC_Literal(self) + + + + + def oC_Literal(self): + + localctx = LcypherParser.OC_LiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_oC_Literal) + try: + self.state = 1217 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [103, 104, 105, 113, 114]: + self.enterOuterAlt(localctx, 1) + self.state = 1211 + self.oC_NumberLiteral() + pass + elif token in [101]: + self.enterOuterAlt(localctx, 2) + self.state = 1212 + self.match(LcypherParser.StringLiteral) + pass + elif token in [93, 94]: + self.enterOuterAlt(localctx, 3) + self.state = 1213 + self.oC_BooleanLiteral() + pass + elif token in [88]: + self.enterOuterAlt(localctx, 4) + self.state = 1214 + self.match(LcypherParser.NULL_) + pass + elif token in [24]: + self.enterOuterAlt(localctx, 5) + self.state = 1215 + self.oC_MapLiteral() + pass + elif token in [8]: + self.enterOuterAlt(localctx, 6) + self.state = 1216 + self.oC_ListLiteral() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_BooleanLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRUE_(self): + return self.getToken(LcypherParser.TRUE_, 0) + + def FALSE_(self): + return self.getToken(LcypherParser.FALSE_, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_BooleanLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_BooleanLiteral" ): + listener.enterOC_BooleanLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_BooleanLiteral" ): + listener.exitOC_BooleanLiteral(self) + + + + + def oC_BooleanLiteral(self): + + localctx = LcypherParser.OC_BooleanLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_oC_BooleanLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1219 + _la = self._input.LA(1) + if not(_la==93 or _la==94): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ListLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ListLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ListLiteral" ): + listener.enterOC_ListLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ListLiteral" ): + listener.exitOC_ListLiteral(self) + + + + + def oC_ListLiteral(self): + + localctx = LcypherParser.OC_ListLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_oC_ListLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1221 + self.match(LcypherParser.T__7) + self.state = 1223 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1222 + self.match(LcypherParser.SP) + + + self.state = 1242 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 562950037332288) != 0) or ((((_la - 81)) & ~0x3f) == 0 and ((1 << (_la - 81)) & 563083161436033) != 0): + self.state = 1225 + self.oC_Expression() + self.state = 1227 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1226 + self.match(LcypherParser.SP) + + + self.state = 1239 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==2: + self.state = 1229 + self.match(LcypherParser.T__1) + self.state = 1231 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1230 + self.match(LcypherParser.SP) + + + self.state = 1233 + self.oC_Expression() + self.state = 1235 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1234 + self.match(LcypherParser.SP) + + + self.state = 1241 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1244 + self.match(LcypherParser.T__8) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PartialComparisonExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_AddOrSubtractExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_AddOrSubtractExpressionContext,0) + + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PartialComparisonExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PartialComparisonExpression" ): + listener.enterOC_PartialComparisonExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PartialComparisonExpression" ): + listener.exitOC_PartialComparisonExpression(self) + + + + + def oC_PartialComparisonExpression(self): + + localctx = LcypherParser.OC_PartialComparisonExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_oC_PartialComparisonExpression) + self._la = 0 # Token type + try: + self.state = 1276 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3]: + self.enterOuterAlt(localctx, 1) + self.state = 1246 + self.match(LcypherParser.T__2) + self.state = 1248 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1247 + self.match(LcypherParser.SP) + + + self.state = 1250 + self.oC_AddOrSubtractExpression() + pass + elif token in [18]: + self.enterOuterAlt(localctx, 2) + self.state = 1251 + self.match(LcypherParser.T__17) + self.state = 1253 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1252 + self.match(LcypherParser.SP) + + + self.state = 1255 + self.oC_AddOrSubtractExpression() + pass + elif token in [19]: + self.enterOuterAlt(localctx, 3) + self.state = 1256 + self.match(LcypherParser.T__18) + self.state = 1258 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1257 + self.match(LcypherParser.SP) + + + self.state = 1260 + self.oC_AddOrSubtractExpression() + pass + elif token in [20]: + self.enterOuterAlt(localctx, 4) + self.state = 1261 + self.match(LcypherParser.T__19) + self.state = 1263 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1262 + self.match(LcypherParser.SP) + + + self.state = 1265 + self.oC_AddOrSubtractExpression() + pass + elif token in [21]: + self.enterOuterAlt(localctx, 5) + self.state = 1266 + self.match(LcypherParser.T__20) + self.state = 1268 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1267 + self.match(LcypherParser.SP) + + + self.state = 1270 + self.oC_AddOrSubtractExpression() + pass + elif token in [22]: + self.enterOuterAlt(localctx, 6) + self.state = 1271 + self.match(LcypherParser.T__21) + self.state = 1273 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1272 + self.match(LcypherParser.SP) + + + self.state = 1275 + self.oC_AddOrSubtractExpression() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ParenthesizedExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ParenthesizedExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ParenthesizedExpression" ): + listener.enterOC_ParenthesizedExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ParenthesizedExpression" ): + listener.exitOC_ParenthesizedExpression(self) + + + + + def oC_ParenthesizedExpression(self): + + localctx = LcypherParser.OC_ParenthesizedExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_oC_ParenthesizedExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1278 + self.match(LcypherParser.T__5) + self.state = 1280 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1279 + self.match(LcypherParser.SP) + + + self.state = 1282 + self.oC_Expression() + self.state = 1284 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1283 + self.match(LcypherParser.SP) + + + self.state = 1286 + self.match(LcypherParser.T__6) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RelationshipsPatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_NodePattern(self): + return self.getTypedRuleContext(LcypherParser.OC_NodePatternContext,0) + + + def oC_PatternElementChain(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PatternElementChainContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PatternElementChainContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RelationshipsPattern + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RelationshipsPattern" ): + listener.enterOC_RelationshipsPattern(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RelationshipsPattern" ): + listener.exitOC_RelationshipsPattern(self) + + + + + def oC_RelationshipsPattern(self): + + localctx = LcypherParser.OC_RelationshipsPatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_oC_RelationshipsPattern) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1288 + self.oC_NodePattern() + self.state = 1293 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1290 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1289 + self.match(LcypherParser.SP) + + + self.state = 1292 + self.oC_PatternElementChain() + + else: + raise NoViableAltException(self) + self.state = 1295 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,228,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_FilterExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_IdInColl(self): + return self.getTypedRuleContext(LcypherParser.OC_IdInCollContext,0) + + + def oC_Where(self): + return self.getTypedRuleContext(LcypherParser.OC_WhereContext,0) + + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_FilterExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_FilterExpression" ): + listener.enterOC_FilterExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_FilterExpression" ): + listener.exitOC_FilterExpression(self) + + + + + def oC_FilterExpression(self): + + localctx = LcypherParser.OC_FilterExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_oC_FilterExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1297 + self.oC_IdInColl() + self.state = 1302 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,230,self._ctx) + if la_ == 1: + self.state = 1299 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1298 + self.match(LcypherParser.SP) + + + self.state = 1301 + self.oC_Where() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_IdInCollContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def IN(self): + return self.getToken(LcypherParser.IN, 0) + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_IdInColl + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_IdInColl" ): + listener.enterOC_IdInColl(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_IdInColl" ): + listener.exitOC_IdInColl(self) + + + + + def oC_IdInColl(self): + + localctx = LcypherParser.OC_IdInCollContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_oC_IdInColl) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1304 + self.oC_Variable() + self.state = 1305 + self.match(LcypherParser.SP) + self.state = 1306 + self.match(LcypherParser.IN) + self.state = 1307 + self.match(LcypherParser.SP) + self.state = 1308 + self.oC_Expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_FunctionInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_FunctionName(self): + return self.getTypedRuleContext(LcypherParser.OC_FunctionNameContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def DISTINCT(self): + return self.getToken(LcypherParser.DISTINCT, 0) + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_FunctionInvocation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_FunctionInvocation" ): + listener.enterOC_FunctionInvocation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_FunctionInvocation" ): + listener.exitOC_FunctionInvocation(self) + + + + + def oC_FunctionInvocation(self): + + localctx = LcypherParser.OC_FunctionInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_oC_FunctionInvocation) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1310 + self.oC_FunctionName() + self.state = 1312 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1311 + self.match(LcypherParser.SP) + + + self.state = 1314 + self.match(LcypherParser.T__5) + self.state = 1316 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1315 + self.match(LcypherParser.SP) + + + self.state = 1322 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==64: + self.state = 1318 + self.match(LcypherParser.DISTINCT) + self.state = 1320 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1319 + self.match(LcypherParser.SP) + + + + + self.state = 1341 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 562950037332288) != 0) or ((((_la - 81)) & ~0x3f) == 0 and ((1 << (_la - 81)) & 563083161436033) != 0): + self.state = 1324 + self.oC_Expression() + self.state = 1326 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1325 + self.match(LcypherParser.SP) + + + self.state = 1338 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==2: + self.state = 1328 + self.match(LcypherParser.T__1) + self.state = 1330 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1329 + self.match(LcypherParser.SP) + + + self.state = 1332 + self.oC_Expression() + self.state = 1334 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1333 + self.match(LcypherParser.SP) + + + self.state = 1340 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1343 + self.match(LcypherParser.T__6) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_FunctionNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Namespace(self): + return self.getTypedRuleContext(LcypherParser.OC_NamespaceContext,0) + + + def oC_SymbolicName(self): + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,0) + + + def EXISTS(self): + return self.getToken(LcypherParser.EXISTS, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_FunctionName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_FunctionName" ): + listener.enterOC_FunctionName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_FunctionName" ): + listener.exitOC_FunctionName(self) + + + + + def oC_FunctionName(self): + + localctx = LcypherParser.OC_FunctionNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_oC_FunctionName) + try: + self.state = 1349 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89, 90, 91, 92, 106, 115, 116, 117, 130]: + self.enterOuterAlt(localctx, 1) + self.state = 1345 + self.oC_Namespace() + self.state = 1346 + self.oC_SymbolicName() + pass + elif token in [95]: + self.enterOuterAlt(localctx, 2) + self.state = 1348 + self.match(LcypherParser.EXISTS) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ExplicitProcedureInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_ProcedureName(self): + return self.getTypedRuleContext(LcypherParser.OC_ProcedureNameContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ExplicitProcedureInvocation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ExplicitProcedureInvocation" ): + listener.enterOC_ExplicitProcedureInvocation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ExplicitProcedureInvocation" ): + listener.exitOC_ExplicitProcedureInvocation(self) + + + + + def oC_ExplicitProcedureInvocation(self): + + localctx = LcypherParser.OC_ExplicitProcedureInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_oC_ExplicitProcedureInvocation) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1351 + self.oC_ProcedureName() + self.state = 1353 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1352 + self.match(LcypherParser.SP) + + + self.state = 1355 + self.match(LcypherParser.T__5) + self.state = 1357 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1356 + self.match(LcypherParser.SP) + + + self.state = 1376 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 562950037332288) != 0) or ((((_la - 81)) & ~0x3f) == 0 and ((1 << (_la - 81)) & 563083161436033) != 0): + self.state = 1359 + self.oC_Expression() + self.state = 1361 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1360 + self.match(LcypherParser.SP) + + + self.state = 1373 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==2: + self.state = 1363 + self.match(LcypherParser.T__1) + self.state = 1365 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1364 + self.match(LcypherParser.SP) + + + self.state = 1367 + self.oC_Expression() + self.state = 1369 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1368 + self.match(LcypherParser.SP) + + + self.state = 1375 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1378 + self.match(LcypherParser.T__6) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ImplicitProcedureInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_ProcedureName(self): + return self.getTypedRuleContext(LcypherParser.OC_ProcedureNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ImplicitProcedureInvocation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ImplicitProcedureInvocation" ): + listener.enterOC_ImplicitProcedureInvocation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ImplicitProcedureInvocation" ): + listener.exitOC_ImplicitProcedureInvocation(self) + + + + + def oC_ImplicitProcedureInvocation(self): + + localctx = LcypherParser.OC_ImplicitProcedureInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_oC_ImplicitProcedureInvocation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1380 + self.oC_ProcedureName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ProcedureResultFieldContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SymbolicName(self): + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ProcedureResultField + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ProcedureResultField" ): + listener.enterOC_ProcedureResultField(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ProcedureResultField" ): + listener.exitOC_ProcedureResultField(self) + + + + + def oC_ProcedureResultField(self): + + localctx = LcypherParser.OC_ProcedureResultFieldContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_oC_ProcedureResultField) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1382 + self.oC_SymbolicName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ProcedureNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Namespace(self): + return self.getTypedRuleContext(LcypherParser.OC_NamespaceContext,0) + + + def oC_SymbolicName(self): + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ProcedureName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ProcedureName" ): + listener.enterOC_ProcedureName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ProcedureName" ): + listener.exitOC_ProcedureName(self) + + + + + def oC_ProcedureName(self): + + localctx = LcypherParser.OC_ProcedureNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_oC_ProcedureName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1384 + self.oC_Namespace() + self.state = 1385 + self.oC_SymbolicName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NamespaceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SymbolicName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_SymbolicNameContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Namespace + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Namespace" ): + listener.enterOC_Namespace(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Namespace" ): + listener.exitOC_Namespace(self) + + + + + def oC_Namespace(self): + + localctx = LcypherParser.OC_NamespaceContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_oC_Namespace) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1392 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,248,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1387 + self.oC_SymbolicName() + self.state = 1388 + self.match(LcypherParser.T__22) + self.state = 1394 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,248,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ListComprehensionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_FilterExpression(self): + return self.getTypedRuleContext(LcypherParser.OC_FilterExpressionContext,0) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Expression(self): + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ListComprehension + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ListComprehension" ): + listener.enterOC_ListComprehension(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ListComprehension" ): + listener.exitOC_ListComprehension(self) + + + + + def oC_ListComprehension(self): + + localctx = LcypherParser.OC_ListComprehensionContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_oC_ListComprehension) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1395 + self.match(LcypherParser.T__7) + self.state = 1397 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1396 + self.match(LcypherParser.SP) + + + self.state = 1399 + self.oC_FilterExpression() + self.state = 1408 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,252,self._ctx) + if la_ == 1: + self.state = 1401 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1400 + self.match(LcypherParser.SP) + + + self.state = 1403 + self.match(LcypherParser.T__10) + self.state = 1405 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1404 + self.match(LcypherParser.SP) + + + self.state = 1407 + self.oC_Expression() + + + self.state = 1411 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1410 + self.match(LcypherParser.SP) + + + self.state = 1413 + self.match(LcypherParser.T__8) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PatternComprehensionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_RelationshipsPattern(self): + return self.getTypedRuleContext(LcypherParser.OC_RelationshipsPatternContext,0) + + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_Variable(self): + return self.getTypedRuleContext(LcypherParser.OC_VariableContext,0) + + + def WHERE(self): + return self.getToken(LcypherParser.WHERE, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PatternComprehension + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PatternComprehension" ): + listener.enterOC_PatternComprehension(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PatternComprehension" ): + listener.exitOC_PatternComprehension(self) + + + + + def oC_PatternComprehension(self): + + localctx = LcypherParser.OC_PatternComprehensionContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_oC_PatternComprehension) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1415 + self.match(LcypherParser.T__7) + self.state = 1417 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1416 + self.match(LcypherParser.SP) + + + self.state = 1427 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 89)) & ~0x3f) == 0 and ((1 << (_la - 89)) & 2199493148687) != 0): + self.state = 1419 + self.oC_Variable() + self.state = 1421 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1420 + self.match(LcypherParser.SP) + + + self.state = 1423 + self.match(LcypherParser.T__2) + self.state = 1425 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1424 + self.match(LcypherParser.SP) + + + + + self.state = 1429 + self.oC_RelationshipsPattern() + self.state = 1431 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1430 + self.match(LcypherParser.SP) + + + self.state = 1441 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==77: + self.state = 1433 + self.match(LcypherParser.WHERE) + self.state = 1435 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1434 + self.match(LcypherParser.SP) + + + self.state = 1437 + self.oC_Expression() + self.state = 1439 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1438 + self.match(LcypherParser.SP) + + + + + self.state = 1443 + self.match(LcypherParser.T__10) + self.state = 1445 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1444 + self.match(LcypherParser.SP) + + + self.state = 1447 + self.oC_Expression() + self.state = 1449 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1448 + self.match(LcypherParser.SP) + + + self.state = 1451 + self.match(LcypherParser.T__8) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PropertyLookupContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_PropertyKeyName(self): + return self.getTypedRuleContext(LcypherParser.OC_PropertyKeyNameContext,0) + + + def SP(self): + return self.getToken(LcypherParser.SP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PropertyLookup + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PropertyLookup" ): + listener.enterOC_PropertyLookup(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PropertyLookup" ): + listener.exitOC_PropertyLookup(self) + + + + + def oC_PropertyLookup(self): + + localctx = LcypherParser.OC_PropertyLookupContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_oC_PropertyLookup) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1453 + self.match(LcypherParser.T__22) + self.state = 1455 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1454 + self.match(LcypherParser.SP) + + + self.state = 1457 + self.oC_PropertyKeyName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_CaseExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def END(self): + return self.getToken(LcypherParser.END, 0) + + def ELSE(self): + return self.getToken(LcypherParser.ELSE, 0) + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def CASE(self): + return self.getToken(LcypherParser.CASE, 0) + + def oC_CaseAlternatives(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_CaseAlternativesContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_CaseAlternativesContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_CaseExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_CaseExpression" ): + listener.enterOC_CaseExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_CaseExpression" ): + listener.exitOC_CaseExpression(self) + + + + + def oC_CaseExpression(self): + + localctx = LcypherParser.OC_CaseExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_oC_CaseExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1481 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,270,self._ctx) + if la_ == 1: + self.state = 1459 + self.match(LcypherParser.CASE) + self.state = 1464 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1461 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1460 + self.match(LcypherParser.SP) + + + self.state = 1463 + self.oC_CaseAlternatives() + + else: + raise NoViableAltException(self) + self.state = 1466 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,266,self._ctx) + + pass + + elif la_ == 2: + self.state = 1468 + self.match(LcypherParser.CASE) + self.state = 1470 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1469 + self.match(LcypherParser.SP) + + + self.state = 1472 + self.oC_Expression() + self.state = 1477 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1474 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1473 + self.match(LcypherParser.SP) + + + self.state = 1476 + self.oC_CaseAlternatives() + + else: + raise NoViableAltException(self) + self.state = 1479 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,269,self._ctx) + + pass + + + self.state = 1491 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,273,self._ctx) + if la_ == 1: + self.state = 1484 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1483 + self.match(LcypherParser.SP) + + + self.state = 1486 + self.match(LcypherParser.ELSE) + self.state = 1488 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1487 + self.match(LcypherParser.SP) + + + self.state = 1490 + self.oC_Expression() + + + self.state = 1494 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1493 + self.match(LcypherParser.SP) + + + self.state = 1496 + self.match(LcypherParser.END) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_CaseAlternativesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHEN(self): + return self.getToken(LcypherParser.WHEN, 0) + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def THEN(self): + return self.getToken(LcypherParser.THEN, 0) + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_CaseAlternatives + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_CaseAlternatives" ): + listener.enterOC_CaseAlternatives(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_CaseAlternatives" ): + listener.exitOC_CaseAlternatives(self) + + + + + def oC_CaseAlternatives(self): + + localctx = LcypherParser.OC_CaseAlternativesContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_oC_CaseAlternatives) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1498 + self.match(LcypherParser.WHEN) + self.state = 1500 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1499 + self.match(LcypherParser.SP) + + + self.state = 1502 + self.oC_Expression() + self.state = 1504 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1503 + self.match(LcypherParser.SP) + + + self.state = 1506 + self.match(LcypherParser.THEN) + self.state = 1508 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1507 + self.match(LcypherParser.SP) + + + self.state = 1510 + self.oC_Expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_VariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SymbolicName(self): + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Variable + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Variable" ): + listener.enterOC_Variable(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Variable" ): + listener.exitOC_Variable(self) + + + + + def oC_Variable(self): + + localctx = LcypherParser.OC_VariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_oC_Variable) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1512 + self.oC_SymbolicName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_NumberLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_DoubleLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_DoubleLiteralContext,0) + + + def oC_IntegerLiteral(self): + return self.getTypedRuleContext(LcypherParser.OC_IntegerLiteralContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_NumberLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_NumberLiteral" ): + listener.enterOC_NumberLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_NumberLiteral" ): + listener.exitOC_NumberLiteral(self) + + + + + def oC_NumberLiteral(self): + + localctx = LcypherParser.OC_NumberLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 174, self.RULE_oC_NumberLiteral) + try: + self.state = 1516 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [113, 114]: + self.enterOuterAlt(localctx, 1) + self.state = 1514 + self.oC_DoubleLiteral() + pass + elif token in [103, 104, 105]: + self.enterOuterAlt(localctx, 2) + self.state = 1515 + self.oC_IntegerLiteral() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_MapLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def oC_PropertyKeyName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PropertyKeyNameContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PropertyKeyNameContext,i) + + + def oC_Expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_ExpressionContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_ExpressionContext,i) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_MapLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_MapLiteral" ): + listener.enterOC_MapLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_MapLiteral" ): + listener.exitOC_MapLiteral(self) + + + + + def oC_MapLiteral(self): + + localctx = LcypherParser.OC_MapLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 176, self.RULE_oC_MapLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1518 + self.match(LcypherParser.T__23) + self.state = 1520 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1519 + self.match(LcypherParser.SP) + + + self.state = 1555 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 48)) & ~0x3f) == 0 and ((1 << (_la - 48)) & 297237300058759167) != 0) or ((((_la - 115)) & ~0x3f) == 0 and ((1 << (_la - 115)) & 40959) != 0): + self.state = 1522 + self.oC_PropertyKeyName() + self.state = 1524 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1523 + self.match(LcypherParser.SP) + + + self.state = 1526 + self.match(LcypherParser.T__9) + self.state = 1528 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1527 + self.match(LcypherParser.SP) + + + self.state = 1530 + self.oC_Expression() + self.state = 1532 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1531 + self.match(LcypherParser.SP) + + + self.state = 1552 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==2: + self.state = 1534 + self.match(LcypherParser.T__1) + self.state = 1536 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1535 + self.match(LcypherParser.SP) + + + self.state = 1538 + self.oC_PropertyKeyName() + self.state = 1540 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1539 + self.match(LcypherParser.SP) + + + self.state = 1542 + self.match(LcypherParser.T__9) + self.state = 1544 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1543 + self.match(LcypherParser.SP) + + + self.state = 1546 + self.oC_Expression() + self.state = 1548 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1547 + self.match(LcypherParser.SP) + + + self.state = 1554 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1557 + self.match(LcypherParser.T__24) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SymbolicName(self): + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,0) + + + def DecimalInteger(self): + return self.getToken(LcypherParser.DecimalInteger, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Parameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Parameter" ): + listener.enterOC_Parameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Parameter" ): + listener.exitOC_Parameter(self) + + + + + def oC_Parameter(self): + + localctx = LcypherParser.OC_ParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 178, self.RULE_oC_Parameter) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1559 + self.match(LcypherParser.T__25) + self.state = 1562 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89, 90, 91, 92, 106, 115, 116, 117, 130]: + self.state = 1560 + self.oC_SymbolicName() + pass + elif token in [104]: + self.state = 1561 + self.match(LcypherParser.DecimalInteger) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PropertyExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_Atom(self): + return self.getTypedRuleContext(LcypherParser.OC_AtomContext,0) + + + def oC_PropertyLookup(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(LcypherParser.OC_PropertyLookupContext) + else: + return self.getTypedRuleContext(LcypherParser.OC_PropertyLookupContext,i) + + + def SP(self, i:int=None): + if i is None: + return self.getTokens(LcypherParser.SP) + else: + return self.getToken(LcypherParser.SP, i) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PropertyExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PropertyExpression" ): + listener.enterOC_PropertyExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PropertyExpression" ): + listener.exitOC_PropertyExpression(self) + + + + + def oC_PropertyExpression(self): + + localctx = LcypherParser.OC_PropertyExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 180, self.RULE_oC_PropertyExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1564 + self.oC_Atom() + self.state = 1569 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1566 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1565 + self.match(LcypherParser.SP) + + + self.state = 1568 + self.oC_PropertyLookup() + + else: + raise NoViableAltException(self) + self.state = 1571 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,291,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_PropertyKeyNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SchemaName(self): + return self.getTypedRuleContext(LcypherParser.OC_SchemaNameContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_PropertyKeyName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_PropertyKeyName" ): + listener.enterOC_PropertyKeyName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_PropertyKeyName" ): + listener.exitOC_PropertyKeyName(self) + + + + + def oC_PropertyKeyName(self): + + localctx = LcypherParser.OC_PropertyKeyNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_oC_PropertyKeyName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1573 + self.oC_SchemaName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_IntegerLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def HexInteger(self): + return self.getToken(LcypherParser.HexInteger, 0) + + def OctalInteger(self): + return self.getToken(LcypherParser.OctalInteger, 0) + + def DecimalInteger(self): + return self.getToken(LcypherParser.DecimalInteger, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_IntegerLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_IntegerLiteral" ): + listener.enterOC_IntegerLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_IntegerLiteral" ): + listener.exitOC_IntegerLiteral(self) + + + + + def oC_IntegerLiteral(self): + + localctx = LcypherParser.OC_IntegerLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 184, self.RULE_oC_IntegerLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1575 + _la = self._input.LA(1) + if not(((((_la - 103)) & ~0x3f) == 0 and ((1 << (_la - 103)) & 7) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_DoubleLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ExponentDecimalReal(self): + return self.getToken(LcypherParser.ExponentDecimalReal, 0) + + def RegularDecimalReal(self): + return self.getToken(LcypherParser.RegularDecimalReal, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_DoubleLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_DoubleLiteral" ): + listener.enterOC_DoubleLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_DoubleLiteral" ): + listener.exitOC_DoubleLiteral(self) + + + + + def oC_DoubleLiteral(self): + + localctx = LcypherParser.OC_DoubleLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 186, self.RULE_oC_DoubleLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1577 + _la = self._input.LA(1) + if not(_la==113 or _la==114): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SchemaNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def oC_SymbolicName(self): + return self.getTypedRuleContext(LcypherParser.OC_SymbolicNameContext,0) + + + def oC_ReservedWord(self): + return self.getTypedRuleContext(LcypherParser.OC_ReservedWordContext,0) + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_SchemaName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_SchemaName" ): + listener.enterOC_SchemaName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_SchemaName" ): + listener.exitOC_SchemaName(self) + + + + + def oC_SchemaName(self): + + localctx = LcypherParser.OC_SchemaNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_oC_SchemaName) + try: + self.state = 1581 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89, 90, 91, 92, 106, 115, 116, 117, 130]: + self.enterOuterAlt(localctx, 1) + self.state = 1579 + self.oC_SymbolicName() + pass + elif token in [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 93, 94, 95, 96, 97, 98, 99, 100, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127]: + self.enterOuterAlt(localctx, 2) + self.state = 1580 + self.oC_ReservedWord() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_SymbolicNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def UnescapedSymbolicName(self): + return self.getToken(LcypherParser.UnescapedSymbolicName, 0) + + def EscapedSymbolicName(self): + return self.getToken(LcypherParser.EscapedSymbolicName, 0) + + def HexLetter(self): + return self.getToken(LcypherParser.HexLetter, 0) + + def COUNT(self): + return self.getToken(LcypherParser.COUNT, 0) + + def FILTER(self): + return self.getToken(LcypherParser.FILTER, 0) + + def EXTRACT(self): + return self.getToken(LcypherParser.EXTRACT, 0) + + def ANY(self): + return self.getToken(LcypherParser.ANY, 0) + + def NONE(self): + return self.getToken(LcypherParser.NONE, 0) + + def SINGLE(self): + return self.getToken(LcypherParser.SINGLE, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_SymbolicName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_SymbolicName" ): + listener.enterOC_SymbolicName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_SymbolicName" ): + listener.exitOC_SymbolicName(self) + + + + + def oC_SymbolicName(self): + + localctx = LcypherParser.OC_SymbolicNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_oC_SymbolicName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1583 + _la = self._input.LA(1) + if not(((((_la - 89)) & ~0x3f) == 0 and ((1 << (_la - 89)) & 2199493148687) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_ReservedWordContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ALL(self): + return self.getToken(LcypherParser.ALL, 0) + + def ASC(self): + return self.getToken(LcypherParser.ASC, 0) + + def ASCENDING(self): + return self.getToken(LcypherParser.ASCENDING, 0) + + def BY(self): + return self.getToken(LcypherParser.BY, 0) + + def CREATE(self): + return self.getToken(LcypherParser.CREATE, 0) + + def DELETE_(self): + return self.getToken(LcypherParser.DELETE_, 0) + + def DESC(self): + return self.getToken(LcypherParser.DESC, 0) + + def DESCENDING(self): + return self.getToken(LcypherParser.DESCENDING, 0) + + def DETACH(self): + return self.getToken(LcypherParser.DETACH, 0) + + def EXISTS(self): + return self.getToken(LcypherParser.EXISTS, 0) + + def LIMIT(self): + return self.getToken(LcypherParser.LIMIT, 0) + + def MATCH(self): + return self.getToken(LcypherParser.MATCH, 0) + + def MERGE(self): + return self.getToken(LcypherParser.MERGE, 0) + + def ON(self): + return self.getToken(LcypherParser.ON, 0) + + def OPTIONAL_(self): + return self.getToken(LcypherParser.OPTIONAL_, 0) + + def ORDER(self): + return self.getToken(LcypherParser.ORDER, 0) + + def REMOVE(self): + return self.getToken(LcypherParser.REMOVE, 0) + + def RETURN(self): + return self.getToken(LcypherParser.RETURN, 0) + + def SET(self): + return self.getToken(LcypherParser.SET, 0) + + def L_SKIP(self): + return self.getToken(LcypherParser.L_SKIP, 0) + + def WHERE(self): + return self.getToken(LcypherParser.WHERE, 0) + + def WITH(self): + return self.getToken(LcypherParser.WITH, 0) + + def UNION(self): + return self.getToken(LcypherParser.UNION, 0) + + def UNWIND(self): + return self.getToken(LcypherParser.UNWIND, 0) + + def AND(self): + return self.getToken(LcypherParser.AND, 0) + + def AS(self): + return self.getToken(LcypherParser.AS, 0) + + def CONTAINS(self): + return self.getToken(LcypherParser.CONTAINS, 0) + + def DISTINCT(self): + return self.getToken(LcypherParser.DISTINCT, 0) + + def ENDS(self): + return self.getToken(LcypherParser.ENDS, 0) + + def IN(self): + return self.getToken(LcypherParser.IN, 0) + + def IS(self): + return self.getToken(LcypherParser.IS, 0) + + def NOT(self): + return self.getToken(LcypherParser.NOT, 0) + + def OR(self): + return self.getToken(LcypherParser.OR, 0) + + def STARTS(self): + return self.getToken(LcypherParser.STARTS, 0) + + def XOR(self): + return self.getToken(LcypherParser.XOR, 0) + + def FALSE_(self): + return self.getToken(LcypherParser.FALSE_, 0) + + def TRUE_(self): + return self.getToken(LcypherParser.TRUE_, 0) + + def NULL_(self): + return self.getToken(LcypherParser.NULL_, 0) + + def CONSTRAINT(self): + return self.getToken(LcypherParser.CONSTRAINT, 0) + + def DO(self): + return self.getToken(LcypherParser.DO, 0) + + def FOR(self): + return self.getToken(LcypherParser.FOR, 0) + + def REQUIRE(self): + return self.getToken(LcypherParser.REQUIRE, 0) + + def UNIQUE(self): + return self.getToken(LcypherParser.UNIQUE, 0) + + def CASE(self): + return self.getToken(LcypherParser.CASE, 0) + + def WHEN(self): + return self.getToken(LcypherParser.WHEN, 0) + + def THEN(self): + return self.getToken(LcypherParser.THEN, 0) + + def ELSE(self): + return self.getToken(LcypherParser.ELSE, 0) + + def END(self): + return self.getToken(LcypherParser.END, 0) + + def MANDATORY(self): + return self.getToken(LcypherParser.MANDATORY, 0) + + def SCALAR(self): + return self.getToken(LcypherParser.SCALAR, 0) + + def OF(self): + return self.getToken(LcypherParser.OF, 0) + + def ADD(self): + return self.getToken(LcypherParser.ADD, 0) + + def DROP(self): + return self.getToken(LcypherParser.DROP, 0) + + def getRuleIndex(self): + return LcypherParser.RULE_oC_ReservedWord + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_ReservedWord" ): + listener.enterOC_ReservedWord(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_ReservedWord" ): + listener.exitOC_ReservedWord(self) + + + + + def oC_ReservedWord(self): + + localctx = LcypherParser.OC_ReservedWordContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_oC_ReservedWord) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1585 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & -6917810502617792512) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -18014261578046465) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_LeftArrowHeadContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_LeftArrowHead + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_LeftArrowHead" ): + listener.enterOC_LeftArrowHead(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_LeftArrowHead" ): + listener.exitOC_LeftArrowHead(self) + + + + + def oC_LeftArrowHead(self): + + localctx = LcypherParser.OC_LeftArrowHeadContext(self, self._ctx, self.state) + self.enterRule(localctx, 194, self.RULE_oC_LeftArrowHead) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1587 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 2013790208) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_RightArrowHeadContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_RightArrowHead + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_RightArrowHead" ): + listener.enterOC_RightArrowHead(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_RightArrowHead" ): + listener.exitOC_RightArrowHead(self) + + + + + def oC_RightArrowHead(self): + + localctx = LcypherParser.OC_RightArrowHeadContext(self, self._ctx, self.state) + self.enterRule(localctx, 196, self.RULE_oC_RightArrowHead) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1589 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 32213303296) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OC_DashContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return LcypherParser.RULE_oC_Dash + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOC_Dash" ): + listener.enterOC_Dash(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOC_Dash" ): + listener.exitOC_Dash(self) + + + + + def oC_Dash(self): + + localctx = LcypherParser.OC_DashContext(self, self._ctx, self.state) + self.enterRule(localctx, 198, self.RULE_oC_Dash) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1591 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 70334384455680) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + + diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/__init__.py @@ -0,0 +1 @@ + diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/grammar_evaluator.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/grammar_evaluator.py new file mode 100644 index 00000000..7c6331da --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/grammar_evaluator.py @@ -0,0 +1,47 @@ +import jaro +import sys +import os.path +import antlr4 +from antlr4 import * +from antlr4.error.ErrorListener import ErrorListener + +sys.path.append(os.path.dirname(__file__)) +from LcypherLexer import LcypherLexer +from LcypherParser import LcypherParser + + +class MyErrorListener(ErrorListener): + def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): + raise Exception( + "ERROR: when parsing line %d column %d: %s\n" % (line, column, msg) + ) + + +class GrammarEvaluator: + def evaluate(self, query_predict, query_gold): + error_listener = MyErrorListener() + try: + input_stream = InputStream(query_gold) + lexer = LcypherLexer(input_stream) + lexer.removeErrorListeners() + lexer.addErrorListener(error_listener) + stream = CommonTokenStream(lexer) + parser = LcypherParser(stream) + parser.removeErrorListeners() + parser.addErrorListener(error_listener) + tree = parser.oC_Cypher() + try: + input_stream = InputStream(query_predict) + lexer = LcypherLexer(input_stream) + lexer.removeErrorListeners() + lexer.addErrorListener(error_listener) + stream = CommonTokenStream(lexer) + parser = LcypherParser(stream) + parser.removeErrorListeners() + parser.addErrorListener(error_listener) + tree = parser.oC_Cypher() + return 1 + except Exception as e: + return 0 + except Exception as e: + return -1 diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/similarity_evaluator.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/similarity_evaluator.py new file mode 100644 index 00000000..60f1f64d --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/eval/evaluator/similarity_evaluator.py @@ -0,0 +1,6 @@ +import jaro + + +class SimilarityEvaluator: + def evaluate(self, query_predict, query_gold): + return jaro.jaro_winkler_metric(query_predict, query_gold) diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/__init__.py @@ -0,0 +1 @@ + diff --git a/dbgpt_hub/llm_base/adapter.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/adapter.py similarity index 93% rename from dbgpt_hub/llm_base/adapter.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/adapter.py index eb9b455e..322ad44c 100644 --- a/dbgpt_hub/llm_base/adapter.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/adapter.py @@ -1,17 +1,15 @@ import os -import torch from typing import TYPE_CHECKING -from peft import PeftModel, TaskType, LoraConfig, get_peft_model +import torch +from peft import LoraConfig, PeftModel, TaskType, get_peft_model from peft.utils import CONFIG_NAME, WEIGHTS_NAME -from dbgpt_hub.llm_base.loggings import get_logger -from dbgpt_hub.llm_base.config_parser import load_trainable_params +from .config_parser import load_trainable_params +from .loggings import get_logger if TYPE_CHECKING: from transformers.modeling_utils import PreTrainedModel - from dbgpt_hub.configs.model_args import ModelArguments, FinetuningArguments - logger = get_logger(__name__) diff --git a/dbgpt_hub/llm_base/chat_model.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/chat_model.py similarity index 93% rename from dbgpt_hub/llm_base/chat_model.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/chat_model.py index 3ead4263..82b0e0ba 100644 --- a/dbgpt_hub/llm_base/chat_model.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/chat_model.py @@ -1,13 +1,13 @@ -import torch -import json -from typing import Any, Dict, Generator, List, Optional, Tuple from threading import Thread +from typing import Any, Dict, Generator, List, Optional, Tuple + +import torch from transformers import GenerationConfig, TextIteratorStreamer -from dbgpt_hub.llm_base.config_parser import get_infer_args -from dbgpt_hub.llm_base.load_tokenizer import dispatch_model, load_model_and_tokenizer -from dbgpt_hub.llm_base.model_trainer import get_logits_processor -from dbgpt_hub.data_process.data_utils import get_template_and_fix_tokenizer +from ..data_process.data_utils import get_template_and_fix_tokenizer +from .config_parser import get_infer_args +from .load_tokenizer import dispatch_model, load_model_and_tokenizer +from .model_trainer import get_logits_processor class ChatModel: diff --git a/dbgpt_hub/llm_base/config_parser.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/config_parser.py similarity index 97% rename from dbgpt_hub/llm_base/config_parser.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/config_parser.py index 337596f8..34ead7ad 100644 --- a/dbgpt_hub/llm_base/config_parser.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/config_parser.py @@ -1,22 +1,22 @@ import os import sys +from typing import Any, Dict, Optional, Tuple + +import datasets import torch import transformers -import datasets -from transformers.trainer import WEIGHTS_NAME -from transformers.modeling_utils import load_sharded_checkpoint -from transformers.trainer import WEIGHTS_NAME, WEIGHTS_INDEX_NAME from transformers import HfArgumentParser, Seq2SeqTrainingArguments +from transformers.modeling_utils import load_sharded_checkpoint +from transformers.trainer import WEIGHTS_INDEX_NAME, WEIGHTS_NAME from transformers.trainer_utils import get_last_checkpoint -from typing import Any, Dict, Optional, Tuple -from dbgpt_hub.llm_base.loggings import get_logger -from dbgpt_hub.configs.model_args import ( - ModelArguments, + +from ..configs.data_args import DataArguments +from ..configs.model_args import ( FinetuningArguments, GeneratingArguments, + ModelArguments, ) -from dbgpt_hub.configs.data_args import DataArguments - +from .loggings import get_logger logger = get_logger(__name__) diff --git a/dbgpt_hub/llm_base/load_tokenizer.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/load_tokenizer.py similarity index 95% rename from dbgpt_hub/llm_base/load_tokenizer.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/load_tokenizer.py index 9286b670..5bd16fc3 100644 --- a/dbgpt_hub/llm_base/load_tokenizer.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/load_tokenizer.py @@ -1,20 +1,10 @@ -import os -import torch import inspect import math -from typing import Optional, Tuple, Dict, TYPE_CHECKING, Literal, List +import os from types import MethodType -from trl import AutoModelForCausalLMWithValueHead -from dbgpt_hub.llm_base.loggings import reset_logging, get_logger -from dbgpt_hub.configs.model_args import FinetuningArguments -from dbgpt_hub.llm_base.adapter import init_adapter -from dbgpt_hub.configs.config import LAYERNORM_NAMES, VALUE_HEAD_FILE_NAME +from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple -from transformers import PreTrainedModel, PreTrainedTokenizer -from transformers.utils import check_min_version, cached_file -from transformers.utils.versions import require_version -from transformers.trainer import WEIGHTS_NAME, SAFE_WEIGHTS_NAME -from transformers.deepspeed import is_deepspeed_zero3_enabled +import torch from transformers import ( AutoConfig, AutoModelForCausalLM, @@ -22,12 +12,24 @@ BitsAndBytesConfig, PretrainedConfig, PreTrainedModel, + PreTrainedTokenizer, PreTrainedTokenizerBase, ) +from transformers.deepspeed import is_deepspeed_zero3_enabled +from transformers.trainer import SAFE_WEIGHTS_NAME, WEIGHTS_NAME +from transformers.utils import cached_file, check_min_version +from transformers.utils.versions import require_version +from trl import AutoModelForCausalLMWithValueHead + +from ..configs.config import LAYERNORM_NAMES, VALUE_HEAD_FILE_NAME +from ..configs.model_args import FinetuningArguments +from .adapter import init_adapter +from .loggings import get_logger, reset_logging if TYPE_CHECKING: from transformers import PreTrainedTokenizer - from dbgpt_hub.configs.model_args import ModelArguments + + from ..configs.model_args import ModelArguments logger = get_logger(__name__) @@ -267,14 +269,14 @@ def load_model_and_tokenizer( require_version( "bitsandbytes>=0.37.0", "To fix: pip install bitsandbytes>=0.37.0" ) - config_kwargs["load_in_8bit"] = True + # config_kwargs["load_in_8bit"] = True config_kwargs["quantization_config"] = BitsAndBytesConfig(load_in_8bit=True) elif model_args.quantization_bit == 4: require_version( "bitsandbytes>=0.39.0", "To fix: pip install bitsandbytes>=0.39.0" ) - config_kwargs["load_in_4bit"] = True + # config_kwargs["load_in_4bit"] = True config_kwargs["quantization_config"] = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=model_args.compute_dtype, @@ -379,7 +381,7 @@ def dispatch_model(model: "PreTrainedModel") -> "PreTrainedModel": if torch.cuda.device_count() > 1: from accelerate import dispatch_model - from accelerate.utils import infer_auto_device_map, get_balanced_memory + from accelerate.utils import get_balanced_memory, infer_auto_device_map if model._no_split_modules is None: raise ValueError( diff --git a/dbgpt_hub/llm_base/loggings.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/loggings.py similarity index 98% rename from dbgpt_hub/llm_base/loggings.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/loggings.py index ac0d1815..b33270fb 100644 --- a/dbgpt_hub/llm_base/loggings.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/loggings.py @@ -1,16 +1,18 @@ -import sys +import json import logging import os -import json +import sys import time -from typing import TYPE_CHECKING from datetime import timedelta +from typing import TYPE_CHECKING + from transformers import TrainerCallback from transformers.trainer_utils import has_length -from dbgpt_hub.configs.config import LOG_FILE_NAME + +from ..configs.config import LOG_FILE_NAME if TYPE_CHECKING: - from transformers import TrainingArguments, TrainerState, TrainerControl + from transformers import TrainerControl, TrainerState, TrainingArguments def reset_logging(): diff --git a/dbgpt_hub/llm_base/model_trainer.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/model_trainer.py similarity index 94% rename from dbgpt_hub/llm_base/model_trainer.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/model_trainer.py index 1bc08cf2..0a56f7f3 100644 --- a/dbgpt_hub/llm_base/model_trainer.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/llm_base/model_trainer.py @@ -1,43 +1,43 @@ -import os import json -import torch -import numpy as np -import torch.nn as nn +import math +import os +from dataclasses import dataclass +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union + import jieba import matplotlib.pyplot as plt -import math +import numpy as np +import torch +import torch.nn as nn +from nltk.translate.bleu_score import SmoothingFunction, sentence_bleu +from peft import PeftModel from rouge_chinese import Rouge -from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction -from dataclasses import dataclass -from dbgpt_hub.configs.config import IGNORE_INDEX -from dbgpt_hub.llm_base.loggings import get_logger -from dbgpt_hub.llm_base.config_parser import ( - get_train_args, - get_state_dict, - load_trainable_params, -) -from dbgpt_hub.llm_base.load_tokenizer import load_model_and_tokenizer -from dbgpt_hub.configs.config import VALUE_HEAD_FILE_NAME, FINETUNING_ARGS_NAME from transformers import Seq2SeqTrainer -from transformers.trainer import TRAINING_ARGS_NAME, WEIGHTS_NAME +from transformers.generation.logits_process import LogitsProcessor +from transformers.generation.utils import LogitsProcessorList from transformers.modeling_utils import ( PreTrainedModel, - unwrap_model, load_sharded_checkpoint, + unwrap_model, +) +from transformers.trainer import ( + TRAINER_STATE_NAME, + TRAINING_ARGS_NAME, + WEIGHTS_INDEX_NAME, + WEIGHTS_NAME, ) -from transformers.trainer import WEIGHTS_NAME, WEIGHTS_INDEX_NAME, TRAINER_STATE_NAME -from transformers.generation.logits_process import LogitsProcessor -from transformers.generation.utils import LogitsProcessorList - -from peft import PeftModel from trl import PreTrainedModelWrapper -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union, Sequence +from ..configs.config import FINETUNING_ARGS_NAME, IGNORE_INDEX, VALUE_HEAD_FILE_NAME +from .config_parser import get_state_dict, get_train_args, load_trainable_params +from .load_tokenizer import load_model_and_tokenizer +from .loggings import get_logger if TYPE_CHECKING: from transformers import PreTrainedTokenizer, Seq2SeqTrainingArguments, TrainerState from transformers.trainer import PredictionOutput - from dbgpt_hub.configs.model_args import FinetuningArguments + + from ..configs.model_args import FinetuningArguments logger = get_logger(__name__) diff --git a/dbgpt_hub/predict/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/predict/__init__.py similarity index 100% rename from dbgpt_hub/predict/__init__.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/predict/__init__.py diff --git a/dbgpt_hub/predict/predict.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/predict/predict.py similarity index 88% rename from dbgpt_hub/predict/predict.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/predict/predict.py index 9b494c3f..cdff152b 100644 --- a/dbgpt_hub/predict/predict.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/predict/predict.py @@ -1,15 +1,15 @@ -import os import json +import os import sys ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(ROOT_PATH) -from tqdm import tqdm -from typing import List, Dict, Optional, Any +from typing import Any, Dict, List, Optional -from dbgpt_hub.data_process.data_utils import extract_sql_prompt_dataset -from dbgpt_hub.llm_base.chat_model import ChatModel +from dbgpt_hub_gql.data_process.data_utils import extract_sql_prompt_dataset +from dbgpt_hub_gql.llm_base.chat_model import ChatModel +from tqdm import tqdm def prepare_dataset( diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/predict/predict_api.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/predict/predict_api.py new file mode 100644 index 00000000..78084738 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/predict/predict_api.py @@ -0,0 +1,32 @@ +import os +from typing import Any, Dict, Optional + +from dbgpt_hub_gql.predict import predict + + +def start_predict( + args: Optional[Dict[str, Any]] = None, cuda_visible_devices: Optional[str] = "0" +): + # Setting CUDA Device + os.environ["CUDA_VISIBLE_DEVICES"] = cuda_visible_devices + + # Default Arguments + if args is None: + args = { + "model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf", + "template": "llama2", + "finetuning_type": "lora", + "checkpoint_dir": "dbgpt_hub_gql/output/adapter/CodeLlama-13b-gql-lora", + "predict_file_path": "dbgpt_hub_gql/data/tugraph-db-example/dev.json", + "predict_out_dir": "dbgpt_hub_gql/output/", + "predicted_out_filename": "pred_gql.txt", + } + else: + args = args + + # Execute prediction + predict.predict(args) + + +if __name__ == "__main__": + start_predict() diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/export_merge.sh b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/export_merge.sh new file mode 100644 index 00000000..3a347105 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/export_merge.sh @@ -0,0 +1,19 @@ +# llama2 series +python dbgpt_hub_gql/train/export_model.py \ + --model_name_or_path codellama/CodeLlama-7b-Instruct-hf \ + --template llama2 \ + --finetuning_type lora \ + --checkpoint_dir dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora \ + --output_dir dbgpt_hub_gql/output/codellama-7b-gql-sft \ + --fp16 + + +## Baichuan2 +# python dbgpt_hub_gql/train/export_model.py \ +# --model_name_or_path Your_base_model_path_like_Baichuan2-13B-Chat \ +# --template Your_template_like_baichuan2_eval \ +# --finetuning_type lora \ +# --checkpoint_dir Your_ckpt_path_checkpoint-100 \ +# --output_dir Your_export_model_like_output_merge_model_baichuan2-13b-qlora_merge \ +# --fp16 +# # --bf16 \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/gen_train_eval_data.sh b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/gen_train_eval_data.sh new file mode 100644 index 00000000..fbe8e1cb --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/gen_train_eval_data.sh @@ -0,0 +1,2 @@ +# base spider dataset ,produce train and dev data +python dbgpt_hub_gql/data_process/sql_data_process.py \ No newline at end of file diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/predict_sft.sh b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/predict_sft.sh new file mode 100644 index 00000000..7b1b2db9 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/predict_sft.sh @@ -0,0 +1,47 @@ +## shijian llama2 test + +current_date=$(date +"%Y%m%d_%H%M") +pred_log="dbgpt_hub_gql/output/logs/pred_test_${current_date}.log" +start_time=$(date +%s) +echo " Pred Start time: $(date -d @$start_time +'%Y-%m-%d %H:%M:%S')" >>${pred_log} + +# CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub_gql/predict/predict.py \ +# --model_name_or_path codellama/CodeLlama-7b-Instruct-hf \ +# --template llama2 \ +# --finetuning_type lora \ +# --predicted_input_filename dbgpt_hub_gql/data/tugraph-analytics/dev.json \ +# --checkpoint_dir dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora \ +# --predicted_out_filename dbgpt_hub_gql/output/pred/tugraph_analytics_dev.txt >> ${pred_log} + +CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub_gql/predict/predict.py \ + --model_name_or_path codellama/CodeLlama-7b-Instruct-hf \ + --template llama2 \ + --finetuning_type lora \ + --predicted_input_filename dbgpt_hub_gql/data/tugraph-db-example/dev.json \ + --checkpoint_dir dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora \ + --predicted_out_filename dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt >> ${pred_log} + +echo "############pred end###############" >>${pred_log} +echo "pred End time: $(date)" >>${pred_log} +end_time=$(date +%s) +duration=$((end_time - start_time)) +hours=$((duration / 3600)) +min=$(( (duration % 3600) / 60)) +echo "Time elapsed: ${hour} hour $min min " >>${pred_log} + + +# # wangzai baichua2_eval test +# CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_gql/predict/predict.py \ +# --model_name_or_path /home/model/Baichuan2-13B-Chat \ +# --template baichuan2_eval \ +# --quantization_bit 4 \ +# --finetuning_type lora \ +# --checkpoint_dir dbgpt_hub_gql/output/adapter/baichuan2-13b-qlora + + +## wangzai codellama2_pred test a100 +# CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub_gql/predict/predict.py \ +# --model_name_or_path /home/model_files/codellama/CodeLlama-7b-Instruct-hf \ +# --template llama2 \ +# --finetuning_type lora \ +# --checkpoint_dir dbgpt_hub_gql/output/adapter/code_llama_7b-qlora \ No newline at end of file diff --git a/dbgpt_hub/scripts/train_rm.sh b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/train_rm.sh similarity index 84% rename from dbgpt_hub/scripts/train_rm.sh rename to src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/train_rm.sh index ae9096d6..3a7e055e 100644 --- a/dbgpt_hub/scripts/train_rm.sh +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/train_rm.sh @@ -1,13 +1,13 @@ wandb offline # Close wandb # a100 ,单卡 current_date=$(date +"%Y%m%d_%H%M") -train_log="dbgpt_hub/output/logs/train_sft_test_${current_date}.log" +train_log="dbgpt_hub_gql/output/logs/train_sft_test_${current_date}.log" start_time=$(date +%s) echo " Train Start time: $(date -d @$start_time +'%Y-%m-%d %H:%M:%S')" >>${train_log} # the default param set could be run in a server with one a100(40G) gpu, if your server not support the set,you can set smaller param such as lora_rank and use qlora with quant 4 eg... -deepspeed --num_gpus 4 dbgpt_hub/train/rm_train.py \ - --deepspeed dbgpt_hub/configs/ds_config.json \ +deepspeed --num_gpus 4 dbgpt_hub_gql/train/rm_train.py \ + --deepspeed dbgpt_hub_gql/configs/ds_config.json \ --stage rm \ --model_name_or_path /home/CPF/LLM/qwen-7b-chat \ --do_train \ @@ -19,7 +19,7 @@ deepspeed --num_gpus 4 dbgpt_hub/train/rm_train.py \ --template chatml \ --lora_rank 64 \ --lora_alpha 32 \ - --output_dir dbgpt_hub/output/adapter/qwen-7b-rm-test \ + --output_dir dbgpt_hub_gql/output/adapter/qwen-7b-rm-test \ --overwrite_cache \ --overwrite_output_dir \ --per_device_train_batch_size 1 \ diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/train_sft.sh b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/train_sft.sh new file mode 100644 index 00000000..7465c382 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/scripts/train_sft.sh @@ -0,0 +1,127 @@ +wandb offline # Close wandb +# a100 ,单卡 +current_date=$(date +"%Y%m%d_%H%M") +train_log="dbgpt_hub_gql/output/logs/train_sft_test_${current_date}.log" +start_time=$(date +%s) +echo " Train Start time: $(date -d @$start_time +'%Y-%m-%d %H:%M:%S')" >>${train_log} + +# default train , zero-shot, +num_shot=0 + +# one-shot train +# num_shot=1 + +# dataset="tugraph_analytics_train" +# dataset="tugraph_db_train" +dataset="tugraph_db_example_train" +model_name_or_path=${model_name_or_path-"codellama/CodeLlama-7b-Instruct-hf"} +output_dir="dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora" + +# the default param set could be run in a server with one V100(16G) gpu +CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_gql/train/sft_train.py \ + --model_name_or_path $model_name_or_path \ + --do_train \ + --dataset $dataset \ + --max_source_length 1024 \ + --max_target_length 512 \ + --finetuning_type lora \ + --lora_target q_proj,v_proj \ + --template llama2 \ + --lora_rank 64 \ + --lora_alpha 32 \ + --output_dir $output_dir \ + --overwrite_cache \ + --overwrite_output_dir \ + --per_device_train_batch_size 1 \ + --gradient_accumulation_steps 16 \ + --lr_scheduler_type cosine_with_restarts \ + --logging_steps 50 \ + --save_steps 2000 \ + --learning_rate 2e-4 \ + --num_train_epochs 8 \ + --plot_loss \ + --fp16 >> ${train_log} + +echo "############train end###############" >>${train_log} +echo "Train End time: $(date)" >>${train_log} +end_time=$(date +%s) +duration=$((end_time - start_time)) +hours=$((duration / 3600)) +min=$(( (duration % 3600) / 60)) +echo "Time elapsed: ${hour} hour $min min " >>${train_log} + +# the default param set could be run in a server with one a100(40G) gpu, if your server not support the set,you can set smaller param such as lora_rank and use qlora with quant 4 eg... +# CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_gql/train/sft_train.py \ +# --model_name_or_path $model_name_or_path \ +# --do_train \ +# --dataset $dataset \ +# --max_source_length 2048 \ +# --max_target_length 512 \ +# --finetuning_type lora \ +# --lora_target q_proj,v_proj \ +# --template llama2 \ +# --lora_rank 64 \ +# --lora_alpha 32 \ +# --output_dir $output_dir \ +# --overwrite_cache \ +# --overwrite_output_dir \ +# --per_device_train_batch_size 1 \ +# --gradient_accumulation_steps 16 \ +# --lr_scheduler_type cosine_with_restarts \ +# --logging_steps 50 \ +# --save_steps 2000 \ +# --learning_rate 2e-4 \ +# --num_train_epochs 8 \ +# --plot_loss \ +# --bf16 >> ${train_log} +# # --bf16#v100不支持bf16 + +# 多卡,deepseed启动,A100 +# deepspeed --num_gpus 2 dbgpt_hub_gql/train/sft_train.py \ +# --deepspeed dbgpt_hub_gql/configs/stage2.json \ +# --quantization_bit 4 \ +# --model_name_or_path /home/model_files/Llama-2-13b-chat-hf \ +# --do_train \ +# --dataset example_text2sql_train \ +# --max_source_length 1024 \ +# --max_target_length 512 \ +# --template llama2 \ +# --finetuning_type lora \ +# --lora_rank 64 \ +# --lora_alpha 32 \ +# --lora_target q_proj,v_proj \ +# --output_dir dbgpt_hub_gql/output/adapter/llama2-13b-qlora_1024_epoch1_debug1008_withDeepseed_mulitCard \ +# --overwrite_cache \ +# --overwrite_output_dir \ +# --per_device_train_batch_size 1 \ +# --gradient_accumulation_steps 16 \ +# --lr_scheduler_type cosine_with_restarts \ +# --logging_steps 25 \ +# --save_steps 20 \ +# --learning_rate 2e-4 \ +# --num_train_epochs 0.1 \ +# --plot_loss \ +# --bf16 2>&1 | tee ${train_log} + + +# 多卡,deepseed,全量微调 +# deepspeed --include localhost:4,5,6,7 dbgpt_hub_gql/train/sft_train.py \ +# --dataset example_text2sql_train \ +# --model_name_or_path CodeLlama-7b-Instruct-hf \ +# --do_train \ +# --finetuning_type full \ +# --max_source_length 2048 \ +# --max_target_length 512 \ +# --template llama2 \ +# --output_dir dbgpt_hub_gql/output/adapter/code-llama-7b-2048_epoch4_full \ +# --overwrite_cache \ +# --overwrite_output_dir \ +# --per_device_train_batch_size 4 \ +# --gradient_accumulation_steps 16 \ +# --lr_scheduler_type cosine_with_restarts \ +# --logging_steps 50 \ +# --learning_rate 2e-5 \ +# --num_train_epochs 4 \ +# --plot_loss \ +# --bf16 True\ +# --deepspeed dbgpt_hub_gql/configs/stage3.json 2>&1 | tee ${train_log} diff --git a/dbgpt_hub/train/__init__.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/__init__.py similarity index 100% rename from dbgpt_hub/train/__init__.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/train/__init__.py diff --git a/dbgpt_hub/train/export_model.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/export_model.py similarity index 77% rename from dbgpt_hub/train/export_model.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/train/export_model.py index 778fc683..707a8855 100644 --- a/dbgpt_hub/train/export_model.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/export_model.py @@ -3,7 +3,7 @@ ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(ROOT_PATH) -from dbgpt_hub.llm_base.model_trainer import export_model +from dbgpt_hub_gql.llm_base.model_trainer import export_model def main(): diff --git a/dbgpt_hub/train/rm_train.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/rm_train.py similarity index 94% rename from dbgpt_hub/train/rm_train.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/train/rm_train.py index 8a74b22c..313c85fe 100644 --- a/dbgpt_hub/train/rm_train.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/rm_train.py @@ -1,39 +1,41 @@ -import os import json -import torch -import numpy as np +import os from dataclasses import dataclass -from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union, Sequence, Any -from transformers import Trainer, DataCollatorWithPadding, Seq2SeqTrainingArguments -from transformers import ( - TrainingArguments, - TrainerState, - TrainerControl, - TrainerCallback, -) -from transformers.modeling_utils import custom_object_save, unwrap_model -from transformers.trainer_utils import has_length, PREFIX_CHECKPOINT_DIR +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union -from dbgpt_hub.llm_base.loggings import get_logger, LogCallback -from dbgpt_hub.llm_base.config_parser import get_train_args -from dbgpt_hub.llm_base.load_tokenizer import load_model_and_tokenizer -from dbgpt_hub.data_process.data_utils import ( +import numpy as np +import torch +from dbgpt_hub_gql.data_process.data_utils import ( get_dataset, preprocess_dataset, split_dataset, ) -from dbgpt_hub.llm_base.model_trainer import plot_loss +from dbgpt_hub_gql.llm_base.config_parser import get_train_args +from dbgpt_hub_gql.llm_base.load_tokenizer import load_model_and_tokenizer +from dbgpt_hub_gql.llm_base.loggings import LogCallback, get_logger +from dbgpt_hub_gql.llm_base.model_trainer import plot_loss +from transformers import ( + DataCollatorWithPadding, + Seq2SeqTrainingArguments, + Trainer, + TrainerCallback, + TrainerControl, + TrainerState, + TrainingArguments, +) +from transformers.modeling_utils import custom_object_save, unwrap_model +from transformers.trainer_utils import PREFIX_CHECKPOINT_DIR, has_length if TYPE_CHECKING: - from transformers.trainer import PredictionOutput - from transformers.modeling_utils import PreTrainedModel - from trl import AutoModelForCausalLMWithValueHead - from dbgpt_hub.configs.model_args import ( - ModelArguments, + from dbgpt_hub_gql.configs.data_args import DataArguments + from dbgpt_hub_gql.configs.model_args import ( FinetuningArguments, GeneratingArguments, + ModelArguments, ) - from dbgpt_hub.configs.data_args import DataArguments + from transformers.modeling_utils import PreTrainedModel + from transformers.trainer import PredictionOutput + from trl import AutoModelForCausalLMWithValueHead logger = get_logger(__name__) diff --git a/dbgpt_hub/train/sft_train.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/sft_train.py similarity index 91% rename from dbgpt_hub/train/sft_train.py rename to src/dbgpt-hub-gql/dbgpt_hub_gql/train/sft_train.py index 8dd2469a..c6924e07 100644 --- a/dbgpt_hub/train/sft_train.py +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/sft_train.py @@ -4,33 +4,32 @@ ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(ROOT_PATH) from typing import TYPE_CHECKING, Any, Dict, List, Optional -from transformers import DataCollatorForSeq2Seq, Seq2SeqTrainingArguments -from dbgpt_hub.llm_base.loggings import LogCallback, get_logger -from dbgpt_hub.llm_base.config_parser import get_train_args -from dbgpt_hub.llm_base.load_tokenizer import load_model_and_tokenizer -from dbgpt_hub.data_process.data_utils import ( +from dbgpt_hub_gql.configs.config import IGNORE_INDEX +from dbgpt_hub_gql.data_process.data_utils import ( get_dataset, preprocess_dataset, split_dataset, ) -from dbgpt_hub.configs.config import IGNORE_INDEX -from dbgpt_hub.llm_base.model_trainer import ( - Seq2SeqPeftTrainer, +from dbgpt_hub_gql.llm_base.config_parser import get_train_args +from dbgpt_hub_gql.llm_base.load_tokenizer import load_model_and_tokenizer +from dbgpt_hub_gql.llm_base.loggings import LogCallback, get_logger +from dbgpt_hub_gql.llm_base.model_trainer import ( ComputeMetrics, + Seq2SeqPeftTrainer, get_logits_processor, plot_loss, ) - +from transformers import DataCollatorForSeq2Seq, Seq2SeqTrainingArguments if TYPE_CHECKING: - from transformers import TrainerCallback - from dbgpt_hub.configs.model_args import ( - ModelArguments, + from dbgpt_hub_gql.configs import ( + DataArguments, FinetuningArguments, GeneratingArguments, + ModelArguments, ) - from dbgpt_hub.configs.data_args import DataArguments + from transformers import TrainerCallback logger = get_logger(__name__) diff --git a/src/dbgpt-hub-gql/dbgpt_hub_gql/train/sft_train_api.py b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/sft_train_api.py new file mode 100644 index 00000000..8e794665 --- /dev/null +++ b/src/dbgpt-hub-gql/dbgpt_hub_gql/train/sft_train_api.py @@ -0,0 +1,47 @@ +import os +from typing import Any, Dict, Optional + +from dbgpt_hub_gql.train import sft_train + + +def start_sft( + args: Optional[Dict[str, Any]] = None, cuda_visible_devices: Optional[str] = "0" +): + # Setting CUDA Device + os.environ["CUDA_VISIBLE_DEVICES"] = cuda_visible_devices + + # Default Arguments + if args is None: + args = { + "model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf", + "do_train": True, + "dataset": "tugraph_db_train", + "max_source_length": 2048, + "max_target_length": 512, + "finetuning_type": "lora", + "lora_target": "q_proj,v_proj", + "template": "llama2", + "lora_rank": 64, + "lora_alpha": 32, + "output_dir": "dbgpt_hub_gql/output/adapter/CodeLlama-13b-gql-lora", + "overwrite_cache": True, + "overwrite_output_dir": True, + "per_device_train_batch_size": 1, + "gradient_accumulation_steps": 16, + "lr_scheduler_type": "cosine_with_restarts", + "logging_steps": 50, + "save_steps": 2000, + "learning_rate": 2e-4, + "num_train_epochs": 8, + "plot_loss": True, + "bf16": True, + } + else: + args = args + + # Run SFT + sft_train.train(args) + + +if __name__ == "__main__": + start_sft() diff --git a/src/dbgpt-hub-gql/setup.py b/src/dbgpt-hub-gql/setup.py new file mode 100644 index 00000000..f1023b34 --- /dev/null +++ b/src/dbgpt-hub-gql/setup.py @@ -0,0 +1,61 @@ +from typing import List + +from setuptools import find_packages, setup + + +class SetupSpec: + def __init__(self) -> None: + self.extras: dict = {} + self.install_requires: List[str] = [] + + @property + def unique_extras(self) -> dict[str, list[str]]: + unique_extras = {} + for k, v in self.extras.items(): + unique_extras[k] = list(set(v)) + return unique_extras + + +setup_spec = SetupSpec() + + +def core_dependencies(): + setup_spec.extras["core"] = [ + "transformers>=4.41.2", + "datasets>=2.14.6", + "tiktoken>=0.7.0", + "torch>=2.2.1", + "peft>=0.4.0", + "trl>=0.5.0", + "prettytable", + "func-timeout", + "sqlparse", + "jsonlines", + "rouge-chinese>=1.0.3", + "jieba>=0.42.1", + "nltk>=3.8.1", + "matplotlib>=3.8.1", + "bitsandbytes>=0.39.0", + "accelerate", + ] + + +def init_install_requires(): + setup_spec.install_requires += setup_spec.extras["core"] + print(f"Install requires: \n{','.join(setup_spec.install_requires)}") + + +core_dependencies() +init_install_requires() + +excluded_packages = ["tests", "*.tests", "*.tests.*", "examples"] + +setup( + name="dbgpt-hub-gql", + version="0.3.1", + description="DB-GPT-Hub: Text-to-GQL parsing with LLMs", + packages=find_packages(exclude=excluded_packages), + install_requires=setup_spec.install_requires, + extras_require=setup_spec.unique_extras, + python_requires=">=3.10", +) diff --git a/src/dbgpt-hub-nlu/README.zh.md b/src/dbgpt-hub-nlu/README.zh.md new file mode 100644 index 00000000..069df1e7 --- /dev/null +++ b/src/dbgpt-hub-nlu/README.zh.md @@ -0,0 +1,80 @@ +# DB-GPT-NLU:开箱即用的文本理解大模型组件 + +适用于中文、英文在在零样本条件下进行文本理解任务,如信息抽取、文本分类等。 + +## 使用方法 + +### 环境准备 + +克隆项目并创建 conda 环境, +```bash +git clone https://github.com/eosphoros-ai/DB-GPT-Hub.git +cd DB-GPT-Hub +conda create -n dbgpt_hub python=3.10 +conda activate dbgpt_hub +``` + +从源码安装 DB-GPT-NLU, + +```bash +cd src/dbgpt-hub-nlu +pip install -e . +``` + +### 微调 + +```bash +# 假设后续使用 gte-large-zh 作为基础模型 +export base_mode="/data/models/gte-large-zh" + +python main.py \ +--dataset financial_report \ +--dataset_dir ./datasets \ +--base_model_name_or_path $base_model \ +--per_device_train_batch_size 4096 \ +--output_dir ./output \ +--num_train_epochs 1000 \ +--gradient_accumulation_steps 16 \ +--learning_rate 0.001 \ +--logging_steps 20 \ +--eval_strategy "steps" \ +--eval_steps 20 \ +--save_steps 100 \ +--do_train \ +--do_eval +``` + +### 评估 + +```bash +python main.py \ +--dataset financial_report \ +--dataset_dir ./datasets \ +--base_model_name_or_path $base_model \ +--per_device_train_batch_size 4096 \ +--model_name_or_path ./output \ +--do_eval +``` + +### 推理 + +```bash +python main.py \ +--dataset financial_report \ +--dataset_dir ./datasets \ +--base_model_name_or_path $base_model \ +--per_device_train_batch_size 4096 \ +--model_name_or_path ./output \ +--do_infer \ +--input_text "请问安泰集团在2021年的营业成本是多少元" +``` + +## 参与贡献 + +提交 PR 或 Issue。 + +提交代码之前请执行下面命令格式化代码, + +```bash +make fmt +``` \ No newline at end of file diff --git a/src/dbgpt-hub-nlu/datasets/financial_report/data/financial_report.jsonl b/src/dbgpt-hub-nlu/datasets/financial_report/data/financial_report.jsonl new file mode 100644 index 00000000..14a49abc --- /dev/null +++ b/src/dbgpt-hub-nlu/datasets/financial_report/data/financial_report.jsonl @@ -0,0 +1,5000 @@ +{"question": "能否根据2020年金宇生物技术股份有限公司的年报,给我简要介绍一下报告期内公司的社会责任工作情况?", "intent": "报告解读分析"} +{"question": "请根据江化微2019年的年报,简要介绍报告期内公司主要销售客户的客户集中度情况,并结合同行业情况进行分析。", "intent": "报告解读分析"} +{"question": "2019年四方科技电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "研发费用对公司的技术创新和竞争优势有何影响?", "intent": "专业名称解释"} +{"question": "康希诺生物股份公司在2020年的资产负债比率具体是多少,需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "苏州科达在2020年的博士及以上人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "河北金牛化工股份有限公司2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "南京康尼机电股份有限公司2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年商业城现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "平潭发展在2021年的投资收益增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请问,光云科技2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "安记食品股份有限公司在2019年的营业利润率是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "金枫酒业在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年爱丽家居企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "文投控股在2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年旭升集团的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "震安科技2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年南亚新材料科技股份有限公司研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "新经典文化股份有限公司2020年的速动比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "合并财务报表的编制方法有哪些?", "intent": "专业名称解释"} +{"question": "2019年永新股份企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年西安饮食股份有限公司电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "硕世生物在2020年的现金比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "上海金桥信息股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "华锋股份2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山东玉马遮阳科技股份有限公司净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年综艺股份资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山西汾酒2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "博云新材在2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "维康药业2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "江西铜业股份有限公司2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年德美化工的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "请问,在苏州迈为科技股份有限公司2019年的年报中,现金流的情况是否发生了重大变化?若发生,导致重大变化的原因是什么?", "intent": "报告解读分析"} +{"question": "根据2020年的年报数据,力合微的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "奥精医疗科技股份有限公司2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,五矿资本的衍生金融资产和其他非流动金融资产各是多少元?", "intent": "年报基础信息问答"} +{"question": "招商局积余产业运营服务股份有限公司2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年通宇通讯的无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "重庆再升科技股份有限公司2020年现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年同花顺的年度的经营情况讨论与分析情况,请简要分析公司的创新情况。", "intent": "报告解读分析"} +{"question": "南方精工2019年的研发费用和财务费用具体是多少?", "intent": "年报基础信息问答"} +{"question": "请提供东华工程科技股份有限公司2019年的法定代表人。", "intent": "年报基础信息问答"} +{"question": "北京旋极信息技术股份有限公司在2020年的销售费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "江西铜业在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请问,重庆农村商业银行股份有限公司2019年年报数据中,利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "中铝国际2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市机场股份有限公司在2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华信新材在2019年的研发人员占职工人数比例是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年海信家电的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年德赛西威营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,西藏奇正藏药股份有限公司的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供爱旭股份2020年的博士及以上人数。", "intent": "年报基础信息问答"} +{"question": "天津普林电路股份有限公司2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年亚盛集团的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是存货周转率?", "intent": "专业名称解释"} +{"question": "宏川智慧在2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "请简要分析浙江亿田智能厨电股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "2021年金财互联收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "新开普电子股份有限公司2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "精准信息2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,北京慧辰资道资讯股份有限公司的现金比率为多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "中国太保2019年的资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市京基智农时代股份有限公司2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问安泰集团在2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "杭州联德精密机械股份有限公司2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析深圳市兆驰股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "京泉华在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年金山办公管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳市燕麦科技股份有限公司营业利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,东鹏饮料2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "山东高速路桥集团股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "杭州初灵信息技术股份有限公司2021年的固定资产增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "联瑞新材在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年四川英杰电气股份有限公司硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "山西通宝能源股份有限公司2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年北京超图软件股份有限公司公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "博威合金在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "新余钢铁股份有限公司2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市金证科技股份有限公司在2020年的利润总额达到了多少元?", "intent": "年报基础信息问答"} +{"question": "2020年新劲刚年报中利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "爱施德2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "一品红在2020年的速动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "奥锐特2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年红宝丽集团股份有限公司研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年联化科技股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江奥康鞋业股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年洛阳栾川钼业集团股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "珈伟新能在2021年的应收款项融资总额是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏美思德化学股份有限公司2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年世运电路的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北京赛微电子股份有限公司博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年,渤海化学的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "芯源微在2020年的净利润率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "2019年上海市北高新股份有限公司的技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "珀莱雅化妆品股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "昊志机电在2021年归属于母公司所有者的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析新兴铸管股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "浙江圣达生物药业股份有限公司2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年财通证券股份有限公司利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "大有能源在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "海航创新股份有限公司在2021年的总资产增长率为多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年之江生物营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "恒光股份2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市麦捷微电子科技股份有限公司2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "迦南科技2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "力芯微在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "重要会计政策和会计估计的变更是什么?", "intent": "专业名称解释"} +{"question": "根据2021年的年报,深圳市海王生物工程股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年东岳硅材的企业名称。", "intent": "年报基础信息问答"} +{"question": "长缆科技在2020年的博士及以上学历人数是多少?", "intent": "年报基础信息问答"} +{"question": "新疆机械研究院股份有限公司2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年美凯龙办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年北京雪迪龙科技股份有限公司的财务费用率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "在2021年,润建股份有限公司的货币资金具体是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是营运资本?", "intent": "专业名称解释"} +{"question": "请问2021年绿岛风的无形资产值是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年濮阳惠成的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "欧普康视2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要介绍中国天楹2020年董事、监事、高级管理人员报酬情况。", "intent": "报告解读分析"} +{"question": "珠海光库科技股份有限公司在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "证通电子2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年华昌达智能装备集团股份有限公司营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "我想知道2019年探路者的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "神州数码集团股份有限公司在2019年的注册地址是何处?", "intent": "年报基础信息问答"} +{"question": "中南红文化集团股份有限公司在2021年的固定资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "财务杠杆和经营杠杆有什么区别?", "intent": "专业名称解释"} +{"question": "2020年深圳市同为数码科技股份有限公司的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年桂林福达股份有限公司职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "湖南黄金股份有限公司2019年证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年依米康科技集团股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "广东奥飞数据科技股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "请提供2019年春光科技的电子信箱。", "intent": "年报基础信息问答"} +{"question": "根据交控科技2019年的年报数据,其营业成本率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "合营安排的分类及共同经营的会计处理方法是什么?", "intent": "专业名称解释"} +{"question": "2021年盛新锂能集团股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "凯迪生态环境科技股份有限公司2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年品茗科技的利润总额和净利润各是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年恒立实业的资产负债比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "桂林莱茵生物科技股份有限公司2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年青岛伟隆阀门股份有限公司年报中管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海昌新材2021年每股净资产价值是多少元?", "intent": "年报基础信息问答"} +{"question": "资本公积金和盈余公积金对公司的股东权益和财务灵活性有何影响?", "intent": "专业名称解释"} +{"question": "朗姿股份2020年年报中速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年河北衡水老白干酒业股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "德威新材在2020年的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "三棵树在2019年的研发人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "宁波方正2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "紫光国微在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年吉林奥来德光电材料股份有限公司的企业研发经费与利润比值是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "福建福日电子股份有限公司在2019年的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年神雾节能股份有限公司的营业收入增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "华自科技股份有限公司2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年吉林奥来德光电材料股份有限公司的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "结合2019年山东金岭矿业股份有限公司的年报信息,请简要分析该公司现金流的情况。", "intent": "报告解读分析"} +{"question": "我想知道中国广核在2019年的管理费用率是多少?结果保留两位小数。", "intent": "财务指标计算"} +{"question": "哈尔滨博实自动化股份有限公司2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "内蒙古包钢钢联股份有限公司在2021年的投资收益增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,惠州硕贝德无线科技股份有限公司在2019年的营业成本率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年坚朗五金货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年雪龙集团的年报,请简要介绍报告期内公司的社会责任工作情况。", "intent": "报告解读分析"} +{"question": "请问在2021年,中利集团的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,有研粉材的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年安科瑞电气股份有限公司投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年苏州兴业材料科技股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年我爱我家控股集团股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海亮股份2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年博爱新开源医疗科技集团股份有限公司投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "杭州西力智能科技股份有限公司2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "首华燃气科技(上海)股份有限公司在2020年的营业收入和营业外收入各是多少元?", "intent": "年报基础信息问答"} +{"question": "华西证券股份有限公司在2021年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,百诚医药的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析中科创达软件股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "2020年杭州立昂微电子股份有限公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "长阳科技2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2020年诺泰生物的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问中文在线在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年天银机电外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年智慧农业研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "百洋产业投资集团股份有限公司2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "水晶光电2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "公允价值变动收益对公司财务状况的影响如何衡量?", "intent": "专业名称解释"} +{"question": "如何解释财务报表中的“递延所得税资产”和“递延所得税负债”?", "intent": "专业名称解释"} +{"question": "北京四方继保自动化股份有限公司在2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "福建龙溪轴承(集团)股份有限公司2021年的投资收益增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,根据中兴通讯2019年的年报,在董事长报告书的内容中,是否提及重大创新?", "intent": "报告解读分析"} +{"question": "请简要分析青海华鼎实业股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "海航投资2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2020年滨江集团的净利润率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "乐鑫信息科技(上海)股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中国船舶重工股份有限公司衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请分析重庆港股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "2019年烟台龙源电力技术股份有限公司的企业研发经费占费用的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "杭州园林设计院股份有限公司在2020年的销售费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年,亚厦股份财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "正源股份2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "浙江众成2020年投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "公允价值变动收益如何反映公司资产价值的变化和风险暴露?", "intent": "专业名称解释"} +{"question": "大连重工在2020年的净利润率有多高? 保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年广州维力医疗器械股份有限公司的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报数据,昌红科技的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江建投在2021年的现金及现金等价物增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析武汉兴图新科电子股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "2019年的年报数据显示,万科企业股份有限公司的投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析安徽省通源环境节能股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "2021年山西兰花科技创业股份有限公司货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "臻镭科技2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请问凯利泰在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年江苏立华牧业股份有限公司博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年丽臣实业的年报,请简要介绍报告期内公司每股净资产的情况。", "intent": "年报基础信息问答"} +{"question": "杭州高新在2020年的净利润率约为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "清研环境2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年交投生态的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "请问,咸亨国际科技股份有限公司在2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "营业外收支净额对公司的综合收益和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "请对比2020年和2021年,永清环保股份有限公司的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "2021年重庆长江造型材料(集团)股份有限公司年报数据中,负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中铁高新工业股份有限公司注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "新天绿色能源股份有限公司2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "北京中长石基信息技术股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "爱威科技股份有限公司2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中国石化上海石油化工股份有限公司在2019年的管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年盛和资源控股股份有限公司净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,根据2019年的财报,金博股份的营业成本率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海沿浦在2020年的营业外收入金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广州集泰化工股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年海南葫芦娃药业集团股份有限公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "光环新网2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "深圳天源迪科信息技术股份有限公司2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "飞天诚信在2020年的速动比率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "柏楚电子2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "陕西莱特光电材料股份有限公司在2021年的销售费用和管理费用分别为多少元?", "intent": "年报基础信息问答"} +{"question": "宝馨科技2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "珠海市乐通化工股份有限公司在2020年的销售费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,2021年张小泉股份有限公司的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "长城动漫2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年汉马科技的流动比率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "国联股份在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年圣湘生物科技股份有限公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "漫步者2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年江苏卓易信息科技股份有限公司利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年科创信息的研发费用金额。", "intent": "年报基础信息问答"} +{"question": "上海申通地铁股份有限公司2020年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "三丰智能2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "兆易创新科技集团股份有限公司2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "捷捷微电2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2019年,江西金达莱环保股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2019年的年报数据,金科环境股份有限公司的2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳光峰科技股份有限公司在2021年的应收款项融资金额是多少元?", "intent": "年报基础信息问答"} +{"question": "捷佳伟创在2020年的非流动负债比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年,华特达因的营业成本率是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "白云机场在2020年的管理费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年河北衡水老白干酒业股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "中国银河证券股份有限公司2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据宁波长鸿高分子科技股份有限公司2020年的年报,营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年焦作万方铝业股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "正和生态2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍卧龙电气驱动集团股份有限公司2020年公司控股股东及实际控制人的情况。", "intent": "报告解读分析"} +{"question": "结合2021年协创数据技术股份有限公司的年报信息,请简要分析该公司主要销售客户的情况。", "intent": "报告解读分析"} +{"question": "2020年杭州汽轮动力集团股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年中国长城科技集团股份有限公司的投资收益增长率是多少?记得要保留两位小数。", "intent": "财务指标计算"} +{"question": "何氏眼科2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年长江医药控股股份有限公司应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海艾录包装股份有限公司的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年复旦复华流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年曲美家居集团股份有限公司的衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年特变电工利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年西部矿业的年报,请简要介绍报告期内公司主要销售客户的客户集中度如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "2021年欣龙控股(集团)股份有限公司的流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "维尔利环保科技集团股份有限公司2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年宜宾天原集团股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,甘肃国芳工贸(集团)股份有限公司的流动比率是多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "2020年淮河能源(集团)股份有限公司管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年翱捷科技股份有限公司固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "应收账款的逾期和坏账如何影响公司的财务状况?", "intent": "专业名称解释"} +{"question": "中远海特2020年的对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "塞力医疗在2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "预付款项的管理对公司的资金利用效率和供应商关系有何影响?", "intent": "专业名称解释"} +{"question": "在2019年,航发科技的博士及以上学历人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "倍杰特集团股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "华海药业2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "能否告诉我2021年因赛集团的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "上海振华重工(集团)股份有限公司2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年北京九强生物技术股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天洋新材2020年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "绿田机械2021年的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "固定资产的定义是什么?", "intent": "专业名称解释"} +{"question": "2021年塞力斯医疗科技集团股份有限公司的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海天永智能装备股份有限公司总负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年年报中,安硕信息的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "对比2020年,2021年中航电子的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "2019年成都路桥硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "从2021年的年报数据可知,安徽应流机电股份有限公司的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年游族网络总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析江苏常熟汽饰集团股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "中粮科工股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "华西股份2021年的投资收益增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年光正眼科医院集团股份有限公司归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年金溢科技固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是流动负债?", "intent": "专业名称解释"} +{"question": "四川汇源光通信股份有限公司2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年盛达资源的投资收益占营业收入的比率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "天创时尚股份有限公司2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "成都硅宝科技股份有限公司2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年中国平安保险(集团)股份有限公司利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年回盛生物净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年北部湾港企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中国石油2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "安徽合力2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "华翔股份2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供天宜上佳公司2021年的流动负债增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "一品红在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "四会富仕2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,中泰证券的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江东方2019年的财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,宁夏银星能源股份有限公司固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中国联通2019年证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年贵州燃气集团股份有限公司速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问在2020年,长春一汽富维汽车零部件股份有限公司的投资收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供南京医药2019年的注册地址。", "intent": "年报基础信息问答"} +{"question": "建投能源2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "兴化股份2020年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中远海运发展股份有限公司2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年内蒙古福瑞医疗科技股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,康欣新材料股份有限公司的现金及现金等价物增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "东北证券2019年利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年博硕科技营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中华企业股份有限公司在2021年的流动负债增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "西陇科学2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年正丹股份销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年横店集团得邦照明股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年中贝通信集团股份有限公司对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "北京淳中科技股份有限公司在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,保利发展在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "东兴证券2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏正丹化学工业股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "光大嘉宝2021年的流动负债增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是成本费用法?它在会计中的应用是什么?", "intent": "专业名称解释"} +{"question": "金堆城钼业股份有限公司在2019年中,研发人员占职工人数的比例是多少,结果请保留两位小数.", "intent": "财务指标计算"} +{"question": "2021年苏州中来光伏新材股份有限公司固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "佩蒂股份2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年贵阳银行的总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年东山精密营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "奥普家居股份有限公司2021年收回投资所收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是财务风险?", "intent": "专业名称解释"} +{"question": "请简要分析广东电声市场营销股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "黑猫股份2021年归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年大东海的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年金山办公固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请计算2021年京运通的货币资金增长率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年沈阳芯源微电子设备股份有限公司的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,海正药业在2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2021年,陕西金叶科教集团股份有限公司的无形资产增长率是多少,请保留小数点后两位精确度?", "intent": "财务指标计算"} +{"question": "什么是资产收益率?", "intent": "专业名称解释"} +{"question": "深圳市实益达科技股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "长期借款和短期借款的利息支付如何影响公司的财务状况和债务风险?", "intent": "专业名称解释"} +{"question": "请问,根据2019年的年报,株洲宏达电子股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "长江健康在2021年的总资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "新晨科技股份有限公司2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "春秋航空2021年年报数据中,衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "华林证券在2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "根据武汉中元华电科技股份有限公司2020年年报,请简要介绍报告期内公司博士及以上人数的情况。", "intent": "年报基础信息问答"} +{"question": "请简要分析台海玛努尔核电设备股份有限公司2021年的审计报告中的关键审计事项。", "intent": "报告解读分析"} +{"question": "上海现代制药股份有限公司2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请计算达意隆2020年的研发费用增长率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "在2019年,弘宇股份的研发人员占总职工人数的比例是多少(保留到小数点后两位)?", "intent": "财务指标计算"} +{"question": "上海石化2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年南京全信传输科技股份有限公司销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "贵州茅台酒股份有限公司2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,上海开开实业股份有限公司的法定代表人与2019年相比相同吗?", "intent": "统计对比分析"} +{"question": "外币业务和外币报表折算是什么意思?", "intent": "专业名称解释"} +{"question": "2019年德迈仕企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析深圳市超频三科技股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "2021年国网英大流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年湘潭电化科技股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年新华文轩出版传媒股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问安徽楚江科技新材料股份有限公司在2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年贵人鸟的年报,请简要介绍报告期内公司的衍生金融资产和其他非流动金融资产。", "intent": "年报基础信息问答"} +{"question": "2020年陕西航天动力高科技股份有限公司的财务费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据恒逸石化股份有限公司2020年年报,该报告期内公司的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析天津七一二通信广播股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "诺力智能装备股份有限公司在2021年的营业收入增长率是多少,需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年航锦科技企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年蒙草生态环境(集团)股份有限公司负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报数据,杭可科技的固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年的年报中,中国中铁股份有限公司的衍生金融资产和其他非流动金融资产的金额分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年青岛鼎信通讯股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问广东世荣兆业股份有限公司在2021年的货币资金增长率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "阜新德尔汽车部件股份有限公司2021年的应收款项融资金额是多少元?", "intent": "年报基础信息问答"} +{"question": "佳讯飞鸿2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京思特奇信息技术股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年莲花健康研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2020年深圳香江控股股份有限公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据海天水务集团股份公司2020年的年报,该报告期内公司的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年大连德迈仕精密科技股份有限公司的营业外支出和营业外收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "南岭民爆2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "芜湖富春染织股份有限公司2020年的净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,金牌厨柜家居科技股份有限公司的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "2021年蓝晓科技无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年瑞丰光电企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,雪浪环境2019年研发人员占职工人数的比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年杭州微光电子股份有限公司研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "哈空调在2019年的营业成本率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年宁夏青龙管业集团股份有限公司货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江中国小商品城集团股份有限公司2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是存货周转天数?", "intent": "专业名称解释"} +{"question": "2019年成都先导药物开发股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "富春环保2021年的投资收益增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "山东胜利股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "博信股份在2021年末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "数字认证2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析爱丽家居科技股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "2021年益佰制药资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "三六五网在2019年度的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "火星人厨具股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "华灿光电在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析飞亚达精密科技股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "2019年卫宁健康企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年怡球金属资源再生(中国)股份有限公司净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供三星新材2019年的财务费用率,保留两位小数。", "intent": "财务指标计算"} +{"question": "在2020年,日科化学的流动比率是多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "结合2021年武汉天源环保股份有限公司的年报信息,请简要分析该公司营业收入变动情况及原因。", "intent": "报告解读分析"} +{"question": "银信科技2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年华光环能销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州银行股份有限公司2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年河南四方达超硬材料股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "杭州炬华科技股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "北方华锦化学工业股份有限公司在2019年的研发经费与利润的比值是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年顾家家居的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年杭州热电集团股份有限公司的毛利率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年新通联公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "渤海汽车2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "日发精机2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年柘中股份综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "新东方新材料股份有限公司在2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "其他应收款的分类和计提规则如何影响公司的资金回收和风险控制?", "intent": "专业名称解释"} +{"question": "负债合计与资本结构之间的关系如何影响公司的偿债能力和财务稳定性?", "intent": "专业名称解释"} +{"question": "蒙草生态环境(集团)股份有限公司在2021年的现金及现金等价物增长率有多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "康美药业股份有限公司在2021年的营业收入增长率为多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "龙岩高岭土股份有限公司在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "天顺股份2019年的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "成都圣诺生物科技股份有限公司在2021年的净利润增长率是多少,结果需要保留到两位小数?", "intent": "财务指标计算"} +{"question": "东材科技2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广州白云山医药集团股份有限公司企业研发经费占费用比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,北京京西文化旅游股份有限公司在2021年的无形资产金额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,中集车辆(集团)股份有限公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年云南能投财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京千方科技股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2021年公元股份营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "中国稀土在2021年期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "中国中材国际工程股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "盛德鑫泰新材料股份有限公司2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年泰格医药企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "唐山港集团股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "维尔利2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,海欣食品货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "德龙汇能2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年东方电热的货币资金数量是多少?", "intent": "年报基础信息问答"} +{"question": "天津创业环保集团股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请计算江淮汽车2019年投资收益占营业收入比率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "福然德股份有限公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是固定资产?", "intent": "专业名称解释"} +{"question": "梅花生物在2019年的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年杰瑞股份研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广东领益智造股份有限公司2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "西陇科学2021年归属母公司所有者的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "节能风电2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年广州尚品宅配家居股份有限公司应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年安徽海螺水泥股份有限公司投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年长沙岱勒新材料科技股份有限公司营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "华鑫股份2020年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "实朴检测2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "东北制药在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年安徽省交通建设股份有限公司的总负债增长率为多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "键凯科技在2021年的营业利润增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "晶雪节能2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "天山生物2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "研发费用对公司的创新能力和技术优势有何影响?", "intent": "专业名称解释"} +{"question": "在2019年,乐山电力的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年再升科技综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,远大控股2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "南极电商股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "新文化在2021年收回投资所得到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "请计算北大医药股份有限公司2021年的无形资产增长率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "索菲亚2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,华安证券股份有限公司利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "宏发科技股份有限公司2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "汉马科技集团股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年年报数据,中山公用的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "广西柳工机械股份有限公司2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "大理药业股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "山东阳谷华泰化工股份有限公司在2019-2021年间,法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "锐奇股份2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年西域旅游应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "莱尔科技在2020年的销售费用和管理费用各为多少元?", "intent": "年报基础信息问答"} +{"question": "雄塑科技在2021年的无形资产具体是多少元?", "intent": "年报基础信息问答"} +{"question": "金富科技股份有限公司2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "晶盛机电2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年福建福能股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京佳讯飞鸿电气股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "如何确定现金及现金等价物?", "intent": "专业名称解释"} +{"question": "合同资产是指什么?", "intent": "专业名称解释"} +{"question": "2020年广东惠云钛业股份有限公司营业利润率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "浙江银轮机械股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "东方电子股份有限公司2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "融捷健康2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "南通江山农药化工股份有限公司在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "祥龙电业在2020年的财务费用增长率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年中炬高新技术实业(集团)股份有限公司企业研发经费占费用比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "所得税费用的计算方法是什么?", "intent": "专业名称解释"} +{"question": "龙洲集团股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年广州海格通信集团股份有限公司的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年安徽安凯汽车股份有限公司的投资收益占营业收入的比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山东惠发食品股份有限公司2019年年报中电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "新宁物流2021年收回投资所得到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "投资性房地产是什么意思?", "intent": "专业名称解释"} +{"question": "请问在2019年齐鲁银行股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年奥海科技公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "中粮糖业控股股份有限公司在2020年的管理费用增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年甘化科工职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年国网信通的所得税费用金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年华塑股份硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "丰华股份2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年烟台园城黄金股份有限公司营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年上海大智慧股份有限公司非流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,江苏龙蟠科技股份有限公司2020年年报中,公司的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "众信旅游2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,爱慕股份的营业税金及附加具体为多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海华谊集团股份有限公司利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "国泰君安证券股份有限公司在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "盛弘股份2020年的销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "文一三佳科技股份有限公司2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2019年,北京青云科技股份有限公司的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "黄石东贝电器股份有限公司在2019年的研发人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问朗源股份有限公司在2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "冠盛股份2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的数据,崇达技术股份有限公司的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "能否简要介绍横店东磁2020年主要供应商的情况如何", "intent": "报告解读分析"} +{"question": "湖南华民控股集团股份有限公司2021年法定代表人对比2020年是否相同?", "intent": "统计对比分析"} +{"question": "请提供常柴股份有限公司在2019年的公司网址。", "intent": "年报基础信息问答"} +{"question": "2020年申能股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供聚龙股份有限公司2019年的硕士人数。", "intent": "年报基础信息问答"} +{"question": "在2021年,德创环保归属母公司所有者的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年信邦制药管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "富春股份在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年飞亚达研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年世名科技的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "左江科技2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是资本支出?", "intent": "专业名称解释"} +{"question": "国美通讯设备股份有限公司在2021年的固定资产增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "众应互联科技股份有限公司2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "倍加洁2020年的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "平安银行在2019至2021年间的法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "2020年深圳华强实业股份有限公司利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报数据,延华智能的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海正帆科技股份有限公司2019年的企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "美利云公司在2020年的非流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "应收账款的坏账和逾期对公司的现金流和收款周期有何影响?", "intent": "专业名称解释"} +{"question": "苏州纽威阀门股份有限公司在2020年的营业税金及附加费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年拉芳家化营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "富煌钢构2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,锋尚文化集团股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽铜峰电子股份有限公司在2020年的管理费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "华邦生命健康股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "昊海生科在2019年的财务费用率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "山东金岭矿业股份有限公司2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年大晟文化的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "优刻得2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "中国西电2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "国旅文化2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年凯马股份技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "贵州川恒化工股份有限公司在2020年的营业成本和营业利润具体是多少?", "intent": "年报基础信息问答"} +{"question": "宁波双林汽车部件股份有限公司2021年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年南宁化工股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问宁波家联科技股份有限公司在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "鼎汉技术在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "什么是油气资产?", "intent": "专业名称解释"} +{"question": "潍柴重机2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2020年上海机电的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年海峡创新年报数据中,现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "电科网安2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "上海丽人丽妆化妆品股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,苏州工业园区凌志软件股份有限公司在2019年的企业研发经费与营业收入的比值是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "请提供海泰新光2020年的财务费用增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年迪威尔财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "天津长荣科技集团股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年爱普香料集团股份有限公司的利润总额和净利润分别为多少元?", "intent": "年报基础信息问答"} +{"question": "湖南松井新材料股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年辉煌科技的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年海翔药业企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "和远气体2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "天箭科技2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "根据广州发展2021年的年报,利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江省建设投资集团股份有限公司应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年湖北能源的投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年深南股份速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是筹资活动产生的现金流量?", "intent": "专业名称解释"} +{"question": "2019年确成硅化学股份有限公司营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "大唐电信2021年的净利润增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年亿利达每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2019年,景旺电子的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的数据,襄阳长源东谷实业股份有限公司的速动比率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年北京诺禾致源科技股份有限公司的营业利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华设设计集团股份有限公司在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "在建工程是指什么?", "intent": "专业名称解释"} +{"question": "持有待售资产是什么意思?", "intent": "专业名称解释"} +{"question": "请问,2019年光威复材的三费比重是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年浙江仙琚制药股份有限公司的净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析华润三九医药股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "上海外服控股集团股份有限公司2020年投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "联创电子2020年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请查询,2021年东杰智能的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年贵人鸟每股的经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "普冉股份2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "开立医疗2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是营业外支出?", "intent": "专业名称解释"} +{"question": "2021年鹏都农牧股份有限公司无形资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据广大特材2019年年报,请简要介绍报告期内公司的企业研发经费占费用比例的情况,保留2位小数。", "intent": "财务指标计算"} +{"question": "华业香料2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "上海豫园旅游商城(集团)股份有限公司2019年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "宸展光电(厦门)股份有限公司2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年株洲天桥起重机股份有限公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "湖南金博碳素股份有限公司2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "芯能科技在2021年的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请提供科兴生物制药股份有限公司2021年的营业利润金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年福建坤彩材料科技股份有限公司销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天津赛象科技股份有限公司在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年优利德科技(中国)股份有限公司应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年湖北回天新材料股份有限公司的年报,该报告期内公司的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "奥园美谷在2021年的投资收益增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "中光防雷2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析石家庄科林电气股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "长期借款和短期借款的利息支付如何影响公司的财务状况和债务风险?", "intent": "专业名称解释"} +{"question": "2019年诺邦股份的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "冠捷电子科技股份有限公司2019年的研发经费与营业收入的比值是多少?请以保留2位小数的形式给出。", "intent": "财务指标计算"} +{"question": "深圳市财富趋势科技股份有限公司在2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "朗科智能2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "湖南湘邮科技股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年嘉兴斯达半导体股份有限公司办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "大连晨鑫网络科技股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "西藏矿业发展股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析灵康药业集团股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "请问,2019年雅化集团公司的网址是什么?", "intent": "年报基础信息问答"} +{"question": "武汉菱电汽车电控系统股份有限公司2020年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年东尼电子的证券代码。", "intent": "年报基础信息问答"} +{"question": "日科化学在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "太平洋证券股份有限公司2021年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "畅联股份2020年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华旺科技2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "福建万辰生物科技股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年西安饮食股份有限公司的年报,毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深华发2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "奥特迅在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年民和股份的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年佳华科技的营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年博深股份的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "西部超导材料科技股份有限公司在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "请根据2021年百川畅银的年报,简要分析该公司报告期内主要销售客户的集中度以及与同行业的情况对比。", "intent": "报告解读分析"} +{"question": "2020年新疆塔里木农业综合开发股份有限公司营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "上海电气集团股份有限公司在2019年的企业研发经费占费用比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是流动资产?", "intent": "专业名称解释"} +{"question": "请提供杭州爱科科技股份有限公司2020年的财务费用增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年昂利康办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "成都欧林生物科技股份有限公司在2021年的净利润增长率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年新疆友好(集团)股份有限公司总负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2020年北方铜业股份有限公司的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供常熟汽饰2020年的营业税金及附加金额为多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中盐内蒙古化工股份有限公司的固定资产增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年泰达股份的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "安徽芯瑞达科技股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广晟有色职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "北方稀土2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江拱东医疗器械股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "成都银河磁体股份有限公司在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "杭州新坐标科技股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "宁夏宝丰能源集团股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2019年苏州斯莱克精密设备股份有限公司的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "请问在2019年,闽东电力的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "博迈科海洋工程股份有限公司在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东阿阿胶股份有限公司的财务费用率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年新疆天业股份有限公司归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽皖维高新材料股份有限公司2021年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天津经纬辉开光电股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中国石油化工股份有限公司的三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年百川股份销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年恒盛能源股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请分析江苏中设集团股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "北京航天长峰股份有限公司在2021年的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "江天化学在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年上海市北高新股份有限公司的毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安徽合力股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "江苏弘业股份有限公司在2021年的货币资金增长率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2019年,甘肃祁连山水泥集团股份有限公司的投资收益占营业收入的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年德尔未来管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市杰普特光电股份有限公司在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年大连晨鑫网络科技股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年华图山鼎设计股份有限公司的资产负债比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "银河磁体2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年嘉兴斯达半导体股份有限公司的企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "达刚控股2020年的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年力芯微衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东方证券利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年双杰电气应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,海联金汇科技股份有限公司的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "山高环能在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年的年报数据,中闽能源的技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "江苏蔚蓝锂芯股份有限公司2021年是否涉及重大诉讼、仲裁事项?", "intent": "报告解读分析"} +{"question": "2019年罗普斯金的研发人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "能否告诉我,浙江司太立制药股份有限公司在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年成都新易盛通信技术股份有限公司的归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年东土科技无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安徽华骐环保科技股份有限公司在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "黔源电力2021年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "民生控股股份有限公司2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是现金流量覆盖率?", "intent": "专业名称解释"} +{"question": "请问中国全聚德(集团)股份有限公司在2019年的流动比率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "收入是什么意思?", "intent": "专业名称解释"} +{"question": "2019年奥特佳的营业利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "山东金岭矿业股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2021年郑州安图生物工程股份有限公司的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年飞亚达证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析石家庄科林电气股份有限公司2021年主要会计数据和财务指标的情况。", "intent": "报告解读分析"} +{"question": "请简要分析广东骏亚电子科技股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "2019年天虹数科商业股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "金科环境2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "想知道2019年派瑞股份的技术人员数量是多少。", "intent": "年报基础信息问答"} +{"question": "太阳能2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "宜华生活科技股份有限公司在2021年的投资收益增长率是多少,结果保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年成都先导药物开发股份有限公司的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "什么是归属于母公司所有者权益?", "intent": "专业名称解释"} +{"question": "在财务报表中,“应收账款”是什么意思?如何理解它的影响?", "intent": "专业名称解释"} +{"question": "豫能控股2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年山高环能营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年,浙江恒威电池股份有限公司的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年高铁电气的固定资产和无形资产分别为多少元?", "intent": "年报基础信息问答"} +{"question": "威胜信息技术股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年奥佳华净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,广东安居宝数码科技股份有限公司的其他非流动金融资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "广信股份在2021年的总负债增长率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "在2020年,永利股份的研发费用增长率为多少?请以保留2位小数的形式给出。", "intent": "财务指标计算"} +{"question": "2019年景兴纸业的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "港中旅华贸国际物流股份有限公司2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年上海申通地铁股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "易明医药2021年归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "太龙电子股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "郑煤机2021年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "为什么货币资金对公司的经营活动至关重要?", "intent": "专业名称解释"} +{"question": "2019年青岛汇金通电力设备股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "江苏联测机电科技股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "上海华鑫股份有限公司2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "青岛英派斯健康科技股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "风华高科2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供成都坤恒顺维科技股份有限公司2021年的现金及现金等价物增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "美晨生态2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年高新发展企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "联德股份在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年海鸥股份期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽建工集团股份有限公司2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析2019年湖南景峰医药股份有限公司所处的行业地位的情况。", "intent": "报告解读分析"} +{"question": "盈峰环境科技集团股份有限公司在2020年的净利润率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年江苏综艺股份有限公司营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "第一创业证券股份有限公司2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江铃汽车股份有限公司2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年深圳雷曼光电科技股份有限公司营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海妙可蓝多食品科技股份有限公司年报数据中,每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "上海银行在2020年的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年深圳市宝明科技股份有限公司销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年谱尼测试营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年万安科技每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年银江技术股份有限公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是净资产回报率?", "intent": "专业名称解释"} +{"question": "在2020年的年报中,三元股份的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华安鑫创2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年嘉事堂总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "惠泰医疗在2020年的现金比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "恺英网络股份有限公司2021年的无形资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "心脉医疗在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "武汉菱电汽车电控系统股份有限公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年天风证券股份有限公司的利息支出为多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析山鹰国际控股股份公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "2020年浙江水晶光电科技股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "财达证券股份有限公司2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "国机汽车股份有限公司2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "大千生态环境集团股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "重庆长安汽车股份有限公司2021年的现金及现金等价物增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年太龙药业的财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京交大思诺科技股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中路股份有限公司研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍博彦科技2021年费用变化的原因是什么?", "intent": "报告解读分析"} +{"question": "请问鸿远电子在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2019年西子清洁能源装备制造股份有限公司的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "什么是总资产周转率?", "intent": "专业名称解释"} +{"question": "请提供岳阳林纸股份有限公司2019年的研发费用和财务费用金额。", "intent": "年报基础信息问答"} +{"question": "请问2021年航新科技的无形资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年至2021年间,东阿阿胶股份有限公司的法定代表人是否有都是相同的情况?", "intent": "统计对比分析"} +{"question": "2021年索菱股份营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年威海广泰销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据国检集团2021年的年报,请简要介绍报告期内公司社会责任工作情况。", "intent": "报告解读分析"} +{"question": "北鼎股份在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "深圳市新南山控股(集团)股份有限公司在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "上海城投控股股份有限公司2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "中信建投证券2019年企业硕士及以上人员占职工人数比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年圣湘生物企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年苏宁环球电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年,三安光电股份有限公司的现金比率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年工大高科的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "山东龙泉管道工程股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "万辰生物在2019年的营业成本率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请问爱婴室在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "大博医疗科技股份有限公司在2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "四川科新机电股份有限公司2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "能否根据2020年金宇生物技术股份有限公司的年报,给我简要介绍一下报告期内公司的环境信息情况。", "intent": "报告解读分析"} +{"question": "登云股份2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2019年海兰信电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "光明乳业股份有限公司2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江亚太机电股份有限公司2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "日科化学2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年东方证券的年报,利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年皖通高速的年报,请简要介绍报告期内公司社会责任工作情况。", "intent": "报告解读分析"} +{"question": "2021年杭州平治信息技术股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "成都秦川物联网科技股份有限公司2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析中节能国祯环保科技股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "2020年开润股份的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年上海能源证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "赣锋锂业2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年东南网架营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "惠伦晶体在2020年的销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年利华益维远化学股份有限公司销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年湖北凯龙化工集团股份有限公司的无形资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,鹿山新材的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市新国都股份有限公司企业研发经费与营业收入比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "明星电力2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "请简述2019年中炬高新重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "2019年浙江世宝注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "新宙邦2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "借款费用是什么意思?", "intent": "专业名称解释"} +{"question": "请简要分析广东骏亚电子科技股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "深圳市赢时胜信息技术股份有限公司2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年光线传媒的企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "高乐股份2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "北京思特奇信息技术股份有限公司2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年云南白药集团股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报,朗迪集团的营业利润具体是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年南大光电利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年君禾股份企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "奥克股份2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年,四川川大智胜软件股份有限公司的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "深圳康泰生物制品股份有限公司在2021年的流动负债增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "锐新科技在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年河南羚锐制药股份有限公司的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "西南证券在2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "炬光科技2021年衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,常州天晟新材料股份有限公司在2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年四方科技毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报,泰嘉股份的财务费用增长率是多少,结果保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "请问,2019年信立泰公司的网址是什么?", "intent": "年报基础信息问答"} +{"question": "我想知道北京空港科技园区股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "中国铝业2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳信隆健康产业发展股份有限公司的固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请告诉我2019年的浙江东南网架股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "郴电国际2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市纺织(集团)股份有限公司在2019年的研发经费占费用比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,2020年中航重机股份有限公司的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年中铁装配式建筑股份有限公司的管理费用金额。", "intent": "年报基础信息问答"} +{"question": "什么是资产周转率?", "intent": "专业名称解释"} +{"question": "在2021年,国科微应付的职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "深科达在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年度报告中,永福股份的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏新泉汽车饰件股份有限公司2021年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "新经典2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年气派科技股份有限公司净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请分析南凌科技股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "卓锦股份2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "锦泓集团在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问天津津滨发展股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "深圳信测标准技术服务股份有限公司2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江大东南股份有限公司在2019年的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,凯瑞德控股股份有限公司2020年年报数据中,公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报,深圳英飞拓科技股份有限公司的总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海剑桥科技股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "广西河池化工股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "西安陕鼓动力股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "圣邦股份在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "滨化集团股份有限公司在2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "工大高新2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年克劳斯玛菲股份有限公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州锦富技术股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "九有股份在2021年期末的现金及现金等价物余额总额是多少元?", "intent": "年报基础信息问答"} +{"question": "东方金钰股份有限公司2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问2019年北京君正集成电路股份有限公司的研发经费占费用的比例是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "中来股份在2020年的财务费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "潜能恒信在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "睿智医药科技股份有限公司2020年的非流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "浙江万里扬股份有限公司在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "青岛银行股份有限公司2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的财务数据,鼎信通讯的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "浙富控股2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "电连技术股份有限公司2020年研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "兆龙互连在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "双箭股份在2020年的营业成本和营业利润各为多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析四川宏达股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "北方华创在2021年的应收款项融资金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年万方发展营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年诺唯赞归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年中国高科集团股份有限公司的研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国电影股份有限公司在2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "日海智能科技股份有限公司在2021年的总资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年罗牛山利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市德方纳米科技股份有限公司的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山东华鹏的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳欧陆通电子股份有限公司的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华电能源2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年北京全时天地在线网络信息股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "根据哈尔滨东安汽车动力股份有限公司2020年年报,该报告期内公司的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "无形资产是指什么?", "intent": "专业名称解释"} +{"question": "我想知道鄂尔多斯2019年的电子信箱地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年河北华通线缆集团股份有限公司研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "好利科技2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年横店集团得邦照明股份有限公司的年报,请简要介绍报告期内公司主要销售客户客户集中度如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "中达安股份有限公司2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "对比2019年,2020年北京科锐配电自动化股份有限公司法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "申科股份在2021年的流动负债增长率是多少?请在答案中保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是营业周期?", "intent": "专业名称解释"} +{"question": "2021年中航重机总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年贵州贵航汽车零部件股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "合营安排的分类及共同经营会计处理方法是什么?", "intent": "专业名称解释"} +{"question": "宁波拓普集团股份有限公司2021年的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,九江善水科技股份有限公司在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年鹏欣环球资源股份有限公司的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年杭州巨星科技股份有限公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "中达安股份有限公司2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "中远海运特种运输股份有限公司2021年的流动负债增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "亚玛顿在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "方正科技2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年瑞凌股份的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "深圳机场2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2021年天际股份的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广州毅昌科技股份有限公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年有研新材料股份有限公司的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市力合科创股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "包头明天科技股份有限公司在2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年金雷股份企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年中信建投证券利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "老百姓2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "精锻科技在2020年的速动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,华孚时尚在2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供星宇股份2020年的营业利润率,保留两位小数。", "intent": "财务指标计算"} +{"question": "东来技术2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市得润电子股份有限公司的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年国药股份的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "上海网达软件股份有限公司2020年的企业研发经费与营业收入的比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "武商集团股份有限公司2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是应收票据?", "intent": "专业名称解释"} +{"question": "在2019年,日照港的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,上海谊众的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "交建股份2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "广州白云国际机场股份有限公司2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "宁夏西部创业实业股份有限公司在2019年的财务费用率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "世华科技2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年武汉精测电子集团股份有限公司的投资收益增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "厦门信达2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,广东溢多利生物科技股份有限公司的总负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "南京盛航海运股份有限公司2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年杭华股份营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年炬申股份货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年东兴证券股份有限公司利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年合肥百货大楼集团股份有限公司的财务费用率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "武汉光迅科技股份有限公司在2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中公高科2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "昊华科技2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "我想知道2020年江特电机的营业收入和营业外收入分别是多少元。", "intent": "年报基础信息问答"} +{"question": "2019年华东数控企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年太阳能的营业利润率是多少,请保留两位小数。", "intent": "财务指标计算"} +{"question": "营业外收入和营业外支出对公司盈利能力和风险承受能力的影响如何评估?", "intent": "专业名称解释"} +{"question": "2021年光大银行的利息支出和利息收入具体数值是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是销售收入?", "intent": "专业名称解释"} +{"question": "2021年华锐精密净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,日月股份2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年大商股份有限公司的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年北京数字政通科技股份有限公司研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "河南通达电缆股份有限公司在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年内蒙古伊利实业集团股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "我想知道2020年宝色股份的销售费用增长率是多少,需保留2位小数。", "intent": "财务指标计算"} +{"question": "北京蓝色光标数据科技股份有限公司在2020年的研发费用增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请帮我查询吉大正元在2021年货币资金的具体数额是多少元?", "intent": "年报基础信息问答"} +{"question": "上海农村商业银行股份有限公司在2019年的投资收益占营业收入的比率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年苏州纽威阀门股份有限公司净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "明冠新材料股份有限公司2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "智动力2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "优先股、永续债等其他金融工具是什么?", "intent": "专业名称解释"} +{"question": "广东长青(集团)股份有限公司在2021年的总负债增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年晨曦航空现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年中国天楹现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年西安蓝晓科技新材料股份有限公司的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江威星智能仪表股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年年报数据,青岛东软载波科技股份有限公司的三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国中车2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "根据阳普医疗2019年的年度报告,请简要分析公司主要资产重大变化的情况。", "intent": "报告解读分析"} +{"question": "福建圣农发展股份有限公司2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问江苏神通在2019年的注册地址是哪里?", "intent": "年报基础信息问答"} +{"question": "铜陵精达特种电磁线股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江阴电工合金股份有限公司在2019年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "请简要分析广东三雄极光照明股份有限公司2019年审计意见的情况。", "intent": "报告解读分析"} +{"question": "大唐华银电力股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "华润材料2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年南卫股份的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年江苏立华牧业股份有限公司的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江西天利科技股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "德联集团2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年德展健康的流动负债增长率是多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "翔丰华在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "成都唐源电气股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,上海世茂股份有限公司2021年的法定代表人与2019年相比是否相同?", "intent": "统计对比分析"} +{"question": "武汉农尚环境股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年上海建工集团股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市蓝海华腾技术股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "江西赣粤高速公路股份有限公司2020年的流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是合同资产?", "intent": "专业名称解释"} +{"question": "2019年安徽海螺水泥股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "青松股份在2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "甘肃莫高实业发展股份有限公司2020年的流动负债比率保留两位小数是多少?", "intent": "财务指标计算"} +{"question": "浙江瀚叶股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年雅博股份总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海锦和商业经营管理股份有限公司在2019年的毛利率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年中芯国际集成电路制造有限公司营业利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "甘肃省敦煌种业集团股份有限公司在2019年的证券代码是多少?", "intent": "年报基础信息问答"} +{"question": "在2020年,杭州前进齿轮箱集团股份有限公司的现金比率是多少?数值请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "晶科电力科技股份有限公司2021年期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "中信博2019年财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供佳创视讯公司2020年的营业外收入金额。", "intent": "年报基础信息问答"} +{"question": "顾地科技股份有限公司2020年提到了哪些诉讼风险。", "intent": "报告解读分析"} +{"question": "2019年舒泰神的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "江苏立华牧业股份有限公司在2020年的非流动负债比率是多少?", "intent": "财务指标计算"} +{"question": "什么是少数股东权益?", "intent": "专业名称解释"} +{"question": "广东香山衡器集团股份有限公司2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "依依股份2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,人民网的企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "晶科能源股份有限公司在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年数据港的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广东宏大控股集团股份有限公司的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "根据星湖科技2019年的年报数据,其投资收益占营业收入的比率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "请问2019年朗新科技的研发经费占费用的比例是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2020年,天津银龙预应力材料股份有限公司的现金比率为多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "运达科技2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年浙江越剑智能装备股份有限公司的管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "河南恒星科技股份有限公司2020年的销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "建龙微纳2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "上海嘉麟杰纺织品股份有限公司2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "应收票据的到期和违约对公司的现金流和信用风险有何影响?", "intent": "专业名称解释"} +{"question": "2019年戴维医疗企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年上海临港控股股份有限公司的现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "湖北台基半导体股份有限公司在2020年的流动比率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "海大集团2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年南京海辰药业股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年石化油服固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年新疆众和股份有限公司的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "长春高新技术产业(集团)股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海联讯2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "音飞储存2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年大东海固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "宁波华翔电子股份有限公司在2021年的固定资产增长率为多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "能否查到2021年方正电机的研发费用增长率是多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "山东章鼓2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "佛山市国星光电股份有限公司在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年保变电气研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "宁波华翔2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年的财务数据中,海航控股的现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳至正高分子材料股份有限公司在2021年的货币资金增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "豆神教育科技(北京)股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年浙江佐力药业股份有限公司的年报,该报告期内公司的销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "银泰黄金2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "贵州川恒化工股份有限公司2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广州汽车集团股份有限公司2019年的企业研发经费占费用比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是经营性现金流量净额?", "intent": "专业名称解释"} +{"question": "什么是现金比率?", "intent": "专业名称解释"} +{"question": "2021年四川双马投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年赣粤高速的年报,请简要介绍报告期内公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门银行股份有限公司在2021年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北京赛科希德科技股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供中国太平洋保险(集团)股份有限公司2019年的利息支出,以元为单位。", "intent": "年报基础信息问答"} +{"question": "2020年上海临港控股股份有限公司营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年四川金时科技股份有限公司研发人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,帝欧家居的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "请提供北京亿华通科技股份有限公司2021年的营业成本金额。", "intent": "年报基础信息问答"} +{"question": "康尼机电2019年办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年浙江海盐力源环保科技股份有限公司的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "潞安环能2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年华阳国际的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "广州御银科技股份有限公司2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市中装建设集团股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年垒知集团注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年双乐颜料股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "卓易信息在2020年的资产负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年江苏三房巷聚材股份有限公司营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年明新旭腾新材料股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年永新光学总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请根据北大荒2020年的年报,简要介绍报告期内公司的环境信息情况。", "intent": "报告解读分析"} +{"question": "2021年春秋航空投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年天地科技股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广电计量检测集团股份有限公司的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年未来股份资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "新智认知数字科技股份有限公司在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年浙商银行的年报,请简要介绍报告期内公司环境信息情况。", "intent": "报告解读分析"} +{"question": "广东红墙新材料股份有限公司在2020年的流动比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "爱威科技在2019年的投资收益占营业收入的比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,仲景食品股份有限公司职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中成进出口股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "迈克生物2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "四川新金路集团股份有限公司2021年的现金及现金等价物增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年浙江泰林生物技术股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,浙江华是科技股份有限公司的销售费用和管理费用各是多少?", "intent": "年报基础信息问答"} +{"question": "在2020年,宝新能源的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据新城控股2020年的年报,请简要介绍报告期内公司环境信息情况。", "intent": "报告解读分析"} +{"question": "2019年甘咨询三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年沪硅产业的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "2019年吉林化纤办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年大湖水殖股份有限公司的年报,现金及现金等价物增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华昌达在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "江中药业在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年江苏宝馨科技股份有限公司固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海爱建集团股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江长城电工科技股份有限公司2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,川网传媒在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年罗莱生活营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年佳发教育企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "双杰电气2020年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年茂名石化实华股份有限公司每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年南京银行的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年上海能源的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江金沃精工股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年泰豪科技净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是资本公积?", "intent": "专业名称解释"} +{"question": "湘佳股份2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "宏达电子2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年均胜电子的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "科远智慧2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年江苏紫金农村商业银行股份有限公司的年报,利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "欧菲光2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "莱茵生物2019年的研发人员占职工人数的比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "奥马电器2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年山西科新发展股份有限公司的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "华油惠博普科技股份有限公司2021年年报中其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年大丰实业固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,天津富通信息科技股份有限公司的无形资产增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "我想知道水井坊在2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年恒通物流股份有限公司对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "为什么净利润与现金流量不一致?", "intent": "专业名称解释"} +{"question": "什么是债权投资?", "intent": "专业名称解释"} +{"question": "四川宏达股份有限公司2019年的研发人员占职工人数比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中金辐照2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年海欣股份综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年华侨城对其联营企业和合营企业的投资收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中科云网科技集团股份有限公司年报数据中,证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年鸿路钢构流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析安徽长城军工股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "常山药业在2021年的货币资金增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "四川明星电力股份有限公司2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "冠龙节能2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "顺鑫农业2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "雅艺科技在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,一心堂药业集团股份有限公司的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "武汉凡谷在2021年的货币资金增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2020年航宇科技营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,深圳市财富趋势科技股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年博云新材的流动负债增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "新力金融2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "爱仕达股份有限公司在2021年的无形资产增长率是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "东风汽车2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "初灵信息2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽九华山旅游发展股份有限公司2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "合同成本是指什么?", "intent": "专业名称解释"} +{"question": "请简要介绍一下2020年北京北斗星通导航技术股份有限公司主要会计数据和财务指标的情况。", "intent": "报告解读分析"} +{"question": "应收票据的管理对公司的流动性和信用风险有何影响?", "intent": "专业名称解释"} +{"question": "2021年上海银行股份有限公司利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "新华百货在2020年的公允价值变动收益可是多少?", "intent": "年报基础信息问答"} +{"question": "2019年浙江亚太药业股份有限公司投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,根据2020年的年报,江特电机的博士及以上学位人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "2021年纬德信息无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年博世科年报中货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "康平科技(苏州)股份有限公司2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "万达信息2021年的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "比较2019年和2020年,秋林集团的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "云煤能源在2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "广东万里马实业股份有限公司2020年的速动比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请问浙江东方基因生物制品股份有限公司2020年的财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年潍柴动力的财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年永辉超市的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华扬联众2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "新疆国际实业股份有限公司在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "珠江股份2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳市农产品集团股份有限公司的无形资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的财务数据,开润股份的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天山铝业集团股份有限公司在2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "东方财富在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "宁德时代2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年青岛惠城环保科技集团的年报,现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京合众思壮科技股份有限公司2021年的营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安靠智电2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年金陵体育的销售费用增长率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "天合光能股份有限公司在2020年的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是负债合计?", "intent": "专业名称解释"} +{"question": "安徽蓝盾光电子股份有限公司2020年博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "根据环旭电子股份有限公司2019年的年报,该报告期内公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "盛屯矿业集团股份有限公司在2020年的净利润率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "重庆渝开发股份有限公司在2019至2021年间的法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "神宇通信科技股份公司2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "鲁北化工在2019年的研发经费与利润的比值是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "浙江航民股份有限公司2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年安徽众源新材料的销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供上海贵酒股份有限公司2020年的总负债增长率,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "上港集团2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年天通控股股份有限公司的企业研发经费与营业收入比值是多少,结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "寿仙谷在2019年的企业研发经费占费用比例保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2021年万邦德无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江莎普爱思药业股份有限公司2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,广东万里马实业股份有限公司的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,江苏雷利在2020年的销售费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年横河精密营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "西藏城市发展投资股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长虹华意压缩机股份有限公司2019年的研发人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年中央商场现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国外运在2019年的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "应付职工薪酬的计提和支付对公司的财务状况和员工满意度有何影响?", "intent": "专业名称解释"} +{"question": "请问,黄山永新股份有限公司的法定代表人在2021年是否与2019年相同?", "intent": "统计对比分析"} +{"question": "根据2020年年报数据,索菱股份的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年大众交通的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "威胜信息技术股份有限公司在2020年的销售费用为多少元?", "intent": "年报基础信息问答"} +{"question": "雷柏科技2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2019年金田股份的企业研发经费在总费用中的比例是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "什么是财务费用?", "intent": "专业名称解释"} +{"question": "2019年长虹美菱股份有限公司的三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年吉艾科技的非流动负债比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "春兴精工2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江嘉益保温科技股份有限公司在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "梦天家居集团股份有限公司2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "甘肃上峰水泥股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "软控股份有限公司在2020年的速动比率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "华菱钢铁在2019年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "裕兴股份在2019年的研发人员占职工人数比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "租赁负债的定义是什么?", "intent": "专业名称解释"} +{"question": "芒果超媒股份有限公司2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "航天信息股份有限公司2020年的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年宁波旭升集团股份有限公司技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年,北方稀土的管理费用增长率具体是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "天津利安隆新材料股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2020年长沙景嘉微电子股份有限公司非流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的数据,苏州瀚川智能科技股份有限公司的流动负债比率为多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "宁波迦南智能电气股份有限公司2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是负债率?", "intent": "专业名称解释"} +{"question": "什么是每股收益?", "intent": "专业名称解释"} +{"question": "2020年宏达高科综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "美格智能2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "宁波海天精工股份有限公司在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中航沈飞净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问在2019-2021年期间,江苏紫金农村商业银行股份有限公司的法定代表人是否都是相同的的情况?", "intent": "统计对比分析"} +{"question": "2020年吉鑫科技公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年秋林集团流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "京沪高铁2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年上海家化的年度报告,请简要分析该公司投资活动产生现金流量净额变动的原因是什么?", "intent": "报告解读分析"} +{"question": "什么是长期应收款?", "intent": "专业名称解释"} +{"question": "2021年星光农机期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是收入?", "intent": "专业名称解释"} +{"question": "请简要分析台海玛努尔核电设备股份有限公司2021年的审计报告中的审计意见及成因。", "intent": "报告解读分析"} +{"question": "2020年联瑞新材的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,2021年福立旺应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2021年震安科技股份有限公司的主营业务及主要产品。", "intent": "报告解读分析"} +{"question": "2021年万邦达的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北方导航所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "广东惠云钛业股份有限公司在2019年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析山东矿机集团股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "江苏力星通用钢球股份有限公司2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年武汉锐科光纤激光技术股份有限公司总负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "骆驼集团股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年宁波迦南智能电气股份有限公司净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "相比于2020年,2021年测绘股份的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "2020年好想你净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江伟明环保股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中金公司利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "伊戈尔电气股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳拓邦股份有限公司2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "坤恒顺维2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "方大集团在2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年远望谷期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "东莞市华立实业股份有限公司2020年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽荃银高科种业股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "平高电气2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是无形资产?", "intent": "专业名称解释"} +{"question": "请问祥鑫科技在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "御银股份2021年收回的投资现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中南出版传媒集团股份有限公司营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年青岛汇金通电力设备股份有限公司固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年圣湘生物科技股份有限公司的营业成本率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "企业会计准则的定义是什么?", "intent": "专业名称解释"} +{"question": "上海安诺其集团股份有限公司2019年的企业研发经费与利润的比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "富通信息2021年年报数据中,应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年横店集团得邦照明股份有限公司的年报,请简要介绍报告期内公司供应商集中度如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "2021年中衡设计营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年蓝英装备的衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "华骐环保2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "杭华油墨股份有限公司2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "国联证券2019年的投资收益占营业收入的比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年泰晶科技股份有限公司的年报,该报告期内公司的研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是营业外收支净额?", "intent": "专业名称解释"} +{"question": "和林微纳在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "我想知道2020年贵研铂业股份有限公司的速动比率,结果需要保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年雅创电子的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "瑞可达2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "标榜股份在2021年的净利润增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年江西富祥药业股份有限公司办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年华铁应急电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "海南海德资本管理股份有限公司2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "思进智能2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,通化葡萄酒股份有限公司在2021年的资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "安联锐视2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年依米康科技集团股份有限公司营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请根据安徽神剑新材料股份有限公司2021年的年报,给我简要介绍一下报告期内公司的社会责任工作情况", "intent": "报告解读分析"} +{"question": "请问,湖南投资集团股份有限公司在2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "山东省中鲁远洋渔业股份有限公司在2019年的流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年北京安达维尔科技股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广州海鸥住宅工业股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年原尚股份的三费比重是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年禾丰食品股份有限公司企业研发经费占费用比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市雷赛智能控制股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "对比2020年,大悦城在2021年的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "中材节能股份有限公司2019年的法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2019年宇环数控机床股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "紫光国微2020年的法定代表人与2019年相比是否发生不同?", "intent": "统计对比分析"} +{"question": "在2019至2021年期间,浙江核新同花顺网络信息股份有限公司的法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "华平信息技术股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年一拖股份企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年重庆太极实业(集团)股份有限公司的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "朝阳科技2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江河创建集团股份有限公司在2019年的企业研发经费占费用比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "国网英大股份有限公司2020年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "同大股份2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "存货周转率的变动如何反映公司的供应链效率和库存管理水平的改善?", "intent": "专业名称解释"} +{"question": "2020年中化岩土综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年上海医药集团股份有限公司财务费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年利欧集团股份有限公司的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年航锦科技的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "德邦物流股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "水发燃气2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "苏州明志科技股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年国美通讯每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏日久光电股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,花王生态工程股份有限公司需支付的职工薪酬总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年有研粉材博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年康龙化成的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "中国旅游集团中免股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年兰剑智能流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据深圳市联得自动化装备股份有限公司2021年的年报,营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年广晟有色的财务费用率是多少,结果以保留2位小数的形式给出?", "intent": "财务指标计算"} +{"question": "2019年元力股份的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "贵州燃气2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "深南电路2019年证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "请提供2020年神州高铁技术股份有限公司的综合收益总额金额为多少元?", "intent": "年报基础信息问答"} +{"question": "中科三环2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "同一控制下和非同一控制下企业合并的会计处理方法是什么?", "intent": "专业名称解释"} +{"question": "什么是归属于母公司所有者的综合收益总额?", "intent": "专业名称解释"} +{"question": "2020年迪瑞医疗科技股份有限公司的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海世茂股份有限公司2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "汉威科技集团股份有限公司在2020年的博士及以上学历人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年上海宏达新材料股份有限公司营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,深圳市维业装饰集团股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "中原环保股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "圣农发展2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年,科德数控股份有限公司的营业外支出总额为多少元?", "intent": "年报基础信息问答"} +{"question": "2020年新华都科技股份有限公司净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "科大国创软件股份有限公司2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请分析无锡路通视信网络股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "时代电气在2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳奥特迅电力设备股份有限公司2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "三变科技股份有限公司2019年的毛利率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是会计期间?", "intent": "专业名称解释"} +{"question": "请问,浦发银行在2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年四川安宁铁钛股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "康力电梯2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年德新科技的财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "晶雪节能在2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析冀中能源股份有限公司2021年研发投入情况", "intent": "报告解读分析"} +{"question": "在中国铁路通信信号股份有限公司2019年的年报中,董事长致辞中提到了哪些主要内容,是否涉及了重大的创新?", "intent": "报告解读分析"} +{"question": "2021年华仪电气股份有限公司期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年厦门金龙汽车集团股份有限公司货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "创元科技2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年亚宝药业其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "鼎捷软件股份有限公司2019年的企业研发经费与营业收入比值保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "长虹华意2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "致远互联2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "益民集团在2020年的财务费用增长率是多少,需要保留到小数点后第二位。", "intent": "财务指标计算"} +{"question": "利群商业集团股份有限公司2021年固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "青海互助天佑德青稞酒股份有限公司2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国电建在2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江仙通2019年的研发人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年盐田港办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年光正眼科流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年东诚药业收回投资所得的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是预付款项?", "intent": "专业名称解释"} +{"question": "2021年海南葫芦娃药业集团股份有限公司净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "瑞康医药在2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "凯众股份在2020年的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问中航产融在2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "递延所得税资产/递延所得税负债是什么?", "intent": "专业名称解释"} +{"question": "根据上海荣泰健康科技股份有限公司2019年的年报,该报告期内公司的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年飞荣达研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广东水电二局股份有限公司在2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "宁波天益医疗器械股份有限公司在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年年报数据,张家港海锅新能源装备股份有限公司的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "山西焦煤能源集团股份有限公司2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年汇通集团的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "神通科技集团股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江海正药业股份有限公司在2020年的投资收益总计为多少元?", "intent": "年报基础信息问答"} +{"question": "什么是应收款项融资?", "intent": "专业名称解释"} +{"question": "五洋停车在2021年的其他非流动金融资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "日出东方控股股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "高新兴科技集团股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "秦安股份在2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "无锡航亚科技股份有限公司2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,凯发电气2020年的非流动负债比率具体是多少?结果保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年,金智科技的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "浙版传媒2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江永和制冷股份有限公司在2021年的营业利润增长率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年济川药业投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年农产品的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "博彦科技2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年芯碁微装的博士及以上人数有多少?", "intent": "年报基础信息问答"} +{"question": "厦门银行在2021年的营业利润增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年读者出版传媒股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是营业税金及附加?", "intent": "专业名称解释"} +{"question": "台华新材2021年的总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,中望软件的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年恒誉环保销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "新联电子2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "保立佳在2021年期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "珠海英搏尔电气股份有限公司2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中南传媒企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年岳阳兴长石化股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "研奥电气股份有限公司2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "重庆水务2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "湖北共同药业股份有限公司2021年的营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年国盾量子销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "中船汉光2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天阳宏业科技股份有限公司在2021年的无形资产价值是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年乐凯胶片股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年锦旅股份法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "祥鑫科技股份有限公司在2019年的管理费用率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "请提供上海环境集团股份有限公司2019年的办公地址。", "intent": "年报基础信息问答"} +{"question": "请问,2019年北巴传媒的毛利率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "怡合达2020年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "世联行2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "上海医药2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年乐凯胶片股份有限公司电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "汇川技术2021年年报数据中,固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "成都豪能科技股份有限公司2021年的总负债增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "三变科技2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2021年安徽中电兴发与鑫龙科技股份有限公司其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2021年,美畅股份的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍北京北斗星通导航技术股份有限公司2020年主要资产重大变化的情况。", "intent": "报告解读分析"} +{"question": "气派科技股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年佛山电器照明股份有限公司的研发人员在职工人数中所占比例是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "苏州上声电子股份有限公司在2020年的管理费用具体是多少元?", "intent": "年报基础信息问答"} +{"question": "请查询北京利尔高温材料股份有限公司在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年原尚股份法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "新大陆在2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请问三星医疗在2021年的投资收益增长率是多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "德华兔宝宝装饰新材股份有限公司2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年电广传媒无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年科泰电源研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年学大(厦门)教育科技集团股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "石头科技2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "亨迪药业2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "根据宏辉果蔬2020年的年报,请简要介绍报告期内公司主要销售客户的客户集中度如何?请结合同行业情况进行简要分析。", "intent": "报告解读分析"} +{"question": "2021年湖南梦洁家纺股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江李子园食品股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析天地科技股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "内蒙古鄂尔多斯资源股份有限公司2019年的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是金融工具?", "intent": "专业名称解释"} +{"question": "请问,2021年宏和科技负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年美诺华销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,安徽省通源环境节能股份有限公司2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "浩云科技股份有限公司在2020年的现金比率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年吉林省集安益盛药业股份有限公司电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2019年北京天智航医疗科技股份有限公司的营业成本率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中芯国际2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年云南云天化股份有限公司的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "江龙船艇科技股份有限公司2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳燃气在2021年的货币资金增长率具体是多少,需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "浙江森马服饰股份有限公司在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "迪威迅2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "吉贝尔2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年石化油服的管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "软通动力在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年华电能源流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年上海外高桥集团股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请分析新疆天山畜牧生物工程股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "什么是股份支付?", "intent": "专业名称解释"} +{"question": "请提供2021年北信源的营业成本,单位为元。", "intent": "年报基础信息问答"} +{"question": "2019年天普股份财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "奕东电子科技股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年华菱钢铁利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江金鹰股份有限公司货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供2021年申达股份收回投资所获得的现金金额为多少元?", "intent": "年报基础信息问答"} +{"question": "2021年恒银科技货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "北京碧水源科技股份有限公司在2020年的研发费用增长率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "深圳市裕同包装科技股份有限公司在2020年的销售费用增长率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "江苏美思德化学股份有限公司2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "根据江西晨光新材料股份有限公司2019年年报,该报告期内公司的财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,张家港中环海陆高端装备股份有限公司在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "冀凯股份2020年的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问大西洋在2020年的流动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "北京东土科技股份有限公司2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年上海物资贸易股份有限公司销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年天臣国际医疗科技股份有限公司企业研发经费与营业收入比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年江苏图南合金股份有限公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年恒实科技的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "昊志机电2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,云南驰宏锌锗股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "海南金盘智能科技股份有限公司2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请告诉我2020年山东宝莫生物化工股份有限公司的流动负债比率,需要保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年普洛药业的营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年远光软件股份有限公司归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是租赁?", "intent": "专业名称解释"} +{"question": "株洲华锐精密工具股份有限公司2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年北京科锐配电自动化股份有限公司的财务费用率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年福建赛特新材股份有限公司硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年安徽长城军工股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山西美锦能源股份有限公司在2020年的净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的数据,宜安科技的财务费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年,安徽山河药用辅料股份有限公司的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "五矿资本在2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "沈阳机床在2021年的总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年上海金桥出口加工区开发股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年申万宏源集团股份有限公司的企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年千山药机期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年隆鑫通用总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年浩洋股份无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州金鸿顺汽车部件股份有限公司2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中信银行股份有限公司的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "上海永冠众诚新材料科技(集团)股份有限公司2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华鹏飞股份有限公司2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供熊猫金控股份有限公司2021年的资产总计金额为多少元?", "intent": "年报基础信息问答"} +{"question": "陕西美邦药业集团股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供福建赛特新材股份有限公司2019年的营业利润率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年泛微网络注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "开滦能源化工股份有限公司2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,埃夫特在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "请提供中亚股份2021年的资产总计金额为多少元?", "intent": "年报基础信息问答"} +{"question": "请提供欣天科技公司2021年的固定资产金额。", "intent": "年报基础信息问答"} +{"question": "2019年中远海控的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "云鼎科技2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "阳光电源股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "鸿远电子2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请分析志邦家居股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "信达地产2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "永艺家具股份有限公司在2021年的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "交控科技股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据万孚生物2020年的年报,请简要介绍报告期内公司的环境信息情况。", "intent": "报告解读分析"} +{"question": "TCL中环新能源科技股份有限公司2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "成都秦川物联网科技股份有限公司2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山东南山智尚科技股份有限公司年报数据中,研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "盾安环境2019年的投资收益占营业收入的比率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "我想知道深圳市兆新能源股份有限公司在2020年的非流动负债比率是多少,结果需要保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年富安娜总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "必得科技2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "四川长虹电器股份有限公司2019年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年福州达华智能科技股份有限公司的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "海尔生物在2019年的员工总数是多少?", "intent": "年报基础信息问答"} +{"question": "北京燕京啤酒股份有限公司在2020年的财务费用增长率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年今世缘研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,广大特材的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "北京科蓝软件系统股份有限公司2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "粤高速2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "大秦铁路公司在2021年的货币资金增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年立方制药营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年东江环保股份有限公司对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年蜀道装备的总资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是资本预算?如何进行资本预算决策?", "intent": "专业名称解释"} +{"question": "2020年深圳能源集团股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "存货周转率的变动如何反映公司的供应链效率和库存管理水平?", "intent": "专业名称解释"} +{"question": "2019年中炬高新技术实业(集团)股份有限公司研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "海螺新材在2019年的企业研发经费与利润之比是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年宁波杉杉股份有限公司销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,天津七一二通信广播股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广汽集团2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是销售净利率?", "intent": "专业名称解释"} +{"question": "厦门港务发展股份有限公司2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,石家庄常山北明科技股份有限公司的流动负债比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "北京盛通印刷股份有限公司2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "拓邦股份2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2021年徐工集团工程机械股份有限公司的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中视传媒股份有限公司在2019年的电子邮箱地址是什么?", "intent": "年报基础信息问答"} +{"question": "回盛生物在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "光智科技2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "锦泓时装集团股份有限公司2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供广东通宇通讯股份有限公司2021年的收回投资所得现金金额。", "intent": "年报基础信息问答"} +{"question": "苏州春兴精工股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "综合收益总额与归属于母公司所有者的综合收益总额之间的关系是什么?", "intent": "专业名称解释"} +{"question": "请问,2019年广东汕头超声电子股份有限公司研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "云南罗平锌电股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "科达利2019年的企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中核钛白2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市捷顺科技实业股份有限公司资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "沪宁股份2019年的研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中信泰富特钢集团股份有限公司在2019年的营业成本率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "江苏富淼科技股份有限公司在2021年的营业利润增长率是多少,需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "四创电子股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是应付账款周转天数?", "intent": "专业名称解释"} +{"question": "2020年苏美达股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是应付职工薪酬?", "intent": "专业名称解释"} +{"question": "北京数字认证股份有限公司在2019年的管理费用率是多少,结果请保留两位小数?", "intent": "财务指标计算"} +{"question": "重要会计政策和会计估计的变更是什么?", "intent": "专业名称解释"} +{"question": "泰瑞机器股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2021年读客文化股份有限公司的净利润增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年东宝生物营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,苏交科在2020年的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "如何分析营业收入的变动趋势?", "intent": "专业名称解释"} +{"question": "2020年大恒科技营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "太和水在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "金麒麟2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,杭州纵横通信股份有限公司的固定资产增长率为多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "南京纺织品进出口股份有限公司2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年西安曲江文化旅游股份有限公司年报数据中,无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "武汉海特生物制药股份有限公司在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "重庆华森制药股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2021年美的集团股份有限公司的衍生金融资产和其他非流动金融资产,单位为元。", "intent": "年报基础信息问答"} +{"question": "协鑫能科2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年正业科技归属母公司所有者的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请根据创业慧康2020年的年报,给我简要介绍一下报告期内公司的社会责任工作情况?", "intent": "报告解读分析"} +{"question": "北京高能时代环境技术股份有限公司2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供天津瑞普生物技术股份有限公司2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年度报告中,梅花生物的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "明牌珠宝在2021年收回投资所收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "佳华科技在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年老凤祥财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "道恩股份2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年嘉亨家化营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年美的集团股份有限公司的总资产增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年国民技术每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "华新包装在2020年有多少名博士及以上学历的员工?", "intent": "年报基础信息问答"} +{"question": "什么是应付账款周转率?", "intent": "专业名称解释"} +{"question": "请简要分析哈尔滨秋林集团股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "2020年博杰股份的资产负债比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "聆达集团股份有限公司2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "请提供金牛化工2019年的营业成本率,保留两位小数。", "intent": "财务指标计算"} +{"question": "九牧王2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供浙江众成2021年的总负债增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要分析浙江米奥兰特商务会展股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "根据2019年的年报,东方智造的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "国投资本股份有限公司2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年江苏日久光电股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "固定资产的折旧政策如何影响公司的财务状况和税务成本?", "intent": "专业名称解释"} +{"question": "浙江莎普爱思药业股份有限公司2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "湖南天雁在2020年的现金比率是多少?请给出具体数字并保留2位小数。", "intent": "财务指标计算"} +{"question": "宁波水表(集团)股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "贤丰控股在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中公教育科技股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "三川智慧科技股份有限公司在2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "在2020年,英唐智控的销售费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年每日互动企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析中铁高新工业股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "2020年克劳斯玛菲股份有限公司的非流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请告诉我茂业商业股份有限公司2019年的管理费用率,要求精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "请问,中信国安信息产业股份有限公司在2021年的投资收益增长率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年的年报数据,金陵药业的法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "中国农业银行股份有限公司2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "湖北凯龙化工集团股份有限公司在2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "国家电投集团产融控股股份有限公司在2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "安洁科技2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年建投能源的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江锦盛新材料股份有限公司的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,根据宇信科技2019年的年报,在第一节重要提示、目录和释义中,都提及了哪些公司可能存在的风险?", "intent": "报告解读分析"} +{"question": "华鼎股份2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问2020年海南椰岛(集团)股份有限公司的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是生物资产?", "intent": "专业名称解释"} +{"question": "2020年立方数科股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2021年航天机电的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "聚合顺2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "冀东装备2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "坚朗五金2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "华闻传媒投资集团股份有限公司2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "资产负债总额和净资产之间的关系是什么?", "intent": "专业名称解释"} +{"question": "根据横店东磁2020年的年报,能否简要介绍公司报告期内主要销售客户的客户集中度以及与同行业情况的简要分析?", "intent": "报告解读分析"} +{"question": "与2019年相比,2020年珠海光库科技股份有限公司的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "根据2019年年报数据,中国电信股份有限公司的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年瑞茂通应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,中汽股份的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "劲仔食品集团股份有限公司2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "大名城2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "银座股份2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年东方电气股份有限公司利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "桂林三金药业股份有限公司2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供2020年智飞生物的速动比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "热景生物2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江东亚药业股份有限公司2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "运达股份2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "长期资产减值的含义是什么?", "intent": "专业名称解释"} +{"question": "川环科技在2021年的应收款项融资有多少元?", "intent": "年报基础信息问答"} +{"question": "中粮资本控股股份有限公司2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是现金流量表?", "intent": "专业名称解释"} +{"question": "绝味食品股份有限公司在2020年的营业税金及附加总计为多少元?", "intent": "年报基础信息问答"} +{"question": "武进不锈2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "孚日集团股份有限公司在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年万方发展的现金及现金等价物增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "如何解释财务报表中的“商誉”?", "intent": "专业名称解释"} +{"question": "2019年利扬芯片的营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "亿嘉和2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "东莞勤上光电股份有限公司在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "北京万东医疗科技股份有限公司2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏亚威机床股份有限公司2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,广东东箭汽车科技股份有限公司在2021年的净利润增长率是多少,结果需保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "净利润率的变动如何反映公司的盈利能力和经营效率的改善?", "intent": "专业名称解释"} +{"question": "玲珑轮胎2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年蜀道装备营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019-2021年期间,金雷股份的法定代表人是否存在都相同的情况?", "intent": "统计对比分析"} +{"question": "请简要分析唐山三友化工股份有限公司2021年公司股权激励计划、员工持股计划或其他员工激励措施的情况及其影响", "intent": "报告解读分析"} +{"question": "威尔药业2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "广州天赐高新材料股份有限公司在2020年的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "浙江芯能光伏科技股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "结合2021年上海同达创业投资股份有限公司的年报信息,请简要分析该公司主要销售客户及主要供应商情况。", "intent": "报告解读分析"} +{"question": "想知道2020年恒铭达的现金比率是多少,需要保留两位小数。", "intent": "财务指标计算"} +{"question": "大立科技在2020年的现金比率是多少,精确到小数点后两位?", "intent": "财务指标计算"} +{"question": "2020年广弘控股流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年上海广电电气(集团)股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问在2021年,园林股份的应收款项融资总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年视觉(中国)文化发展股份有限公司无形资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "分众传媒在2020年的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年中原内配财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,恒源煤电在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "北京恒华伟业科技股份有限公司在2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "上海移为通信技术股份有限公司在2020年的管理费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年青岛港外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年科瑞技术的年报,其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "楚天龙2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2019年永清环保股份有限公司的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年西部证券企业中,拥有硕士及以上学历的员工占职工总数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "福建火炬电子科技股份有限公司2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年金浦钛业期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "TCL中环新能源科技股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "同一控制下和非同一控制下企业合并采用什么样的会计处理方法?", "intent": "专业名称解释"} +{"question": "请提供2020年北京威卡威汽车零部件股份有限公司对联营企业和合营企业的投资收益,单位为元。", "intent": "年报基础信息问答"} +{"question": "河南凯旺电子科技股份有限公司在2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,北京九强生物技术股份有限公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "瑞玛精密在2019年的营业成本率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "科博达2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年楚天龙的年报,请简要介绍报告期内公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "如何评估资本回报率的合理水平?", "intent": "专业名称解释"} +{"question": "根据2021年的年报数据,新疆鑫泰天然气股份有限公司报告期内公司董事会会议议案的情况,请简要介绍。", "intent": "报告解读分析"} +{"question": "青海盐湖工业股份有限公司2021年的总资产增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "光明房地产集团股份有限公司在2021年的总资产增长率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年河南豫光金铅股份有限公司营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "山东航空在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请问,杭州中威电子股份有限公司在2021年的应收款项融资的金额是多少元?", "intent": "年报基础信息问答"} +{"question": "中远海发在2019年的财务费用率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "在2020年,新华医疗的硕士及以上人员占职工人数的比例是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "2021年中国民生银行股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳新星2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "交大思诺2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年南京高科股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东莞控股固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中电电机2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "京投发展在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "航发科技2020年年报中营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年福建龙溪轴承(集团)股份有限公司营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年广东顺控发展股份有限公司营业利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "科拓生物在2019年的企业研发经费与利润的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年扬州海昌新材股份有限公司净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中航沈飞股份有限公司2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,嘉凯城的总资产增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年绿能慧充公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东方盛虹技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "管理费用对公司的成本控制和资源配置有何影响?", "intent": "专业名称解释"} +{"question": "2019年江苏澳洋健康产业股份有限公司营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年上海锦江国际酒店股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "安徽建工集团股份有限公司2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "狮头股份2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年东莞宜安科技股份有限公司年报数据中,资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年紫天科技其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中原证券年报数据中,利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "弘讯科技在2021年的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "好利科技在2021年的货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2020年杭州士兰微电子股份有限公司利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天润乳业在2020年的营业收入和营业外收入各为多少元?", "intent": "年报基础信息问答"} +{"question": "2019年万泽股份的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "深圳市华盛昌科技实业股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2020年集友股份的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年上海华培动力科技(集团)股份有限公司办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "柳化股份在2021年的总资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "北京雪迪龙科技股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请问中信特钢在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "其他债权投资是指什么?", "intent": "专业名称解释"} +{"question": "2020年蒙娜丽莎集团股份有限公司营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "亚太科技2021年的总负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年达志科技每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市特力(集团)股份有限公司办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "长华集团2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年吉林华微电子股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "武汉凡谷电子技术股份有限公司2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "金花股份2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "经纬纺织机械股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "存货的管理对公司的运营效率和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "无锡和晶科技股份有限公司在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "军信股份在2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "宝光股份2019年办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "广州航新航空科技股份有限公司2021年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "河南神火煤电股份有限公司在2021年的无形资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "深圳莱宝高科技股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "凤凰光学公司在2019年的官方网站是什么?", "intent": "年报基础信息问答"} +{"question": "在2021年,保龄宝生物股份有限公司的衍生金融资产和其他非流动金融资产各是多少元?", "intent": "年报基础信息问答"} +{"question": "创业慧康科技股份有限公司2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年普元信息技术股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天迈科技2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "中航工业产融控股股份有限公司2020年的资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析台海玛努尔核电设备股份有限公司2021年的风险情况。", "intent": "报告解读分析"} +{"question": "中科软2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "广东莱尔新材料科技股份有限公司在2021年的净利润增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "什么是速动比率?", "intent": "专业名称解释"} +{"question": "2019年中信出版职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "江苏通达动力科技股份有限公司2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "梦网科技2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中际联合(北京)科技股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "科创信息2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是资本回报率?", "intent": "专业名称解释"} +{"question": "2019年山东晨鸣纸业集团股份有限公司法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "宁波建工2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "和科达在2021年的现金及现金等价物增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "从2021年的年报数据可知,苏州春兴精工股份有限公司的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "贵人鸟股份有限公司在2021年的总资产增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "资本结构对企业有什么影响?", "intent": "专业名称解释"} +{"question": "请简要分析2021年上海复旦微电子集团股份有限公司主要会计数据及财务指标增长的原因是什么?", "intent": "报告解读分析"} +{"question": "南方传媒在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年美格智能公司的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请分析浙江海盐力源环保科技股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "2019年中煤能源证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "北方化学工业股份有限公司2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "广州赛意信息科技股份有限公司2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "西部证券在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年烟台龙源电力技术股份有限公司注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年凯盛新材的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年鲁泰纺织投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江西三鑫医疗科技股份有限公司2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "冠石科技2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北京合康新能科技股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析三棵树涂料股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "我想知道光威复材在2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "富瑞特装在2020年的营业利润率是多少?请在答案中保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年宁波太平鸟时尚服饰股份有限公司对联营企业和合营企业的投资收益金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年,鞍重股份的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "销售费用的变动如何影响公司的销售额和市场份额?", "intent": "专业名称解释"} +{"question": "请问,2019年和顺石油企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "浙江迦南科技股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "四川省新能源动力股份有限公司在2020年的非流动负债比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请简要分析圣元环保股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "2020年显盈科技的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "普莱柯2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年诚迈科技电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "新时达2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年上海凯宝药业股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年深圳市卫光生物制品股份有限公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广东广州日报传媒股份有限公司在2019-2021年间的法定代表人是不是相同的?", "intent": "统计对比分析"} +{"question": "浙江震元2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2020年江苏博云营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,哈三联的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,广东塔牌集团股份有限公司的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "航发动力在2020年的企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是长期借款?", "intent": "专业名称解释"} +{"question": "请问,2019年江苏吴中医药发展股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "交大昂立在2021年的货币资金增长率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "根据2019年的年报数据,宜通世纪企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中国银行企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中国平安保险(集团)股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "爱建集团2019年的企业硕士及以上人员占职工人数的比例是多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年包头明天科技股份有限公司的货币资金增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年合肥常青机械股份有限公司管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "长青股份2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "艾格拉斯2020年的流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问宁波富达股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "张家港保税科技(集团)股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "楚天科技2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "请问,立达信物联科技股份有限公司在2021年的货币资金总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中金辐照的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "恒生电子股份有限公司在2020年的流动负债比率是多少?", "intent": "财务指标计算"} +{"question": "慈星股份2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "黑龙江国中水务股份有限公司在2019年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年兆讯传媒净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "贵州航天电器股份有限公司在2019年的企业研发经费与营业收入的比值保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请问,汇绿生态在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "上纬新材料科技股份有限公司2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,华懋(厦门)新材料科技股份有限公司收回的投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年胜华新材研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "益丰大药房连锁股份有限公司在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "粤万年青2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "凯文教育公司在2020年的销售费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "重庆市迪马实业股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年杭州海兴电力科技股份有限公司营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年长远锂科研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "上海龙头(集团)股份有限公司2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年运达科技的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问在2021年,密封科技的营业收入增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "营业外收入和营业外支出对公司盈利能力的影响如何评估?", "intent": "专业名称解释"} +{"question": "安徽荃银高科种业股份有限公司2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽德豪润达电气股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "仕净科技2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "东华能源股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "恒辉安防公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年加加食品集团股份有限公司非流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,新里程的期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "天润工业2020年的速动比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "浙文影业集团股份有限公司在2021年的研发费用增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "凯迪生态2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年麦趣尔集团股份有限公司投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年保千里研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "平安银行股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年征和的工业技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年,中交地产股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年杭州中威电子股份有限公司销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "容大感光2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "与2020年相比,2021年司尔特的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "深圳南山热电股份有限公司在2019年的固定资产和无形资产各是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年固德威净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年安徽壹石通材料科技股份有限公司每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "中科创达2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中国船舶重工股份有限公司2021年年报中货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年合肥城建发展股份有限公司公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "请问,宁波鲍斯能源装备股份有限公司在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "非经常性损益对公司的盈利能力和财务状况的影响如何评估?", "intent": "专业名称解释"} +{"question": "深圳市英维克科技股份有限公司在2020年的财务费用增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年宁波富佳实业股份有限公司归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "广州鹏辉能源科技股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,上海润欣科技股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "华丽家族2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门光莆电子股份有限公司2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "罗曼股份2021年法定代表人对比2020年是否相同?", "intent": "统计对比分析"} +{"question": "2019年锦浪科技股份有限公司的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "雪榕生物2020年年报中营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报,恒宇信通航空装备(北京)股份有限公司的营业收入和营业外收入各是多少元?", "intent": "年报基础信息问答"} +{"question": "牧高笛户外用品股份有限公司2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "华体科技2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天壕环境股份有限公司2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "英力股份2020年的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "内蒙新华2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "元利科技2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "大元泵业2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年东莞金太阳研磨股份有限公司归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年的年报,中国联合网络通信股份有限公司的管理费用率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "潍柴重机2019-2021年法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "对比2019年,2020年东方证券法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "2019年中成进出口股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析上海水星家用纺织品股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "2021年太平洋投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "惠伦晶体在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市星源材质科技股份有限公司2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "红相股份2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年罗顿发展营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "新华保险2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "应付职工薪酬的计提和支付对公司的现金流和员工满意度有何影响?", "intent": "专业名称解释"} +{"question": "诺普信2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析广东嘉元科技股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "根据2020年的年报数据,聆达集团股份有限公司的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "联盛化学在2021年的每股净资产具体是多少元?", "intent": "年报基础信息问答"} +{"question": "民德电子2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2021年新宏泽货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏安靠智能输电工程科技股份有限公司在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年度报告中,普洛药业股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "安联锐视2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "中国卫通2019年的企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "生益科技在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请问,索菲亚在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "请问上海中谷物流股份有限公司在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "广东嘉元科技股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "所得税费用的变动如何影响公司的税务成本和净利润?", "intent": "专业名称解释"} +{"question": "请提供2020年航天工程的利润总额,以元为单位。", "intent": "年报基础信息问答"} +{"question": "2021年安徽艾可蓝环保股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年阳煤化工营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,北京市博汇科技股份有限公司在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年江苏蔚蓝锂芯股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是应收票据?", "intent": "专业名称解释"} +{"question": "2019年奥福环保的企业研发经费与营业收入比值是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "棕榈股份2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "北京燕京啤酒股份有限公司2021年年报数据中,应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "东方园林2021年的总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "特发服务2021年的净利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "依据2020年的财务数据,科大讯飞的资产负债比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏国泰2021年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年佛塑科技的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "亚钾国际2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,和邦生物在2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "科达制造在2021年每股经营现金流量为多少元?", "intent": "年报基础信息问答"} +{"question": "康恩贝2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年丽江股份的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,兰生股份的企业硕士及以上人员占职工人数的比例是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,浙江东日的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年招商蛇口的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年金石资源集团股份有限公司投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北京汉邦高科数字技术股份有限公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年迪瑞医疗收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是借款费用?", "intent": "专业名称解释"} +{"question": "请问,至正股份2021年年报中,公司的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年广发证券股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "美康生物科技股份有限公司2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年熊猫乳品毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "国药现代2019年年报中企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,永创智能企业的硕士及以上学历人员占职工人数的比例是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "远兴能源在2020年的财务费用增长率是多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "在2021年,袁隆平农业高科技股份有限公司的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年厦门弘信电子科技集团股份有限公司的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "深圳市铂科新材料股份有限公司2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "创业黑马在2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "汤臣倍健股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中信海直在2019年的投资收益占营业收入比率是多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "2021年襄阳轴承的期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "南华期货股份有限公司在2020年的利息支出和利息收入具体数额是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是长期资产减值?", "intent": "专业名称解释"} +{"question": "2019年潍柴动力外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "苏州易德龙科技股份有限公司2019年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "福龙马在2019年的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的财报,新日股份的流动负债比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年新亚制程(浙江)股份有限公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "上海新动力汽车科技股份有限公司2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "厦门空港在2019年的流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中国巨石股份有限公司投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "纵横自动化技术股份有限公司在2020年的流动比率是多少,结果需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年中国农业银行股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海目星2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "金信诺2021年的无形资产增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "中超控股2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年华铭智能销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年洛阳栾川钼业集团股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年哈尔滨工大高新技术产业开发股份有限公司货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "湛江国联水产开发股份有限公司2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年青岛农村商业银行股份有限公司利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "晶瑞电子材料股份有限公司2019年的企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国东航2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年海南京粮控股股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "河南仕佳光子科技股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,南华生物的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "兴源环境2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年华策影视销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年长春一汽富维汽车零部件股份有限公司的销售费用和管理费用分别有多少元?", "intent": "年报基础信息问答"} +{"question": "华盛昌2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天臣国际医疗科技股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析广东奥飞数据科技股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "上海外高桥集团股份有限公司2020年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "哈投股份2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年奥联电子固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏太平洋精锻科技股份有限公司2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "南凌科技股份有限公司在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "桂林三金在2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年津药药业职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年新通联毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "湖南郴电国际发展股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年晶方科技证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "福建坤彩材料科技股份有限公司2021年报中,公司董事、监事、高级管理人员年龄分布情况如何?", "intent": "报告解读分析"} +{"question": "南京云海特种金属股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年江苏雷科防务科技股份有限公司的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年芜湖长信科技股份有限公司资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供海能实业在2019年的企业研发经费与利润比值,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年恒银金融科技股份有限公司研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "重庆涪陵电力实业股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "奥泰生物2020年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是利润表?", "intent": "专业名称解释"} +{"question": "西部超导2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析绍兴贝斯美化工股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "2021年西宁特殊钢股份有限公司的货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年青云科技的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,江西九丰能源股份有限公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是股东权益?", "intent": "专业名称解释"} +{"question": "重庆三峰环境集团股份有限公司2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年电科芯片企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析广东鸿图科技股份有限公司2021年行业情况。", "intent": "报告解读分析"} +{"question": "请问,2020年上海电影的净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据上海家化联合股份有限公司2019年的年度报告,请简要分析该公司投资收益变动的原因是什么?", "intent": "报告解读分析"} +{"question": "北京捷成世纪科技股份有限公司在2021年收到的投资回收现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年蓝星安迪苏股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年东方电气利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市德赛电池科技股份有限公司电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "大唐高鸿网络股份有限公司在2021年的研发费用增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳中华自行车(集团)股份有限公司固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "格科微2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "长期股权投资是指什么?", "intent": "专业名称解释"} +{"question": "宁波旭升集团股份有限公司在2019年的企业研发经费与利润比值是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年江苏连云港港口股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年云南恩捷新材料股份有限公司营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "建设银行2021年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年固德威资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,青岛银行股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "陕西黑猫焦化股份有限公司2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年皖通高速的年报,请简要介绍报告期内公司环境信息情况。", "intent": "报告解读分析"} +{"question": "请提供2020年大参林医药集团股份有限公司的销售费用,以元为单位。", "intent": "年报基础信息问答"} +{"question": "从2019年到2020年,九阳股份的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "在2019年,古越龙山的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年唐山三友化工股份有限公司营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年年报数据,信濠光电的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年山东东宏管业股份有限公司的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市新城市规划建筑设计股份有限公司2021年的总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2019年熊猫乳品的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "中科微至科技股份有限公司在2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "资本公积金和盈余公积金对公司的股东权益和财务灵活性有何影响?", "intent": "专业名称解释"} +{"question": "请简要分析广东金明精机股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "北京星网宇达科技股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "青岛德固特节能装备股份有限公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析天宸股份2020年主要销售客户的情况。", "intent": "报告解读分析"} +{"question": "应收账款的坏账和逾期对公司的现金流和收款周期有何影响?", "intent": "专业名称解释"} +{"question": "上海同达创业投资股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年众业达研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "利君股份2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "内蒙古电投能源股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "陇神戎发在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "我想知道2020年大叶股份的综合收益总额是多少?", "intent": "年报基础信息问答"} +{"question": "2021年赛福天研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年,明泰铝业管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "概伦电子在2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江省围海建设集团股份有限公司2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "宏辉果蔬股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "在2019年,吉比特企业的研发经费与利润比值是多少(保留到小数点后两位)?", "intent": "财务指标计算"} +{"question": "五粮液在2020年的研发费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年,江苏润和软件股份有限公司营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "芒果超媒股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是归属于少数股东的综合收益总额?", "intent": "专业名称解释"} +{"question": "贵研铂业股份有限公司2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "江南奕帆2019年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年君实生物职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年成都欧林生物科技股份有限公司的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年光力科技股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年花园生物的年报,企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "请查询并提供广州越秀资本控股集团股份有限公司在2019年的利息收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "山西杏花村汾酒厂股份有限公司在2020年的财务费用增长率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "湖南黄金股份有限公司2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "什么是预收款项?", "intent": "专业名称解释"} +{"question": "2021年长虹华意衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中牧股份2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "博济医药科技股份有限公司在2021年的固定资产值是多少元?", "intent": "年报基础信息问答"} +{"question": "管理费用对公司的经营效率和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "2021年宁夏中银绒业股份有限公司的无形资产增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年淳中科技的财务费用率是多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是实收资本(或股本)?", "intent": "专业名称解释"} +{"question": "2021年星徽股份固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年北京首创生态环保集团股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "应付票据和应付账款的管理对公司的现金流和供应商关系有何影响?", "intent": "专业名称解释"} +{"question": "广哈通信2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "中铝国际工程股份有限公司2021年法定代表人对比2020年是否相同?", "intent": "统计对比分析"} +{"question": "2019年宇通重工的营业成本率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "横店集团东磁股份有限公司2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "天地源2020年的流动负债比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年的年报数据,东百集团的毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "湖南华联瓷业股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中船科技股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广誉远在2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "重庆正川医药包装材料股份有限公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "璞泰来2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年亿晶光电的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门信达2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏苏盐井神股份有限公司2020年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问盐津铺子食品股份有限公司在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "上海开创国际海洋资源股份有限公司2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年三诺生物传感股份有限公司硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,浙江嘉益保温科技股份有限公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "宁波博汇化工科技股份有限公司在2021年的货币资金总额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年盈建科的净利润增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年晋控电力现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "惠泰医疗2021年年报数据中,每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供蓝思科技股份有限公司在2021年的负债合计,单位为元。", "intent": "年报基础信息问答"} +{"question": "2019年合肥城建发展股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "保定乐凯新材料股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "太钢不锈2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供浙商中拓2021年的无形资产增长率,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年睿创微纳硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "江苏舜天股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳四方精创资讯股份有限公司在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "厦门厦工机械股份有限公司在2021年的研发费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "智度股份2021年的应付职工薪酬金额是多少元?", "intent": "年报基础信息问答"} +{"question": "健民药业集团股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海复洁环保科技股份有限公司的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "深南电路股份有限公司2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年上海雅仕的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "镇江东方电热科技股份有限公司2021年的货币资金增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "深圳市汇川技术股份有限公司在2020年的研发费用增长率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "浙江盛洋科技股份有限公司2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市今天国际物流技术股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年江苏银行的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中农联合在2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "奥泰生物2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中公教育科技股份有限公司的营业成本率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年中化岩土集团股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京万泰生物药业股份有限公司在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请根据江化微2019年的年报,简要介绍报告期内公司主要供应商情况如何", "intent": "报告解读分析"} +{"question": "财务报表分析中,如何计算净利润率?", "intent": "专业名称解释"} +{"question": "请问,2021年赤峰吉隆黄金矿业股份有限公司的营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "豫园股份在2019年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,华恒生物在2021年的营业利润增长率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "2019年浙江世宝三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江正裕工业股份有限公司在2020年的资产负债比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "天津普林在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年国光连锁的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请查询,江苏金租在2020年度支出的利息总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深南股份销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江日发精密机械股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年博硕科技的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州银行在2019年的企业硕士及以上人员占职工人数比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "天津长荣科技集团股份有限公司2020年的现金比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报数据,山东鲁抗医药股份有限公司的2020年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安徽安利材料科技股份有限公司2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年江南水务利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "所得税费用的计算方法和影响因素有哪些?", "intent": "专业名称解释"} +{"question": "北大荒在2019年的三费比重是多少?答案需要保留小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年中国重汽集团济南卡车股份有限公司的企业研发经费占费用比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "请根据安徽神剑新材料股份有限公司2021年的年报,给我简要介绍一下报告期内公司的环境信息情况", "intent": "报告解读分析"} +{"question": "北京沃尔德金刚石工具股份有限公司2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "冠城大通2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年一拖股份的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是财务指标?", "intent": "专业名称解释"} +{"question": "什么是固定资产周转率?", "intent": "专业名称解释"} +{"question": "无锡祥生医疗科技股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年菲利华办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年信雅达企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "钢研高纳2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "法兰泰克2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市瑞丰光电子股份有限公司在2021年收回的投资所得现金是多少元?", "intent": "年报基础信息问答"} +{"question": "远东传动在2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "弘宇股份2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "南京盛航海运股份有限公司2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "无锡线上线下通讯信息技术股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中葡股份货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "侨银股份2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "菲利华企业2019年的研发经费与利润比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年安徽广信农化股份有限公司应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "南京公用发展股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2021年宜宾纸业股份有限公司营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年上海维宏电子科技股份有限公司硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "怡亚通在2019年的企业研发经费与利润的比值是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "凯迪股份2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏恒立液压股份有限公司2021年的营业收入增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "红旗连锁2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海浦东发展银行股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年东方电子衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请计算2020年宏润建设的流动负债比率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "在2021年,上海天玑科技股份有限公司的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年新致软件收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深圳市奥拓电子股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广日股份2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年新澳股份的企业研发经费与利润的比值是多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "杭电股份2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,金钼股份技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年平治信息的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "申通快递2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "我能知道江苏江阴农村商业银行股份有限公司在2021年的利息支出和利息收入是多少元么?", "intent": "年报基础信息问答"} +{"question": "2019年金田股份的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "2021年中衡设计收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "广州通达汽车电气股份有限公司在2020年的营业外收入是多少?", "intent": "年报基础信息问答"} +{"question": "新华百货2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市正弦电气股份有限公司2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山东高速现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年安徽铜峰电子股份有限公司的每股净资产值为多少元?", "intent": "年报基础信息问答"} +{"question": "根据同花顺2019年的年度报告,请简要分析公司营业收入构成的整体情况。", "intent": "报告解读分析"} +{"question": "2020年苏州赛伍应用技术股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中国医药健康产业股份有限公司在2020年的资产负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请提供博力威2021年的营业利润增长率,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "鸿合科技2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年浙江跃岭股份有限公司办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年,广东锦龙发展股份有限公司的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "广东鸿图2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请根据北大荒2020年的年报,简要介绍报告期内公司的社会责任工作情况。", "intent": "报告解读分析"} +{"question": "2019年国机重装企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "宏发科技股份有限公司在2021年的投资收益增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年科华数据股份有限公司现金及现金等价物增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年晨曦航空每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "永和智控在2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "2019年青岛汇金通电力设备股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年艾隆科技营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年江苏张家港农村商业银行股份有限公司的利息支出和利息收入分别为多少元?", "intent": "年报基础信息问答"} +{"question": "顺丰控股在2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年的年报,瑞联新材的营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年博深股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年科林环保装备股份有限公司投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年国盛金融控股集团股份有限公司利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年天目湖收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "茂硕电源科技股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "广东中南钢铁股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年温氏股份利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年南京化纤的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "什么是自由现金流量?", "intent": "专业名称解释"} +{"question": "什么是销售费用?", "intent": "专业名称解释"} +{"question": "锋尚文化集团股份有限公司2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "邮储银行2020年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年大连百傲化学股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "使用权资产的定义是什么?", "intent": "专业名称解释"} +{"question": "根据2019年安科瑞的年报,请简要介绍报告期内公司主要销售客户客户集中度如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "2021年光一科技无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "振华重工在2019年的企业研发经费占总费用的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "新媒股份2020年的企业硕士及以上人员占职工人数的比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要分析哈尔滨东安汽车动力股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "2019年深圳市卫光生物制品股份有限公司营业成本率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供力合科技(湖南)股份有限公司2019年的研发经费与利润比值,保留两位小数。", "intent": "财务指标计算"} +{"question": "请提供上海汽车集团股份有限公司在2019年的利息收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "祥生医疗在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年江苏恒顺醋业股份有限公司流动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年重庆港股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "可立克2019年的投资收益占营业收入的比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年飞亚达管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年新亚强职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2019年张江高科企业硕士及以上人员占职工人数的比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "方直科技2019年办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "陕西煤业在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "建发合诚2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2021年洲明科技的应收款项融资,以元为单位。", "intent": "年报基础信息问答"} +{"question": "2020年天水华天科技股份有限公司研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年立方数科股份有限公司的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "长春欧亚集团股份有限公司在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏常熟汽饰集团股份有限公司2021年的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "空港股份2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问科华生物在2021年的固定资产增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年大龙地产毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年天禄科技每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江新光药业股份有限公司流动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "贵州三力2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年凯撒(中国)文化股份有限公司固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "四川东材科技集团股份有限公司2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广州毅昌科技股份有限公司在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江阴市恒润重工股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年年报数据,安徽黄山胶囊股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "三丰智能装备集团股份有限公司2021年归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年超讯通信股份有限公司的营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年锦州港的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "莱宝高科2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江大东南股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "无形资产的计量和摊销方法对公司的资产质量和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "2021年深圳翰宇药业股份有限公司其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江三星新材股份有限公司2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2020年深圳市雄韬电源科技股份有限公司的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析金河生物科技股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "请简要分析浙江一鸣食品股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "四川九洲电器股份有限公司在2021年实现的营业利润为多少元?", "intent": "年报基础信息问答"} +{"question": "2021年星光农机股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山东双一科技股份有限公司2020年年报中所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年恒帅股份的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年百花医药资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "优德精密工业(昆山)股份有限公司在2021年的资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "亿纬锂能在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "新疆火炬燃气股份有限公司2020年的财务费用增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "恒大高新2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "三联虹普在2021年的总负债增长率是多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "常州祥明智能动力股份有限公司在2021年的每股收益和每股净资产各为多少元?", "intent": "年报基础信息问答"} +{"question": "百克生物2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,正海生物在2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "元祖股份在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "大唐电信在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年纽威数控资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年晋西车轴股份有限公司年报中管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "公允价值变动收益如何反映公司资产价值的变化和风险敞口?", "intent": "专业名称解释"} +{"question": "2021年西藏奇正藏药股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年华菱钢铁投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年广州发展集团股份有限公司企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "浙江京新药业股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "宋都股份2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "招商局蛇口工业区控股股份有限公司2020年的速动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请提供2020年福建永福电力设计股份有限公司的管理费用增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "安徽辉隆农资集团股份有限公司2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "湖南凯美特气体股份有限公司在2021年的流动负债增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年广东电声市场营销股份有限公司的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年电科院的法定代表人姓名。", "intent": "年报基础信息问答"} +{"question": "2021年深圳文科园林股份有限公司的现金及现金等价物增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "哈工智能2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "信达地产股份有限公司2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳市铭利达精密技术股份有限公司每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中颖电子三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海韦尔半导体股份有限公司在2019年的企业研发经费与营业收入的比值为多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "什么是非流动负债?", "intent": "专业名称解释"} +{"question": "请告诉我汉威科技集团股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "幸福蓝海在2019年的毛利率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中国人寿的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "苏州瑞玛精密工业股份有限公司2019-2021年的法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "2021年金明精机销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中体产业集团股份有限公司2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "可靠股份2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是记账本位币?", "intent": "专业名称解释"} +{"question": "江苏海力风电设备科技股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "能否告诉我华仁药业股份有限公司在2020年销售费用和管理费用的具体数额是多少元?", "intent": "年报基础信息问答"} +{"question": "凯乐科技2021年的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "美康生物在2021年的流动负债增长率约为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年沈阳远大智能工业集团股份有限公司营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是资本成本?如何计算?", "intent": "专业名称解释"} +{"question": "2021年深圳市科思科技股份有限公司的营业利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要分析湖北菲利华石英玻璃股份有限公司2020年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "什么是外币业务和外币报表折算?", "intent": "专业名称解释"} +{"question": "福龙马集团股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "中海达2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广东联泰环保股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "阳普医疗2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "地素时尚股份有限公司在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "新开普2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年罗普特科技集团股份有限公司营业利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "元成环境股份有限公司在2020年的营业税金及附加费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年苏州科德教育科技股份有限公司应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "金徽酒股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "北京同有飞骥科技股份有限公司2020年的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年昆山科森科技股份有限公司总负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年悦康药业集团股份有限公司营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "为什么资产减值损失会导致财务报表中的利润下降?", "intent": "专业名称解释"} +{"question": "能否简要分析一下,根据2019年云南铝业股份有限公司的年报,报告期内公司重大股权投资的情况?", "intent": "报告解读分析"} +{"question": "请提供2020年山东得利斯食品股份有限公司的综合收益总额,单位为元。", "intent": "年报基础信息问答"} +{"question": "2019年安科瑞电气股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问2019年重庆路桥股份有限公司的英文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析山东联创产业发展集团股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "河南翔宇医疗设备股份有限公司2021年的营业利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年保利发展的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "海格通信2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年浙江华达新型材料股份有限公司的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2021年福达合金材料股份有限公司每股净资产的金额。", "intent": "年报基础信息问答"} +{"question": "江苏安靠智能输电工程科技股份有限公司在2019年至2021年期间,法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "根据2019年年报数据,海峡股份的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "陕西煤业2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市海普瑞药业集团股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "航天机电2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市沃特新材料股份有限公司2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "陕西黑猫2019年管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "大唐国际发电股份有限公司2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "无形资产的计量和摊销对公司的价值创造和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "2021年北汽蓝谷新能源科技股份有限公司每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "我武生物2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报数据,常宝股份所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "宏昌电子材料股份有限公司在2020年的资产负债比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年,山东新能泰山发电股份有限公司的速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "株洲宏达电子股份有限公司2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "盛达资源2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问安徽华茂纺织股份有限公司在2020年的资产负债比率是多少?数值请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "绿盟科技集团股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "顺发恒业股份公司的法定代表人在2019-2021年间是否都相同?", "intent": "统计对比分析"} +{"question": "2019年中远海运能源运输股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年宁夏青龙管业集团股份有限公司的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "震有科技在2021年的营业收入增长率约为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年太钢不锈的流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "志邦家居在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "贵阳朗玛信息技术股份有限公司在2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,大唐发电在2019年的三费比重是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏汇鸿国际集团股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "洽洽食品2019年办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "根据2020年卓朗科技的年报,请简要介绍报告期内公司的现金比率的情况,保留2位小数。", "intent": "财务指标计算"} +{"question": "神州数码信息服务股份有限公司2019年年报中注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年中科金财非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "常州神力电机股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是经营活动产生的现金流量?", "intent": "专业名称解释"} +{"question": "同飞股份在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "九有股份在2020年的管理费用增长率是多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "浙江盾安人工环境股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "在2021年,汉缆股份的衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "从2021年的年报数据可知,北京银行的总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "雪人股份2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年红塔证券利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,圣元环保股份有限公司的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "倍加洁集团股份有限公司2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年安徽安孚电池科技股份有限公司的非流动负债比率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "你能告诉我银河微电2021年营业利润增长率的数据吗?记得要保留两位小数。", "intent": "财务指标计算"} +{"question": "苏州固锝2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报,香农芯创科技股份有限公司的净利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年国联股份证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "当升科技在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2019年民生控股股份有限公司固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "渝三峡2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深信服的企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "国风新材2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年上海钢联电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "应收款项融资是什么意思?", "intent": "专业名称解释"} +{"question": "请问2019年利扬芯片的研发费用以及财务费用分别为多少元?", "intent": "年报基础信息问答"} +{"question": "2019年北京君正集成电路股份有限公司注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "什么是市盈率?如何计算?", "intent": "专业名称解释"} +{"question": "木林森股份有限公司在2021年的总资产增长率是多少,精确到小数点后两位?", "intent": "财务指标计算"} +{"question": "2021年苏州富士莱医药股份有限公司每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "万顺新材在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中航工业机电系统股份有限公司法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "恒瑞医药2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "应交税费的管理对公司的财务状况和税务合规性有何影响?", "intent": "专业名称解释"} +{"question": "北京久其软件股份有限公司在2020年的净利润率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "天水华天科技股份有限公司在2020年对联营企业和合营企业的投资收益金额是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是存货?", "intent": "专业名称解释"} +{"question": "汇洁股份在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中兵红箭管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "景嘉微在2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "融捷健康2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是综合收益总额?", "intent": "专业名称解释"} +{"question": "2019年天津天保基建股份有限公司投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年唐山冀东水泥股份有限公司每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "其他应收款的分类和计提规则如何影响公司的资金回收和风险控制?", "intent": "专业名称解释"} +{"question": "2020年苏交科集团股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年本钢板材股份有限公司每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "北京文化2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广西柳药集团股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "奥士康科技股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中信银行股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年华测导航的管理费用增长率是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "2019年神马实业股份有限公司研发人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "京沪高速铁路股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "什么是应收账款?", "intent": "专业名称解释"} +{"question": "科蓝软件2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海新朋实业股份有限公司2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "华安鑫创2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长城汽车2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "陕西黑猫焦化股份有限公司2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏润邦重工股份有限公司2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门信达股份有限公司2021年的固定资产增长率是多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年神驰机电股份有限公司研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供保龄宝生物股份有限公司在2021年的衍生金融资产,单位为元。", "intent": "年报基础信息问答"} +{"question": "什么是营业收入?", "intent": "专业名称解释"} +{"question": "什么是合同负债?", "intent": "专业名称解释"} +{"question": "根据2020年雪龙集团的年报,请简要介绍报告期内公司的环保信息情况。", "intent": "报告解读分析"} +{"question": "飞天诚信2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北京神州细胞生物技术集团股份公司营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年金龙羽的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深圳市劲拓自动化设备股份有限公司的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山西证券的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年第一创业证券股份有限公司企业硕士及以上人员占职工人数比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "应交税费的管理对公司的税务合规性和财务稳定性有何影响?", "intent": "专业名称解释"} +{"question": "远程股份在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年广东松发陶瓷股份有限公司的固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年大龙地产的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年红蜻蜓其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "华凯易佰科技股份有限公司2019年的硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年圆通速递货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "集智股份在2019年的企业研发经费与营业收入比值是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "合肥江航飞机装备股份有限公司2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年苏州新锐合金工具股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年奥海科技的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "东软载波2019年的法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "浙江精工集成科技股份有限公司2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年毅昌科技的销售费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "珈伟新能2021年的流动负债增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年桂林旅游股份有限公司职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "中国建筑股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年电科芯片的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "镇海石化工程股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年金瑞矿业的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "海宁中国皮革城股份有限公司2019年的毛利率是多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年同兴达管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年易事特集团股份有限公司技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "延江股份2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "江西国泰集团股份有限公司在2019年的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是研发费用?", "intent": "专业名称解释"} +{"question": "2021年浩云科技归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年聚赛龙的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "佩蒂动物营养科技股份有限公司在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中简科技股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "佐力药业2020年营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽鑫铂铝业股份有限公司在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,中通国脉通信股份有限公司的流动负债比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "广东乐心医疗电子股份有限公司2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,在2019-2021年间,电科院的法定代表人是否都是相同的情况?", "intent": "统计对比分析"} +{"question": "2019年绿色动力环保集团股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "上海机场2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "什么是应付债券?", "intent": "专业名称解释"} +{"question": "企业会计准则的定义是什么?", "intent": "专业名称解释"} +{"question": "2020年大族激光对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是预计负债?", "intent": "专业名称解释"} +{"question": "2021年小熊电器股份有限公司每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年开能健康科技集团股份有限公司的其他非流动金融资产具体金额是多少元?", "intent": "年报基础信息问答"} +{"question": "腾龙股份2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析南京万德斯环保科技股份有限公司2020年公司地位的情况。", "intent": "报告解读分析"} +{"question": "2019年苏垦农发营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年江苏宝利国际投资股份有限公司无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市美芝装饰设计工程股份有限公司无形资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年年报数据,神工股份的净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天圣制药在2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "石头科技2021年的归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,天宇股份的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年中,北京神州细胞生物技术集团股份公司的营业利润增长率是多少,结果请保留两位小数?", "intent": "财务指标计算"} +{"question": "百合花集团股份有限公司在2020年的营业利润率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "四川路桥建设集团股份有限公司2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "为什么财务费用可以是负的?", "intent": "专业名称解释"} +{"question": "南大光电在2021年的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2019年,中国银河企业中硕士及以上人员占职工人数的比例是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年北京飞利信科技股份有限公司的企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "长白山2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2019年南宁糖业研发人员占总职工人数的比例是多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "2019年宇通重工营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广东宏大控股集团股份有限公司2020年的营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海默科技(集团)股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年动力源期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "澳弘电子在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "请问齐鲁银行在2019年的投资收益占营业收入的比率是多少,结果需要保留两位小数。", "intent": "财务指标计算"} +{"question": "虹软科技股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年星辉环保材料股份有限公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江丰电子在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年杭州华光焊接新材料股份有限公司货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "康泰医学系统(秦皇岛)股份有限公司2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "武汉控股在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析杭州园林设计院股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "什么是投资活动产生的现金流量?", "intent": "专业名称解释"} +{"question": "七匹狼2019年博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "成都旭光电子股份有限公司2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年陇神戎发企业的研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山东英科环保再生资源股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "请问2019年亿帆医药股份有限公司的电子邮箱是什么?", "intent": "年报基础信息问答"} +{"question": "2020年学大(厦门)教育科技集团股份有限公司销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江新化化工股份有限公司2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年恒基达鑫固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "其他重要的会计政策和会计估计是什么?", "intent": "专业名称解释"} +{"question": "金富科技2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "固定资产的折旧政策和计提方法如何影响公司的财务状况和盈利能力?", "intent": "专业名称解释"} +{"question": "根据兴业皮革科技股份有限公司2020年的年报,速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "龙佰集团股份有限公司在2019年的管理费用率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "康希诺生物股份公司2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "赛象科技2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年鞍重股份的年报,该报告期内公司的财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海新世界股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "请问,福建水泥股份有限公司2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2021年中科金财的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,喜临门2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年一鸣食品营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析关于爱普股份2021年主营业务分析中利润表及现金流量表基本信息及变动情况。", "intent": "报告解读分析"} +{"question": "新风光电子科技股份有限公司在2021年的净利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年长江投资研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "泰慕士在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "三盛教育2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,杭州微光电子股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "浙江中胤时尚股份有限公司2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年年报数据,中粮糖业控股股份有限公司的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "北京京运通科技股份有限公司2020年报中,公司董事、监事、高级管理人员变动情况如何?", "intent": "报告解读分析"} +{"question": "宝山钢铁股份有限公司在2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "利和兴在2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年澳柯玛股份有限公司的流动负债比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "南华期货股份有限公司2020年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年焦点科技营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海爱婴室商务服务股份有限公司2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "财务费用的变动如何影响公司的财务成本和债务风险?", "intent": "专业名称解释"} +{"question": "2021年北京科锐配电自动化股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "回盛生物2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "隆利科技2019年的投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年深圳市力合科创股份有限公司的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "北京歌华有线电视网络股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供中国重汽集团济南卡车股份有限公司2019年的注册地址。", "intent": "年报基础信息问答"} +{"question": "在2019年,江苏蔚蓝锂芯股份有限公司的营业成本率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "重庆宗申动力机械股份有限公司在2020年的法定代表人是否是相同的?", "intent": "统计对比分析"} +{"question": "鹏辉能源在2020年的非流动负债比率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "安正时尚集团股份有限公司在2019年的企业研发经费与利润比值为多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "请问,威腾电气集团股份有限公司在2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请问中简科技股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请告诉我2021年四川迅游网络科技股份有限公司的总负债增长率,需保留2位小数。", "intent": "财务指标计算"} +{"question": "森林包装2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深圳市朗科科技股份有限公司营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "新劲刚2021年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "负债率高和低分别代表什么?", "intent": "专业名称解释"} +{"question": "2020年,江苏本川智能电路科技股份有限公司营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年扬州晨化新材料股份有限公司资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年威龙葡萄酒股份有限公司流动负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "欢乐家2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "中煤新集能源股份有限公司2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "金达莱2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,华钰矿业收回的投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年日盈电子应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "上海三毛企业(集团)股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年天康生物股份有限公司非流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "福莱特玻璃集团股份有限公司在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "洛阳建龙微纳新材料股份有限公司2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年浙江浙能电力股份有限公司衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报,四川川大智胜软件股份有限公司的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "甘源食品在2020年的营业税金及附加总额是多少元?", "intent": "年报基础信息问答"} +{"question": "应收账款是指什么?", "intent": "专业名称解释"} +{"question": "在2021年,锐奇股份收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江金固股份有限公司在2021年的总资产增长率是多少,精确到小数点后两位?", "intent": "财务指标计算"} +{"question": "根据上海家化2019年的年度报告,请简要分析该公司核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "请提供佛山市金银河智能装备股份有限公司2020年的非流动负债比率,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "请问2021年依顿电子的固定资产增长率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年宇环数控机床股份有限公司的研发经费与利润的比值是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年佳创视讯净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年金财互联的财务费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "上海电气2019年利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市力合科创股份有限公司的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年蓝盾信息安全技术股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,河南百川畅银环保能源股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "浙江华媒控股股份有限公司2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江西日月明测控科技股份有限公司在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年苏州宝丽迪材料科技股份有限公司营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年莱绅通灵应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年金通灵科技集团股份有限公司的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "强力新材在2020年的财务费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年建科院净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "对比2020年,2021年海南京粮控股股份有限公司的法定代表人是否相同??", "intent": "统计对比分析"} +{"question": "金博股份2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "拉卡拉2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2019年的数据,苏州华兴源创科技股份有限公司的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年东鹏控股利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "盛美上海2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "中航电测仪器股份有限公司在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "对比2020年,2021年中远海运能源运输股份有限公司法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "视觉(中国)文化发展股份有限公司在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "能否提供2021年厦门象屿衍生金融资产和其他非流动金融资产的具体数额?", "intent": "年报基础信息问答"} +{"question": "公元股份有限公司2021年的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年海南矿业的财务费用率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是负债收益率?", "intent": "专业名称解释"} +{"question": "长期应收款的定义是什么?", "intent": "专业名称解释"} +{"question": "山东华泰纸业股份有限公司在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,在2019年中国神华的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "2021年中钢天源股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广州酒家集团股份有限公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年湖北祥源新材科技股份有限公司管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年赛隆药业集团股份有限公司无形资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年沈阳机床营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供贝瑞基因在2019年的企业研发经费与营业收入的比值,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年杭州银行股份有限公司利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是所得税费用?", "intent": "专业名称解释"} +{"question": "中天服务股份有限公司在2020年的销售费用增长率约为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "请提供2021年宏英智能的销售费用和管理费用,以元为单位。", "intent": "年报基础信息问答"} +{"question": "2019年,金力永磁的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "众生药业2021年年报数据中,货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中富通的财务费用增长率是多少,保留2位小数的形式给出?", "intent": "财务指标计算"} +{"question": "深圳市证通电子股份有限公司在2020年的非流动负债比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年上海华谊集团股份有限公司的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "财务费用的变动如何影响公司的财务成本和盈利能力?", "intent": "专业名称解释"} +{"question": "成都天奥电子股份有限公司在2021年的每股经营现金流量具体是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是流动比率?", "intent": "专业名称解释"} +{"question": "广东顺威精密塑料股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年哈药集团人民同泰医药股份有限公司的毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "其他重要的会计政策和会计估计是什么?", "intent": "专业名称解释"} +{"question": "2021年中原高速的投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "秦川物联2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海梅林2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年大悦城控股集团股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供广东榕泰公司2021年的净利润增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "亚钾国际投资(广州)股份有限公司在2021年的货币资金增长率为多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "广东海大集团股份有限公司在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "英科医疗科技股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "鼎胜新材2021年的总负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海国际机场股份有限公司在2020年的法定代表人是否与2019年相同?", "intent": "统计对比分析"} +{"question": "生物股份2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "查询一下,燕塘乳业2020年营业利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年蒙娜丽莎流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海欣股份2021年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中国交通建设股份有限公司注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请问宁波天龙电子股份有限公司在2021年的资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年金字火腿股份有限公司营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,山东豪迈机械科技股份有限公司的法定代表人在2019年是谁?", "intent": "年报基础信息问答"} +{"question": "请问,中铁装配在2020年的非流动负债比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "凯撒(中国)文化股份有限公司2021年年报数据中,其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "航天通信控股集团股份有限公司在2021年的总资产增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "对比2019年,2021年云南驰宏锌锗股份有限公司的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "根据2019年红宝丽的年报,请简要介绍报告期内公司主要供应商的情况如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "请问,龙利得在2021年的无形资产具体是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,凯莱英医药集团(天津)股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "浪莎股份2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深圳朗特智能控制股份有限公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,深圳华控赛格股份有限公司在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年景津装备股份有限公司营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "珠海润都制药股份有限公司在2019年的硕士员工人数是多少?", "intent": "年报基础信息问答"} +{"question": "九州通2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年国旅文化投资集团股份有限公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供上海市天宸股份有限公司2019年的毛利率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年,同庆楼餐饮股份有限公司的净利润增长率是多少,结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年大全能源的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "伊戈尔电气股份有限公司2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "浩欧博2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "江铃汽车股份有限公司2019年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "绿盟科技2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "新易盛2020年的现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "南京栖霞建设股份有限公司在2020年的销售费用增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请提供2019年五洲交通的职工总数。", "intent": "年报基础信息问答"} +{"question": "返利网数字科技股份有限公司在2019年的三费比重约为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年长城电工的流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供山鹰国际在2021年的总资产增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "圣阳股份在2020年的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "义翘神州2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江兆丰机电股份有限公司在2020年的利润总额是多少?", "intent": "年报基础信息问答"} +{"question": "中原证券2020年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年新疆雪峰科技(集团)股份有限公司研发费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "从2021年的年报数据可知,千味央厨期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "上海绿庭投资控股集团股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年安徽新华传媒股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市强瑞精密技术股份有限公司在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年北新集团建材股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "南通国盛智能科技集团股份有限公司2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年新益昌研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "广东生益科技股份有限公司2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "阳普医疗科技股份有限公司2019年的经营模式是怎样的?", "intent": "报告解读分析"} +{"question": "负债合计与资本结构之间的关系是什么?", "intent": "专业名称解释"} +{"question": "2021年粤泰股份营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "利亚德光电股份有限公司在2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "快意电梯股份有限公司在2019年的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "和邦生物2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报,超华科技的博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年博士眼镜连锁股份有限公司电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "请问天津海泰科技发展股份有限公司在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "粤水电2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年广州海鸥住宅工业股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年中国能建的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "杭可科技2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年天津天保基建股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "湖北五方光电股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年棕榈生态城镇发展股份有限公司投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳新星货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析广东嘉元科技股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "上海海利生物技术股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年威创股份所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广州天赐高新材料股份有限公司的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "贵绳股份2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "华锐风电科技(集团)股份有限公司2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中公教育科技股份有限公司营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "华恒生物2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年福能东方的无形资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年广东南方新媒体股份有限公司应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "国瓷材料在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "北京东方雨虹防水技术股份有限公司2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中农联合在2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年厦门市美亚柏科信息股份有限公司企业研发经费占费用比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年青岛蔚蓝生物股份有限公司固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年新余国科的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "根据2019年北陆药业的年报,请简要介绍报告期内公司主要销售客户客户集中度如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "请提供2019年金力永磁的固定资产和无形资产,单位为元。", "intent": "年报基础信息问答"} +{"question": "请简要分析中盐内蒙古化工股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "山西兰花科技创业股份有限公司2020年的财务费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要分析东莞勤上光电股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "2021年深圳市长方集团股份有限公司的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海昊海生物科技股份有限公司2019年的职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2020年的数据,湖北富邦科技股份有限公司的管理费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析温州意华接插件股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "盛视科技2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年绝味食品的年报,请简要介绍报告期内公司资产负债比率的情况,保留2位小数。", "intent": "财务指标计算"} +{"question": "预付款项的管理对公司的资金利用效率和供应链协调有何影响?", "intent": "专业名称解释"} +{"question": "2020年海王生物管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年深圳市崧盛电子股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽江淮汽车集团股份有限公司2021年的法定代表人相比2020年相不相同?", "intent": "统计对比分析"} +{"question": "东吴证券股份有限公司2021年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深圳市翔丰华科技股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年豪森股份的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年广田集团无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "烟台中宠食品股份有限公司2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年南京普天研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "宁波波导股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年苏州市味知香食品股份有限公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年上海新华传媒股份有限公司的营业利润率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年民德电子每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年江苏法尔胜股份有限公司管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "安道麦股份有限公司2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "河南四方达超硬材料股份有限公司在2019年的营业成本率是多少,需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "在2021年,广州酒家的固定资产增长率是多少?请以两位小数表示。", "intent": "财务指标计算"} +{"question": "厦门国贸2021年的总资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,2019年泰和新材集团股份有限公司的三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "顶固集创在2020年的速动比率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是债务融资?债务融资的优势和劣势有哪些?", "intent": "专业名称解释"} +{"question": "柏楚电子在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中金环境2020年的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "珠海英搏尔电气股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年天房发展的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年的年报数据,新疆国统管道股份有限公司的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年安纳达的法定代表人是否与2019年相同?", "intent": "统计对比分析"} +{"question": "请告知,英诺激光在2020年的管理费用为多少元?", "intent": "年报基础信息问答"} +{"question": "福建睿能科技股份有限公司在2019年的投资收益占营业收入比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "什么是盈余公积?", "intent": "专业名称解释"} +{"question": "2021年呈和科技营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长春一东离合器股份有限公司2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "睿能科技2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "金洲慈航集团股份有限公司2021年净利润增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "航宇科技2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "伟时电子2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "我想知道2021年丰乐种业的营业利润是多少元。", "intent": "年报基础信息问答"} +{"question": "2021年嘉寓股份总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2019年湖南投资集团股份有限公司的财务费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年杰瑞股份公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年度报告中,阳光照明的营业利润率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "深科达2020年的财务费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "北京东方雨虹防水技术股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年冰川网络销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供观想科技公司2021年的固定资产金额。", "intent": "年报基础信息问答"} +{"question": "福建高速在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "华新包装2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析益海嘉里金龙鱼粮油食品股份有限公司2020年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "拓斯达2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年上海大智慧股份有限公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年哈焊华通的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广州发展集团股份有限公司在2019年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年宜通世纪营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广东鸿图2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "根据山东出版传媒股份有限公司2020年年报,该报告期内公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "通用电梯在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "广东博力威科技股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门港务发展股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年森麒麟公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年太龙药业的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析广州珠江钢琴集团股份有限公司2021年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "2020年力合微的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "方大集团股份有限公司2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "陕鼓动力2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问在2021年,严牌股份的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年唐山冀东装备工程股份有限公司的年报,请简要介绍报告期内公司主要销售客户的客户集中度,并结合同行业情况进行分析。", "intent": "报告解读分析"} +{"question": "联创光电2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年常宝股份的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,爱克股份的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "首旅酒店在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "云意电气2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "煜邦电力在2021年的无形资产值达到了多少元?", "intent": "年报基础信息问答"} +{"question": "博迈科海洋工程股份有限公司2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "山东黄金2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "上海汉钟精机股份有限公司在2021年的投资收益增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "综合收益总额与归属于母公司所有者的综合收益总额之间的关系是什么?", "intent": "专业名称解释"} +{"question": "今天国际在2019年的注册地址位于哪里?", "intent": "年报基础信息问答"} +{"question": "博迈科2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏联环药业股份有限公司2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中信海洋直升机股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "四方光电2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "超讯通信股份有限公司2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年百奥泰的货币资金增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华邦健康2019年的毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,天舟文化在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "北京中迪投资股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是非经常性损益?", "intent": "专业名称解释"} +{"question": "利群商业集团股份有限公司2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年鼎胜新材期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江泰林生物技术股份有限公司在2020年的管理费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "信隆健康在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "天益医疗2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "佛燃能源集团股份有限公司在2019年的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年河南科迪乳业股份有限公司的现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海电气2021年法定代表人对比2020年是否相同?", "intent": "统计对比分析"} +{"question": "请问元利化学集团股份有限公司在2021年的每股收益和每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "兴森科技2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "恒盛能源2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "康斯特2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2021年,中利集团的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中芯国际集成电路制造有限公司2021年衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州天沃科技股份有限公司2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "神思电子在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年海特高新注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请简要介绍佛山市国星光电股份有限公司2021年非主营业务金额变化的原因是什么?", "intent": "报告解读分析"} +{"question": "2021年,传化智联股份有限公司的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏云意电气股份有限公司2019年办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年深水海纳水务集团股份有限公司利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中泰证券的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请查询申昊科技2021年其他非流动金融资产的具体数额,以元为单位。", "intent": "年报基础信息问答"} +{"question": "请简要分析浙江米奥兰特商务会展股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "2020年格林精密投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年南都物业营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年神开股份的销售费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "刚泰控股在2021年的总资产增长率是多少?请以两位小数表示。", "intent": "财务指标计算"} +{"question": "北京百普赛斯生物科技股份有限公司在2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年厦门象屿股份有限公司电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "南兴股份公司在2020年的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "沧州大化股份有限公司2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是资产周转率?如何计算资产周转率?", "intent": "专业名称解释"} +{"question": "金融工具是指什么?", "intent": "专业名称解释"} +{"question": "2021年重庆丰华(集团)股份有限公司负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "东沣科技集团股份有限公司2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年三江购物营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年龙韵股份无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "北京金自天正智能控制股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "合并财务报表的编制方法是什么?", "intent": "专业名称解释"} +{"question": "请查询龙蟠科技在2021年的投资收益增长率是多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年招商局公路网络科技控股股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "宁波先锋新材料股份有限公司在2021年的负债合计约为多少元?", "intent": "年报基础信息问答"} +{"question": "2021年陕国投利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "博威合金在2020年的流动比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "甘肃省敦煌种业集团股份有限公司在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中恒集团年报中职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2020年西部矿业主要供应商的情况如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "高德红外公司在2021年每股的经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年年报数据,湖北盛天网络技术股份有限公司的流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "招商轮船在2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "西部创业2021年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "安徽安科生物工程(集团)股份有限公司在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "秦川机床工具集团股份公司在2020年的资产负债比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2019年中国冶金科工股份有限公司的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年特变电工企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是应付股利?", "intent": "专业名称解释"} +{"question": "2020年金埔园林的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,宁波舟山港股份有限公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "文灿股份在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年科华控股股份有限公司的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "请简要分析文峰大世界连锁发展股份有限公司2020年公司股权激励计划、员工持股计划或其他员工激励措施的情况及其影响", "intent": "报告解读分析"} +{"question": "请问2019年中青旅控股股份有限公司的毛利率是多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "复旦张江2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供邮储银行2019年的管理费用率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年新疆汇嘉时代百货股份有限公司营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "昆药集团2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "惠泉啤酒2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,赛腾股份的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "张家港保税科技(集团)股份有限公司2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "中国高科集团股份有限公司在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "天津绿茵景观生态建设股份有限公司2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "商业城2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年高乐股份的营业收入增长率是多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年广州市浩洋电子股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年山西科新发展股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问鹏都农牧股份有限公司在2021年的衍生金融资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年天孚通信营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "金安国纪集团股份有限公司在2021年的总资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年三祥新材股份有限公司研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请分析湖南华凯文化创意股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "江苏新泉汽车饰件股份有限公司在2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "请简要分析昆明川金诺化工股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "请简要分析山东博汇纸业股份有限公司2021年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "请简要分析上海百联集团股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "2020年哈尔滨威帝电子股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年物产中大货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年围海股份营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是未分配利润?", "intent": "专业名称解释"} +{"question": "2019年桂冠电力的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年江苏三房巷聚材股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "道通科技2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年江西长运股份有限公司的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "山科智能2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "粤宏远2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年榕基软件流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国海诚2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是非流动资产?", "intent": "专业名称解释"} +{"question": "中船应急2021年的应收款项融资金额是多少元?", "intent": "年报基础信息问答"} +{"question": "中电兴发2021年的无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "福建省青山纸业股份有限公司在2019年的研发人员占职工人数比例是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "请问在2020年,浙江力诺流体控制科技股份有限公司的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年泰禾集团股份有限公司的营业收入增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供雷电微力公司2021年的负债合计金额。", "intent": "年报基础信息问答"} +{"question": "南京药石科技股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年建新股份办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "什么是毛利润?", "intent": "专业名称解释"} +{"question": "根据2019年的年报数据,新疆鑫泰天然气股份有限公司的毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天亿马在2021年的营业利润增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年元力股份营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市中装建设集团股份有限公司2021年的总负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "紫江企业2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "贵州茅台酒股份有限公司2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年菜百股份的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "美尔雅2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "企业的盈利能力和偿债能力之间有何关系?", "intent": "专业名称解释"} +{"question": "什么是固定资产?", "intent": "专业名称解释"} +{"question": "2019年吉电股份财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "我想了解2019年宁波东方电缆股份有限公司的企业研发经费占费用比例,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年神农科技总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "我想查询,2020年福田汽车的净利润率是多少?数据需保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "中微公司2019年企业硕士及以上人员占职工人数比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "宝山钢铁股份有限公司2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "长航凤凰2019年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏万林现代物流股份有限公司2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,益民集团的货币资金总额是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江恒威电池股份有限公司2020年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年青岛康普顿科技股份有限公司非流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年长春致远新能源装备股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江鼎力机械股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "瑞芯微2021年每股的净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "对比2020年,2021年亚普汽车部件股份有限公司的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "世纪天鸿在2021年的其他非流动金融资产的金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年汇绿生态营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "数字认证2019年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年天域生态营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "柳钢股份2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "上海宝信软件股份有限公司2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "海宁皮城2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "美瑞新材2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市新国都股份有限公司公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年宁波卡倍亿电气技术股份有限公司的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海龙韵文创科技集团股份有限公司营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长缆科技在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2020年赛力斯集团的发展战略及经营计划。", "intent": "报告解读分析"} +{"question": "请简要分析乐鑫信息科技(上海)股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "浙江盾安人工环境股份有限公司2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "振华股份2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,沪士电子股份有限公司的管理费用率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是租赁负债?", "intent": "专业名称解释"} +{"question": "山东丰元化学股份有限公司2020年的流动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要分析安徽德力日用玻璃股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "深圳清溢光电股份有限公司2019年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天通股份2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "孚日股份2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年华能国际研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问2020年的苏州麦迪斯顿医疗科技股份有限公司的研发费用有多少元?", "intent": "年报基础信息问答"} +{"question": "浙江金科汤姆猫文化产业股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "山东赫达公司在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年珠江钢琴营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年东江环保现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "双象股份在2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "2020年久量股份非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年贵航股份的年度报告,简要分析公司报告期内利润表及现金流量表相关科目情况及变化原因。", "intent": "报告解读分析"} +{"question": "请问,2020年比亚迪股份有限公司的对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "新化股份2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "力源信息在2021年的无形资产增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年海越能源的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "申达股份在2021年的现金及现金等价物增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "在2021年,常山药业的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析上海奕瑞光电子科技股份有限公司2020年公司地位的情况。", "intent": "报告解读分析"} +{"question": "营业收入的增长率如何衡量公司的市场竞争力和发展潜力?", "intent": "专业名称解释"} +{"question": "2019年广州广电运通金融电子股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供广州市品高软件股份有限公司2020年的营业外支出金额。", "intent": "年报基础信息问答"} +{"question": "2019年第一创业证券股份有限公司利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "葵花药业集团股份有限公司在2021年的流动负债增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,华荣股份收回投资所收到的现金数额是多少元?", "intent": "年报基础信息问答"} +{"question": "诚志股份有限公司2019年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "辽宁科隆精细化工股份有限公司2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供中谷物流在2020年的速动比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年中航机电的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,大富科技(安徽)股份有限公司的期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "贵阳新天药业股份有限公司2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江东方基因生物制品股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析海南矿业股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "晓鸣股份在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "宗申动力2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国人保2019年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中山华利实业集团股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "中信重工机械股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2019年冠捷电子科技股份有限公司硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "请提供兆易创新2019年的财务费用率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年嘉必优生物技术(武汉)股份有限公司现金及现金等价物增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "赛科希德2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年长高电新的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "张家港广大特材股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "浙江世纪华通集团股份有限公司2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年恒为科技企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中科软科技股份有限公司在2019年的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "神剑股份2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年正海磁材证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "在2021年,科沃斯机器人股份有限公司的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是资产负债表?", "intent": "专业名称解释"} +{"question": "北京博睿宏远数据科技股份有限公司2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "西安环球印务股份有限公司在2019年的研发人员占职工人数的比例保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "丰元股份2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "美好置业2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年北矿科技股份有限公司的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年青岛日辰食品股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "创耀科技在2021年的资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "渝农商行2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年的财报,稳健医疗用品股份有限公司的净利润增长率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "江苏中南建设集团股份有限公司在2021年的总负债增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年深圳市亚辉龙生物科技股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "您能告诉我航天信息2020年的净利润是多少元吗?", "intent": "年报基础信息问答"} +{"question": "上海姚记科技股份有限公司2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年珠海博杰电子股份有限公司的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,江苏安靠智能输电工程科技股份有限公司行业的发展情况及公司所处行业地位如何?", "intent": "报告解读分析"} +{"question": "深天地2021年期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问山东海化股份有限公司在2019年的注册地址是哪里?", "intent": "年报基础信息问答"} +{"question": "请问西安康拓医疗技术股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2019年唐山冀东装备工程股份有限公司的年报主要供应商的情况如何。", "intent": "报告解读分析"} +{"question": "品渥食品在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "银龙股份2021年归属母公司所有者的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年同花顺的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "南京普天通信股份有限公司2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "华电国际电力股份有限公司2021年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "2020年德石股份营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中国国际金融股份有限公司利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "长航凤凰股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2019年南亚新材料科技股份有限公司营业成本率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是营业外收入?", "intent": "专业名称解释"} +{"question": "请问,深圳顺络电子股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "请问在2021年,星球石墨的营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "津药药业在2019年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2021年,深圳市飞荣达科技股份有限公司的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年骆驼集团股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "金丹科技在2019年的企业研发经费占费用的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "江苏捷捷微电子股份有限公司2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,阿尔特汽车技术股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "新余钢铁股份有限公司在2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "广州华立科技股份有限公司2020年的营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "国邦医药2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年莱尔科技公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供新疆浩源天然气股份有限公司2021年的无形资产金额为多少元?", "intent": "年报基础信息问答"} +{"question": "开勒股份2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "立讯精密在2020年的速动比率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "根据2021年的财报数据,厦华电子的货币资金增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问闻泰科技在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "卫星化学股份有限公司在2019年的研发人员占职工人数比例为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年,无锡双象超纤材料股份有限公司研发人员所占的职工人数比例是多少?结果保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年中煤能源投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年海峡环保公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "苏州苏大维格科技集团股份有限公司在2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是货币资金?", "intent": "专业名称解释"} +{"question": "安徽铜冠铜箔集团股份有限公司2020年的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年新元科技其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,泛海控股股份有限公司的固定资产增长率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,上海农村商业银行股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年方大集团营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年山大地纬博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年欣贺股份应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "双星新材2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中光学综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年信捷电气营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北京高盟新材料股份有限公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请问海尔智家股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "海德股份2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年新澳股份的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "在2021年,凯盛科技的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "凯尔达2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年龙源电力集团股份有限公司的净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "博瑞医药2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "大庆华科在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年江苏锦鸡实业股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "大北农在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "对比2020年,2021年天银机电的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "2021年重庆再升科技股份有限公司每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年内蒙古伊利实业集团股份有限公司衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,苏州绿的谐波传动科技股份有限公司的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年,山煤国际能源集团股份有限公司的管理费用增长率是多少(保留到小数点后两位)?", "intent": "财务指标计算"} +{"question": "中国人民保险集团股份有限公司2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "英联股份2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "璞泰来2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报,安必平的营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "泸州老窖2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年南宁百货的毛利率,精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "浙江核新同花顺网络信息股份有限公司在2019年的营业成本率是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2020年哈森股份管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,多伦科技的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "企业如何确定资产减值损失?", "intent": "专业名称解释"} +{"question": "金融街2021年的现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "海伦钢琴2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年深圳市优博讯科技股份有限公司年报中电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "中粮生物科技股份有限公司在2021年的衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年元力股份的营业成本率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "庄园牧场2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析山东三维石化工程股份有限公司2019年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "2020年慈星股份研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报数据,中电科数字技术股份有限公司的速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长沙银行股份有限公司2019年的企业硕士及以上人员占职工人数比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年中国电建利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报数据,今世缘的2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年的年报数据,深圳市皇庭国际企业股份有限公司的收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "城发环境在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "无形资产的计量和摊销方法对公司的资产质量和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "2020年郑州捷安高科股份有限公司的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年和顺石油营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "碳元科技股份有限公司2021年收回投资所收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "长城证券2020年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中工国际资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天际新能源科技股份有限公司2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "广电网络2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏本川智能电路科技股份有限公司2019年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "汉王科技股份有限公司2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2021年闻泰科技衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是递延所得税资产/递延所得税负债?", "intent": "专业名称解释"} +{"question": "2019年三峡水利企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年美都能源股份有限公司投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "亚宝药业集团股份有限公司2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年华北制药的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "大华股份2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "帝尔激光2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "广东雪莱特光电科技股份有限公司在2021年的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,云维股份在2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年大连百傲化学股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年东方时尚驾驶学校股份有限公司的净利润率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "根据2021年的年报数据,海天水务集团股份公司的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年,海泰新光对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年罗平锌电的年报,请简要介绍报告期内公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "洋河股份2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年安纳达营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "依据2020年的年报数据,奥瑞德的非流动负债比率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "请问2019年江苏悦达投资股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "2021年轻纺城流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "巨轮智能装备股份有限公司在2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "中信证券2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市路畅科技股份有限公司2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "国元证券股份有限公司2019年利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报,中光学的现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市同洲电子股份有限公司2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "比音勒芬服饰股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中工国际工程股份有限公司营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年鲁西化工研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年灵康药业流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年江苏沙钢股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "瑞纳智能在2020年实现的净利润为多少元?", "intent": "年报基础信息问答"} +{"question": "兆讯传媒广告股份有限公司在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年江苏宁沪高速公路股份有限公司注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请问在2019年,江苏振江新能源装备股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "现金流量表包括哪些主要项目?", "intent": "专业名称解释"} +{"question": "川恒股份在2019年使用的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "什么是每股净资产?", "intent": "专业名称解释"} +{"question": "融捷股份有限公司2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "对比2019年,2021年北京利德曼生化股份有限公司法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "在2019年,深圳市方直科技股份有限公司的企业研发经费与利润的比值是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "汇通能源在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽鑫科新材料股份有限公司2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "海欣食品在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "紫金矿业集团股份有限公司2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年青岛英派斯健康科技股份有限公司的管理费用增长率,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "东方财富信息股份有限公司2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "应收票据的定义是什么?", "intent": "专业名称解释"} +{"question": "扬电科技在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年美诺华的速动比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "威帝股份2021年的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年长川科技流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年安科瑞的年报,请简要介绍报告期内公司主要供应商情况如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "腾邦国际商业服务集团股份有限公司2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年天圣制药流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年中汽股份的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "恒立实业2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "陕西建设机械股份有限公司在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "大亚圣象2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年深圳市长盈精密技术股份有限公司的企业研发经费与营业收入的比值是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "天娱数字科技(大连)集团股份有限公司2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "新华联2021年的无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年中青旅控股股份有限公司的年报,请简要介绍报告期内公司硕士人数的情况。", "intent": "年报基础信息问答"} +{"question": "天能股份2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据珠江啤酒2019年的年报信息,请简要分析该公司董事、监事、高级管理人员的变动情况。", "intent": "报告解读分析"} +{"question": "2020年大连圣亚旅游控股股份有限公司年报中净利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年美尚生态景观股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,申万宏源集团股份有限公司的利息支出和利息收入分别为多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中国船舶重工集团海洋防务与信息对抗股份有限公司期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年鲁西化工公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "华夏航空2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年红塔证券的利息收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "2019年青岛啤酒股份有限公司法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "海螺新材在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年湖北盛天网络技术股份有限公司的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "金徽酒股份有限公司2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年山东新华制药股份有限公司的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年九典制药的企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "东旭蓝天在2021年的营业收入增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "天风证券股份有限公司在2021年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中钢国际工程技术股份有限公司速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是资本收益率?", "intent": "专业名称解释"} +{"question": "2019年通化东宝电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "中能电气在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "天山铝业2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "中国黄金2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年奥美医疗营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "杭氧股份在2021年的投资收益增长率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "兰州佛慈制药股份有限公司2020年的非流动负债比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2020年步步高利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是长期股权投资?", "intent": "专业名称解释"} +{"question": "岭南控股2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年建龙微纳每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "明阳智慧能源集团股份公司在2020年的资产负债比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请简述中炬高新技术实业集团股份有限公司2019年重大诉讼、仲裁事项的情况。", "intent": "报告解读分析"} +{"question": "成都苑东生物制药股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,三友联众的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年芯海科技的企业研发经费占费用比例,保留两位小数。", "intent": "财务指标计算"} +{"question": "同为股份2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年贝斯特职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年华新水泥股份有限公司的货币资金增长率是多少,结果以保留2位小数的形式表示?", "intent": "财务指标计算"} +{"question": "2019年华斯股份企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长期股权投资的投资回报和价值变动如何影响公司的资本利用和盈利能力?", "intent": "专业名称解释"} +{"question": "请问,2020年重庆银行股份有限公司的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年贵阳银行利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "正元地信2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市京基智农时代股份有限公司在2021年的投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "传智教育2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "明泰铝业在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江海股份在2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "东睦股份2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "莱伯泰科2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "孩子王2020年年报中投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "山石网科通信技术股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "乐通股份2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "先河环保2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "电光防爆科技股份有限公司在2021年的其他非流动金融资产的价值是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年石化机械的期末现金及现金等价物余额达到了多少元?", "intent": "年报基础信息问答"} +{"question": "丽江玉龙旅游股份有限公司在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "上海鸣志电器股份有限公司2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江长盛滑动轴承股份有限公司2020年的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的财务数据,天顺风能(苏州)股份有限公司的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "华平信息技术股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析南京万德斯环保科技股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "科美诊断技术股份有限公司在2021年的营业利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年中国国检测试控股集团股份有限公司的年报,请问三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年西安银行资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年上海阿拉丁生化科技股份有限公司硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年福建恒而达新材料股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年天龙光电固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析关于重庆水务公司2021年未来发展可能存在风险的情况。", "intent": "报告解读分析"} +{"question": "苏州市世嘉科技股份有限公司在2021年收回的投资现金是多少元?", "intent": "年报基础信息问答"} +{"question": "北京辰安科技股份有限公司2020年投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请计算瑞泰科技股份有限公司2019年企业研发经费占费用比例,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "博实股份在2020年的资产负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "冰山冷热2019年财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年瑞华泰的净利润增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是其他应收款?", "intent": "专业名称解释"} +{"question": "澜起科技股份有限公司2020年流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "美克家居2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析上海神开石油化工装备股份有限公司2021年研发人员的情况。", "intent": "报告解读分析"} +{"question": "维信诺2021年的投资收益增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年有研新材料股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华灿光电股份有限公司2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年美迪凯营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "汇顶科技在2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "百合股份2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年新疆洪通燃气股份有限公司的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年新亚强财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海第一医药股份有限公司2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年唐山三孚硅业股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "航发控制2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年四川天邑康和通信股份有限公司的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年双良节能的技术人员数。", "intent": "年报基础信息问答"} +{"question": "2021年越博动力应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "惠而浦在2021年的净利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年安徽省天然气开发股份有限公司所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "王府井2021年资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年徐工集团工程机械股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年杭萧钢构营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请分析思瑞浦微电子科技(苏州)股份有限公司2020年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "普门科技在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年潜能恒信的年报,请简要介绍报告期内公司非流动负债比率的情况,保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年大禹节水公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "请问在2019年,上能电气的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年松炀资源的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019-2021年英洛华科技股份有限公司法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "2020年华润双鹤药业股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市怡亚通供应链股份有限公司在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年赛摩智能科技集团股份有限公司营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是非经常性损益?如何评估其对公司财务状况的影响?", "intent": "专业名称解释"} +{"question": "2020年华宏科技销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问重庆燃气集团股份有限公司在2021年的营业收入增长率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "安徽金禾实业股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广东富信科技股份有限公司在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "负债合计与资本结构之间的关系如何影响公司的偿债能力和财务稳定性?", "intent": "专业名称解释"} +{"question": "江苏利通电子股份有限公司2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "凌云科技2020年年报中营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年晶方科技的投资收益占营业收入的比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "天津港在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据云赛智联2020年年报,请简要介绍报告期内公司流动负债比率的情况,保留2位小数。", "intent": "财务指标计算"} +{"question": "建发股份在2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "赛托生物2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "奇精机械股份有限公司2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年安徽九华山旅游发展股份有限公司固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广联航空2021年的每股净资产值是多少元?", "intent": "年报基础信息问答"} +{"question": "职工薪酬是什么意思?", "intent": "专业名称解释"} +{"question": "成都西菱动力科技股份有限公司在2020年的非流动负债比率为多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "值得买在2019年的电子信箱地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年东方国际创业股份有限公司的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "在深圳华强2021年的年度报告中,是如何规划下一年度的经营计划的?", "intent": "报告解读分析"} +{"question": "2021年日辰股份固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "智能自控2020年的销售费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年煌上煌研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "营业外收支净额对公司的综合收益和盈利能力有何影响?", "intent": "专业名称解释"} +{"question": "烽火通信科技股份有限公司2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年健友股份的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "许昌开普检测研究院股份有限公司2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是资产减值损失?", "intent": "专业名称解释"} +{"question": "请问,世茂能源2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江野马电池股份有限公司年报中公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "中闽能源股份有限公司2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年白银有色收到的投资收回的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年万科企业股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "浙江诚意药业股份有限公司在2020年的管理费用增长率是多少,结果保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年四川安宁铁钛股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中国中车股份有限公司2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "航天科技控股集团股份有限公司在2021年的现金及现金等价物增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年新北洋的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "财信发展2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "华软科技在2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "中钨高新在2021年期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,中科三环的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,东华测试企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,上海二三四五网络控股集团股份有限公司在2021年的投资收益增长率是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是管理费用?", "intent": "专业名称解释"} +{"question": "恒大高新2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "郑州银行在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "宁波康强电子股份有限公司2019年证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "浙矿股份2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年海马汽车利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年龙净环保的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "筑博设计股份有限公司2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年中再资环的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中孚信息股份有限公司的注册地址在哪里?", "intent": "年报基础信息问答"} +{"question": "安徽省天然气开发股份有限公司2021年的固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "文峰大世界连锁发展股份有限公司在2019年的毛利率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "应付职工薪酬的计提和支付对公司的现金流和员工满意度有何影响?", "intent": "专业名称解释"} +{"question": "华峰化学2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年三利谱的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年锦旅股份的流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "欣旺达电子股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "万通智控在2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年科大智能科技股份有限公司无形资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "宁波富邦精业集团股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年弘元绿色能源股份有限公司的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "安徽皖维高新材料股份有限公司在2019年企业研发经费与利润的比值是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江金盾风机股份有限公司在2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "江西海源复合材料科技股份有限公司在2021年的总资产增长率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "吉电股份在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年天邦食品股份有限公司利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "盛泰集团在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江棒杰控股集团股份有限公司2021年的衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是政府补助?", "intent": "专业名称解释"} +{"question": "2019年贝瑞基因硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "武汉东湖高新集团股份有限公司在2021年的现金及现金等价物增长率为多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "请分析宋都基业投资股份有限公司2021年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "湖南松井新材料股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "根据2021年的数据,韩建河山的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "资产负债表的作用是什么?", "intent": "专业名称解释"} +{"question": "2020年,王力安防营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "新华网股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "汇中仪表股份有限公司在2019年的企业研发经费与利润的比值是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年广汇能源股份有限公司营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "中粮资本控股股份有限公司2021年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "科美诊断技术股份有限公司2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "上海科技2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏苏州农村商业银行股份有限公司在2020年的净利润率是多少,结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年昂利康企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "永鼎股份2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年成都云图控股股份有限公司的财务报表,财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "南京佳力图机房环境技术股份有限公司在2020年的营业税金及附加具体是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江康盛股份有限公司在2021年的无形资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "远方信息2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年合肥合锻智能制造股份有限公司的营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年钱江水利营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年,兰州佛慈制药股份有限公司花费在研发上的费用是多少元?", "intent": "年报基础信息问答"} +{"question": "宏昌科技2020年投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,北京万集科技股份有限公司的研发人员占职工总人数的比例是多少?结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "美思德2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,北京华宇软件股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "宁波GQY视讯股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,桂冠电力在2020年的营业利润率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年浙江网盛生意宝股份有限公司固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是资产负债率?", "intent": "专业名称解释"} +{"question": "2019年深圳市金新农科技股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年天舟文化销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏金智科技股份有限公司在2020年的现金比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年上海开创国际海洋资源股份有限公司营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析鞍山七彩化学股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "在2021年,华峰铝业的固定资产值有多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广州白云山医药集团股份有限公司营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年海峡股份的营业外支出和营业外收入各是多少元?", "intent": "年报基础信息问答"} +{"question": "能否告知我2020年漳州发展的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年福然德股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年广东利扬芯片测试股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "能告诉我焦点科技在2019年的营业外支出和营业外收入分别是多少元吗?", "intent": "年报基础信息问答"} +{"question": "中国天楹2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "万润科技2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "依据2020年的年报数据,浙江盛洋科技股份有限公司的现金比率为多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "沈阳化工股份有限公司2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供奥特佳公司2019年的电子信箱。", "intent": "年报基础信息问答"} +{"question": "2019年三祥新材股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "应付票据和应付账款的管理对公司的现金流和供应商关系有何影响?", "intent": "专业名称解释"} +{"question": "2019年花园生物营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "中储股份在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "洽洽食品股份有限公司2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年通裕重工股份有限公司营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "祥和实业在2020年所应支付的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "海澜之家集团股份有限公司2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供三夫户外2021年的应付职工薪酬,以元为单位。", "intent": "年报基础信息问答"} +{"question": "2021年中国三峡新能源(集团)股份有限公司的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是股东权益回报率?如何计算股东权益回报率?", "intent": "专业名称解释"} +{"question": "浙文影业集团股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏骏成电子科技股份有限公司在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,安靠智电在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年天津海泰科技发展股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,中国武夷实业股份有限公司的现金比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,阿尔特汽车技术股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年奥精医疗营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,盘龙药业的速动比率具体是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "请简要分析上海万业企业股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "2021年西安铂力特增材技术股份有限公司货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安利股份2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供黄山旅游在2021年的营业成本,单位为元。", "intent": "年报基础信息问答"} +{"question": "根据2021年年报数据,江苏诺泰澳赛诺生物制药股份有限公司的营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年秀强股份流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年寿仙谷注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年合兴包装投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是每股经营现金流量?", "intent": "专业名称解释"} +{"question": "杭萧钢构股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市共进电子股份有限公司的固定资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析江苏三六五网络股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "2021年菲林格尔家居科技股份有限公司应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供南钢股份公司2019年的管理费用率,保留两位小数。", "intent": "财务指标计算"} +{"question": "中设股份2019年的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年,福建省闽发铝业股份有限公司的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "航天长峰2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年聚石化学的营业利润增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年华辰装备资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "武汉祥龙电业股份有限公司2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "贵州燃气在2020年的营业成本以及营业利润分别为多少元?", "intent": "年报基础信息问答"} +{"question": "什么是无形资产?", "intent": "专业名称解释"} +{"question": "请简要分析西藏高争民爆股份有限公司2020年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "宁波家联科技股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "福建三木集团股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年南京宝色股份公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门港务2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年杭州禾迈电力电子股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,宁波润禾高新材料科技股份有限公司营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年深圳同兴达科技股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "请查询2020年京东方的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年大庆华科营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年惠城环保利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年新光圆成股份有限公司总负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年万向钱潮流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "嘉泽新能2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "湖南黄金2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "豆神教育2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "汉邦高科在2020年的管理费用增长率是多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "2020年苏泊尔营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年的财报中,美丽生态的总资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "九典制药2019年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,四川西昌电力股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "雄帝科技2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国民生银行股份有限公司2019年的营业利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年豪悦护理证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "国脉科技股份有限公司2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "云南白药集团股份有限公司2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年成都立航科技股份有限公司的技术人员数量有多少?", "intent": "年报基础信息问答"} +{"question": "2019年蓝星安迪苏股份有限公司的管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问江苏怡达化学股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "嘉和美康(北京)科技股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年度报告,三人行的现金比率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "博济医药2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市智莱科技股份有限公司2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "能告诉我众泰汽车股份有限公司在2021年的固定资产是多少元吗?", "intent": "年报基础信息问答"} +{"question": "请问,湖南长远锂科股份有限公司在2021年的营业收入增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "山东墨龙2019年的法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "北京中岩大地科技股份有限公司在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,宝鼎科技股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年戴维医疗的办公地址。", "intent": "年报基础信息问答"} +{"question": "请问,浙江华生科技股份有限公司2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年永兴材料证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2019年宝鸡钛业股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "其他应收款的分类和计提原则是什么?", "intent": "专业名称解释"} +{"question": "2021年万里石的总负债增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年南宁百货硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "净利润率的变动如何反映公司的盈利能力和经营效率?", "intent": "专业名称解释"} +{"question": "皖通高速在2019年的毛利率是多少?请将结果保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "请问,汤臣倍健股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "元翔(厦门)国际航空港股份有限公司在2019年的财务费用具体是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析中国冶金科工股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "根据2021年的数据,中国船舶重工集团动力股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍北京金隅集团股份有限公司2021年控股股东及实控人的情况。", "intent": "报告解读分析"} +{"question": "江苏神马电力股份有限公司在2020年的财务费用增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "中国铝业股份有限公司2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年维维食品饮料股份有限公司销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "湖北共同药业股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问宁波永新光学股份有限公司在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "能否告诉我宏创控股在2019年的管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "晶晨股份在2021年的总负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,久吾高科在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "公牛集团在2020年的销售费用增长率是多少(保留到小数点后两位)?", "intent": "财务指标计算"} +{"question": "江西万年青水泥股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "宝塔实业2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "中信特钢2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析深圳市力合科创股份有限公司2020年公司员工情况", "intent": "报告解读分析"} +{"question": "峨眉旅游在2020年的资产负债比率是多少,结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "深圳世联行集团股份有限公司在2019年的企业研发经费与利润比值是多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年东方电气股份有限公司财务费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "哈药集团股份有限公司2020年的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "尚纬股份有限公司2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市沃尔核材股份有限公司在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中密控股股份有限公司年报中固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "鹏博士电信传媒集团股份有限公司在2021年收回投资所收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中海油能源发展股份有限公司公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "青岛德固特节能装备股份有限公司2021年的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "四川成飞集成科技股份有限公司2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "神农集团2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2020年的数据,南京泉峰汽车精密技术股份有限公司的非流动负债比率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年金盾股份无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年黑牡丹(集团)股份有限公司的速动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "凯立新材2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年威尔药业的速动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年三六五网企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中航电子三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年嘉诚国际研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年山西焦化股份有限公司利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "肇民科技2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2020年,安徽元琛环保科技股份有限公司的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年江苏悦达投资股份有限公司的三费比重,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "在2020年中,盘龙药业的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏东华测试技术股份有限公司2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年雪天盐业研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,科德教育在2021年的研发费用增长率是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年禾丰食品股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "舍得酒业2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "租赁是指什么?", "intent": "专业名称解释"} +{"question": "请提供浙江健盛集团股份有限公司2019年的证券简称。", "intent": "年报基础信息问答"} +{"question": "新疆友好(集团)股份有限公司2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年宁波海运股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "中公高科养护科技股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳市宝鹰建设控股集团股份有限公司现金及现金等价物增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,拓尔思信息技术股份有限公司的现金比率是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "四川中光防雷科技股份有限公司2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "货币资金管理对公司的流动性风险和资金利用效率有何影响?", "intent": "专业名称解释"} +{"question": "2021年万向新元科技股份有限公司货币资金增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "金发科技股份有限公司2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年同仁堂的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "请简要介绍天沃科技2021年控股股东及实控人的情况。", "intent": "报告解读分析"} +{"question": "腾景科技股份有限公司在2021年的投资收益增长率是多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "上海电影股份有限公司2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据新城控股2020年的年报,请简要介绍报告期内公司社会责任工作情况。", "intent": "报告解读分析"} +{"question": "广州市广百股份有限公司在2019年的财务费用具体是多少元?", "intent": "年报基础信息问答"} +{"question": "陕西金叶科教集团股份有限公司2021年收回投资所收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,顺博合金的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "伊戈尔在2019年的管理费用率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "天津港2019年的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "雅本化学2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "济南圣泉集团股份有限公司2019年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "格力地产股份有限公司2021年营业利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据万孚生物2020年的年报,请简要介绍报告期内公司的社会责任工作情况。", "intent": "报告解读分析"} +{"question": "根据2019年的年报数据,江苏紫金农村商业银行股份有限公司的管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析千禾味业食品股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "2020年奥雅股份博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年南京化纤的毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "星云股份2020年的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "福建凤竹纺织科技股份有限公司在2020年的营业利润率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "中航高科2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "成都银行2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是应交税费?", "intent": "专业名称解释"} +{"question": "2020年炬华科技年报中净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国化学2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "三雄极光2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是长期股权投资?", "intent": "专业名称解释"} +{"question": "中建环能科技股份有限公司2020年的非流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "新天绿色能源股份有限公司2020年年报数据中,公司的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "聚飞光电2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "数源科技股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年安泰科技股份有限公司研发人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "隆华新材2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供成都博瑞传播股份有限公司2019年的利息收入,以元为单位。", "intent": "年报基础信息问答"} +{"question": "启迪药业集团股份公司2019年的技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "中国船舶工业股份有限公司在2019年的财务费用金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年万科企业股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "鲁阳节能2021年的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "蓝盾股份2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,华侨城的总负债增长率是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "根据2021年的年报,万事利的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "新疆合金投资股份有限公司2021年年报数据中,每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据银座集团股份有限公司2019年的年报,毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年杭州和顺科技股份有限公司投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年华特达因营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "戎美股份2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年银宝山新投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "融捷股份有限公司在2020年的速动比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "中文天地出版传媒集团股份有限公司2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "爱慕股份有限公司2021年的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,北京巴士传媒股份有限公司在2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "富士康工业互联网股份有限公司在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年江苏天奈科技股份有限公司营业成本率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "鼎阳科技2021年净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年得润电子现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "菲达环保在2019年的企业研发经费与利润比值是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "太安堂在2020年的营业外收入总计是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是在建工程?", "intent": "专业名称解释"} +{"question": "皇马科技在2019年的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请问,江中药业在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "什么是总资产?", "intent": "专业名称解释"} +{"question": "如何确定现金及现金等价物?", "intent": "专业名称解释"} +{"question": "平安银行2019年利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "北京四方继保自动化股份有限公司2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "苏垦农发2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍汇中仪表股份有限公司2020年董事、监事、高级管理人员报酬情况。", "intent": "报告解读分析"} +{"question": "宝胜股份2019年年报中研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "光弘科技2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年电光防爆科技股份有限公司财务费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "九鼎投资在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "海思科医药集团股份有限公司在2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "华伍股份2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "唐山冀东水泥股份有限公司在2021年每股的净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年炬芯科技股份有限公司负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析厦门建霖健康家居股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "2020年深圳和而泰智能控制股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年中国广核的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "中天精装2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "吉艾科技集团股份有限公司在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年深圳南山热电股份有限公司投资收益占营业收入的比率,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年光线传媒硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "江苏京源环保股份有限公司2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年泰达股份企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "歌尔股份2019年的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "雪龙集团股份有限公司在2019年的营业成本率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年年报数据,仙鹤股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "根据万胜智能2021年的年报,每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "星球石墨2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "开山集团股份有限公司2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "翔宇医疗2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "民生银行在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "呈和科技股份有限公司2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "智度科技股份有限公司在2021年的总负债增长率是多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "2019年高测股份营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析北京中石伟业科技股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "在2021年,江苏如通石油机械股份有限公司的流动负债增长率是多少,精确到小数点后两位?", "intent": "财务指标计算"} +{"question": "山东威高骨科材料股份有限公司2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "普莱柯在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年特变电工股份有限公司利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江门市科恒实业股份有限公司2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "广州通达汽车电气股份有限公司2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,中核华原钛白股份有限公司在2019年的毛利率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "金桥信息2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年裕同科技无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年科大讯飞综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "立霸股份2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "众望布艺2019年的管理费用率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "对比2020年,2021年苏垦农发法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "上海电气集团股份有限公司2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "津滨发展2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "赛摩智能科技集团股份有限公司在2021年的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报,龙软科技的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "莱茵体育在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "招商局能源运输股份有限公司2019年毛利率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海柘中集团股份有限公司在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年惠发食品的利润总额和净利润分别是多少元?我想了解一下。", "intent": "年报基础信息问答"} +{"question": "2019年北新集团建材股份有限公司的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中文传媒管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是职工薪酬?", "intent": "专业名称解释"} +{"question": "南京聚隆2021年的归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "广东塔牌集团股份有限公司在2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年阜新德尔汽车部件股份有限公司速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是净资产(或股东权益)?", "intent": "专业名称解释"} +{"question": "2020年品茗科技的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海物资贸易股份有限公司总负债增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年万达电影期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "震裕科技在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年运盛医疗销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "拓普集团在2020年的销售费用为多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,博士眼镜连锁股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年甘肃省敦煌种业集团股份有限公司投资收益占营业收入比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年禾望电气的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江尤夫高新纤维股份有限公司2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供诚益通2020年的利润总额,以元为单位。", "intent": "年报基础信息问答"} +{"question": "2020年传艺科技的财务费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "请提供2020年万德斯的流动比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "亚邦股份2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,阳光电源股份有限公司的净利润率为多少,结果需保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年,用友网络科技股份有限公司的财务费用率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "成大生物2019年职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "2019年安记食品股份有限公司的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "勘设股份2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2021年华邦健康董监高的薪酬情况。", "intent": "报告解读分析"} +{"question": "什么是应收账款周转率?", "intent": "专业名称解释"} +{"question": "辽宁科隆精细化工股份有限公司在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "普门科技在2019年的官方注册名称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年星辉环保材料股份有限公司所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年成都立航科技股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "惠州市华阳集团股份有限公司2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中恒集团在2019年的固定资产和无形资产的总额分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年杭州解百技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "营业外收入和营业外支出的变动如何影响公司的利润稳定性和风险承受能力?", "intent": "专业名称解释"} +{"question": "上海宝钢包装股份有限公司2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中南建设在2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年河北养元智汇饮品股份有限公司的财务费用为多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年新兴铸管的年报,营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市兆威机电股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "青岛云路先进材料技术股份有限公司2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供金禾实业2019年的企业名称。", "intent": "年报基础信息问答"} +{"question": "福建省爱迪尔珠宝实业股份有限公司在2021年的营业收入增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年京华激光应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "唯特偶2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年武汉精测电子集团股份有限公司固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年国机重装的营业外支出和营业外收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "司太立在2019年的三费比重是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "青松建化在2019年的流动比率是多少?结果请保留两位小数.", "intent": "财务指标计算"} +{"question": "安徽德力日用玻璃股份有限公司2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年安图生物利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳太辰光通信股份有限公司在2019年企业研发经费占费用的比例是多少?精确到小数点后两位。", "intent": "财务指标计算"} +{"question": "在2020年度报告中,上海威派格智慧水务股份有限公司的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供联化科技股份有限公司2021年的归属母公司所有者净利润金额。", "intent": "年报基础信息问答"} +{"question": "资本支出对公司的技术更新和资产配置的影响如何评估?", "intent": "专业名称解释"} +{"question": "2019年中微公司的硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "陕西宝光真空电器股份有限公司在2019年的研发人员占职工人数比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2020年的年报数据,山东奥福环保科技股份有限公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年罗平锌电投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年立讯精密综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年曲美家居集团股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "联得装备2020年的流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,云鼎科技股份有限公司在2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年中际联合的固定资产和无形资产的价值分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年新益昌企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "统一股份在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是其他债权投资?", "intent": "专业名称解释"} +{"question": "2021年金鸿控股集团股份有限公司期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "能告诉我2019年华能国际的注册地址吗?", "intent": "年报基础信息问答"} +{"question": "请问在2019年,上海贝岭股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "2020年江苏锦鸡实业股份有限公司的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "香农芯创2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是公允价值变动收益?", "intent": "专业名称解释"} +{"question": "请提供龙力生物2021年末的现金及现金等价物余额,单位为元。", "intent": "年报基础信息问答"} +{"question": "请简要分析常州千红生化制药股份有限公司2020年行业情况。", "intent": "报告解读分析"} +{"question": "骏亚科技在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年二六三投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供普元信息公司2020年的利润总额。", "intent": "年报基础信息问答"} +{"question": "2019年甘咨询法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2019年爱丽家居科技股份有限公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年四川大西洋焊接材料股份有限公司营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2019年泰格医药的硕士人数。", "intent": "年报基础信息问答"} +{"question": "资本支出的决策如何影响公司的财务结构和盈利能力?", "intent": "专业名称解释"} +{"question": "福建省招标股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是扣除非经常性损益后的净利润?", "intent": "专业名称解释"} +{"question": "丝路视觉科技股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中嘉博创信息技术股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市大族数控科技股份有限公司2021年每股的经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江康恩贝制药股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广东肇庆星湖生物科技股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年岳阳兴长石化股份有限公司法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2019年江苏紫金农村商业银行股份有限公司利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "柯力传感2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年大东海流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "苏州天华新能源科技股份有限公司在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年拓日新能研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年五洲新春的年报,其非流动负债比率具体是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "请问,北京易华录信息技术股份有限公司在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳机场2021年法定代表人对比2020年是否相同?", "intent": "统计对比分析"} +{"question": "深物业集团在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "请问光莆股份在2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江金洲管道科技股份有限公司的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江和仁科技股份有限公司销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "对比2020年,2021年国联证券的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "请问2020年北京八亿时空液晶科技股份有限公司的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年卫星化学股份有限公司技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "长飞光纤公司在2019年的三费比重是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "珍宝岛在2021年的营业收入增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "三羊马利在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "金开新能2021年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据远东智慧能源股份有限公司2021年年报,该报告期内公司的营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国卫通集团股份有限公司2019年的硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年显盈科技的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江诚意药业股份有限公司的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "山石网科2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,太极实业在2021年的货币资金增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年吉林吉大通信设计院股份有限公司的流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年摩登大道研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "中辰电缆股份有限公司2020年年报中营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年贤丰控股总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供2019年瑞凌股份的技术人员数。", "intent": "年报基础信息问答"} +{"question": "2019年马鞍山钢铁股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "根据2020年的财务数据,浙江中国轻纺城集团股份有限公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年福建凤竹纺织科技股份有限公司的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "新疆东方环宇燃气股份有限公司在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "万向德农股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "拉卡拉支付股份有限公司在2019年的企业研发经费与营业收入的比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年国联证券利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东方国际创业股份有限公司的毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "恺英网络股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,北京万泰生物药业股份有限公司2019年的企业研发经费与利润比值是多少,结果请保留2位小数?", "intent": "财务指标计算"} +{"question": "在2021年,众生药业的流动负债增长率是多少,结果需保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "新奥股份在2019年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,龙利得在2021年的净利润增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年济民健康管理股份有限公司每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年华测检测认证集团股份有限公司速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "能否告知亚世光电2020年的销售费用增长率?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "西安天和防务技术股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "南京钢铁股份有限公司2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "乐心医疗2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年的数据,中信建投证券的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,中原传媒每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广东冠豪高新技术股份有限公司年报中营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "百洋产业投资集团股份有限公司2020年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019-2021年东南网架法定代表人是否都相同?", "intent": "统计对比分析"} +{"question": "什么是持有待售资产?", "intent": "专业名称解释"} +{"question": "2020年,深圳雷柏科技股份有限公司的公允价值变动收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的财报,华夏幸福基业股份有限公司的流动负债比率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "万马科技2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年,浙商银行的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "中核科技2021年的总资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中油资本2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年宝利国际的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年设计总院对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年航天机电每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年亚普汽车部件股份有限公司的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "根据2021年的数据,广东正业科技股份有限公司的无形资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "桃李面包2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中国南方航空股份有限公司注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "请提供欣龙控股2021年收回投资所获得的现金金额。", "intent": "年报基础信息问答"} +{"question": "2019年华兰生物工程股份有限公司固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天津港股份有限公司2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江力诺流体控制科技股份有限公司在2021年的营业利润增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年金力泰销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中国铁建股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "汇金股份在2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "清水源在2021年的每股收益以及每股净资产分别为多少元?", "intent": "年报基础信息问答"} +{"question": "2020年银河微电销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市水务规划设计院股份有限公司2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "长青股份2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "君正集团在2020年的资产负债比率是多少,保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "芯朋微在2020年的营业外支出为多少元?", "intent": "年报基础信息问答"} +{"question": "请问,北鼎股份2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "苏试试验2020年博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "古越龙山在2020年的营业利润率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年长江证券的货币资金增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是应收账款周转天数?", "intent": "专业名称解释"} +{"question": "请简要分析江苏利通电子股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "山东新华锦国际股份有限公司在2021年的货币资金增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "酒鬼酒股份有限公司在2019年的营业利润率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "请计算博汇科技2019年的财务费用率,保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "请问,2021年安徽应流机电股份有限公司的流动负债增长率是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "2019年雪龙集团企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "协创数据技术股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,药明康德的衍生金融资产和其他非流动金融资产各为多少元?", "intent": "年报基础信息问答"} +{"question": "请提供美丽生态2020年的综合收益总额金额为多少元?", "intent": "年报基础信息问答"} +{"question": "中国中铁在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "上港集团2019年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中南股份在2019年的三费比重是多少,精确到小数点后两位?", "intent": "财务指标计算"} +{"question": "浙江黎明在2021年的固定资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东阿阿胶股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "曲美家居2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广东天安新材料股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "请提供2019年秋林集团的利息收入金额。", "intent": "年报基础信息问答"} +{"question": "厦门银行股份有限公司2021年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年鞍山七彩化学股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年准油股份的期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年佳禾智能科技股份有限公司的销售费用,单位为元。", "intent": "年报基础信息问答"} +{"question": "宁波创源文化发展股份有限公司在2019年的研发经费与营业收入比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "四川升达林业产业股份有限公司2020年的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供京北方信息技术股份有限公司2019年的硕士人数。", "intent": "年报基础信息问答"} +{"question": "在2021年,金开新能源股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广田集团营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是盈利能力?", "intent": "专业名称解释"} +{"question": "请问,妙可蓝多2021年年报数据中,货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年瑞茂通投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析江苏三房巷实业股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "请提供万祥科技在2020年的销售费用和管理费用,分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年四川长虹衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供三人行公司2020年的营业收入金额。", "intent": "年报基础信息问答"} +{"question": "2019年芜湖伯特利汽车安全系统股份有限公司的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "雷曼光电2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年濮耐股份企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,厦门吉宏科技股份有限公司在2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年天奈科技企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "艾迪精密2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "岳阳林纸2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中炬高新技术实业(集团)股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "国恩股份2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "河南中孚实业股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国石油天然气股份有限公司在2019年的财务费用率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年的财务报告,创源股份的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "交大思诺2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "国投资本2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "今创集团2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "上海先惠自动化技术股份有限公司在2021年的营业利润增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "在2019年,北京北陆药业股份有限公司的研发费用与财务费用各是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽江淮汽车集团股份有限公司在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年会通股份财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "货币资金管理对公司的流动性风险和资金利用效率有何影响?", "intent": "专业名称解释"} +{"question": "请提供2019年中国银行的利息收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "请简要分析绍兴贝斯美化工股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "2021年上海赛伦生物技术股份有限公司的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年海南高速应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析鞍山七彩化学股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "在2020年,华钰矿业的流动负债比率为多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "结合上海微创心脉医疗科技集团股份有限公司2021年的年报信息,请简要分析该公司研发投入的变动情况及原因。", "intent": "报告解读分析"} +{"question": "江苏秀强玻璃工艺股份有限公司2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "北京鼎汉技术集团股份有限公司2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "现代投资股份有限公司2020年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "重庆市涪陵榨菜集团股份有限公司2019年的投资收益占营业收入比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "汉宇集团股份有限公司在2020年的利润总额和净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "圣邦微电子(北京)股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "对比2020年,2021年江苏连云港港口股份有限公司的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "2021年深圳市芭田生态工程股份有限公司期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年久吾高科营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "金宏气体2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "迈克生物股份有限公司在2019年的企业硕士及以上人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年年报数据,国联股份的管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "秋田微2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年八方电气(苏州)股份有限公司的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "江苏武进不锈股份有限公司2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问海南天然橡胶产业集团股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "请查询,2021年浪潮电子信息产业股份有限公司的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年东华能源股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年大连圣亚旅游控股股份有限公司负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年江苏日久光电股份有限公司的投资收益占营业收入的比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "瑞晟智能在2021年的营业利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据深圳南山热电股份有限公司2019年的年度报告,请简要分析报告期内公司从事的主要业务。", "intent": "报告解读分析"} +{"question": "2019年北京利德曼生化股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析江苏三六五网络股份有限公司2020年重大关联交易的情况。", "intent": "报告解读分析"} +{"question": "请简要分析珠海英搏尔电气股份有限公司2019年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "返利科技2020年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年年报数据,苏州市建筑科学研究院集团股份有限公司的营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年深圳市德方纳米科技股份有限公司的现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请查询2021年上海岱美汽车内饰件股份有限公司的衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "恒玄科技(上海)股份有限公司在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "广州海格通信集团股份有限公司2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供中航高科2020年的所得税费用金额。", "intent": "年报基础信息问答"} +{"question": "请提供2021年平潭发展的应收款项融资,单位为元。", "intent": "年报基础信息问答"} +{"question": "浙江西大门新材料股份有限公司2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "根据2019年的财报,金逸影视的毛利率具体为多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年佳华科技营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "越秀资本2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年众泰汽车的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要概述2020年北斗星通的经营情况。", "intent": "报告解读分析"} +{"question": "请问,烟台张裕葡萄酿酒股份有限公司在2021年的无形资产金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年北矿科技股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "尤洛卡精准信息工程股份有限公司在2020年的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是偿债能力?", "intent": "专业名称解释"} +{"question": "在2019年,豪森股份的企业研发经费与营业收入的比值是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "非经常性损益对公司财务状况和盈利能力的影响如何评估?", "intent": "专业名称解释"} +{"question": "宝钛股份在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "千红制药2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年亿帆医药股份有限公司的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "中山大洋电机股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "洋河股份2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年岱勒新材非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问在2020年,青岛汇金通电力设备股份有限公司的法定代表人与2019年相比是否相同?", "intent": "统计对比分析"} +{"question": "请问,安硕信息2020年的非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年会畅通讯其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "润禾材料2019年企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "请提供2019年云南能投的法定代表人。", "intent": "年报基础信息问答"} +{"question": "2019年华宝股份法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "请问在2020年,高伟达对联营企业和合营企业的投资收益达到了多少元?", "intent": "年报基础信息问答"} +{"question": "销售费用的变动如何影响公司的销售额和营业利润?", "intent": "专业名称解释"} +{"question": "环球印务2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "如何计算企业的盈利能力?", "intent": "专业名称解释"} +{"question": "请问江苏精研科技股份有限公司在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "惠博普在2020年的研发费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年凯美特气每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,唯赛勃的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中红医疗的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏国茂减速机股份有限公司2020年的财务费用增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "盛屯矿业集团股份有限公司2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析上海网达软件股份有限公司2021年研发投入情况", "intent": "报告解读分析"} +{"question": "杭州电魂网络科技股份有限公司2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2019年江苏三房巷聚材股份有限公司的营业成本率为多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "风光股份2020年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "蓝丰生化2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "京源环保2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "华锐风电在2021年的资产总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年武汉兴图新科电子股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "三六零安全科技股份有限公司在2020年的利润总额是多少元,能帮我查一下吗?", "intent": "年报基础信息问答"} +{"question": "2021年仟源医药总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "冠昊生物2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "和达科技2020年营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年浙江海盐力源环保科技股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安科瑞电气股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "苏州胜利精密制造科技股份有限公司2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "同兴环保2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "康欣新材料股份有限公司2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是存货?", "intent": "专业名称解释"} +{"question": "2021年武汉当代明诚文化体育集团股份有限公司的投资收益增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "江苏怡达化学股份有限公司2019年年报中固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年诚邦生态环境股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "京新药业2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "河南黄河旋风股份有限公司2021年负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山东美晨生态环境股份有限公司销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年每日互动技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请简要分析烟台杰瑞石油服务集团股份有限公司2019年公司员工情况", "intent": "报告解读分析"} +{"question": "2021年天岳先进每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "在2019年,豪森股份的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年正海磁材的管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请简要分析中伟新材料股份有限公司2021年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "2020年烟台张裕葡萄酿酒股份有限公司的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "恒生电子股份有限公司在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供乐鑫信息科技(上海)股份有限公司2019年的职工总数。", "intent": "年报基础信息问答"} +{"question": "什么是负债?", "intent": "专业名称解释"} +{"question": "2020年凌云科技流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "恒顺醋业2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请问安诺其在2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年,松霖科技企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "新疆交通建设集团股份有限公司在2020年的销售费用增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年成都高新发展股份有限公司的年报,请简要介绍报告期内公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江米奥兰特商务会展股份有限公司2019年证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2021年国星光电非主营业务金额变化的原因是什么?", "intent": "报告解读分析"} +{"question": "无锡华东重型机械股份有限公司在2021年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "广联达科技股份有限公司2019年的管理费用率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "企业价值是如何计算的?", "intent": "专业名称解释"} +{"question": "宝胜科技创新股份有限公司在2019年的三费比重是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "嘉诚国际在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "海伦哲2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年太极集团管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是合同成本?", "intent": "专业名称解释"} +{"question": "茂硕电源科技股份有限公司在2020年的资产负债比率是多少(保留到小数点后两位)?", "intent": "财务指标计算"} +{"question": "完美世界在2020年的非流动负债比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "对比2020年,2021年宁波海运股份有限公司法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "岭南控股2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年同方股份收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年卓越新能营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,生意宝2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江泰福泵业股份有限公司负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年江阴电工合金股份有限公司营业利润率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "能否告诉我山东钢铁在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2021年上海康德莱企业发展集团股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市朗科科技股份有限公司2019年财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年东尼电子投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据视源股份2021年的年报,营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "四方新材在2020年的所得税费用一共是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年富信科技的营业利润增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "天津普林2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "中洲控股在2020年的营业收入总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,浙江奥翔药业股份有限公司2019年的企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "首华燃气科技(上海)股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "广东梅雁吉祥水电股份有限公司2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "能告诉我北京华胜天成科技股份有限公司在2020年的利润总额是多少元吗?", "intent": "年报基础信息问答"} +{"question": "2021年深粮控股的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年国药股份三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年江苏华昌化工股份有限公司的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2019年,澳弘电子的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年曲江文旅的财务费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "豪能股份2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年海翔药业营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "福建恒而达新材料股份有限公司在2019年的企业研发经费与利润比值是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年联美控股投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,顺丰控股的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "同益中在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年锦浪科技股份有限公司三费比重为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问2021年克来机电期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年亚翔集成外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年福达合金营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长期股权投资的投资回报和价值变动如何影响公司的资本利用和盈利能力?", "intent": "专业名称解释"} +{"question": "请提供青岛金王应用化学股份有限公司2021年的货币资金增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年中节能风力发电股份有限公司的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "松原股份2020年的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "山东泰和科技股份有限公司在2020年的博士及以上学历员工数量是多少?", "intent": "年报基础信息问答"} +{"question": "什么是应收账款?", "intent": "专业名称解释"} +{"question": "请问,在上海爱婴室商务服务股份有限公司2019年的年报中,主要会计数据和财务指标的内容,是否涉及利好。", "intent": "报告解读分析"} +{"question": "罗曼股份2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "三一重工2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的财务数据,上海浦东建设股份有限公司的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江真爱美家股份有限公司博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "兴业银行股份有限公司2020年的利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,铁岭新城投资控股(集团)股份有限公司的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江东晶电子股份有限公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "通润装备2020年的销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年昆山国力电子科技股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "合同负债是指什么?", "intent": "专业名称解释"} +{"question": "在2021年,成都盟升电子技术股份有限公司的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "中国中铁股份有限公司2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,2021年聚赛龙所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "北京阳光诺和药物研究股份有限公司在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "邵阳液压在2021年的每股经营现金流量具体是多少元?", "intent": "年报基础信息问答"} +{"question": "银邦金属复合材料股份有限公司在2021年的无形资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海行动教育科技股份有限公司2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "如何计算企业的偿债能力?", "intent": "专业名称解释"} +{"question": "北京大豪科技股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年宁波合力科技股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问百川能源在2019年的营业利润率是多少?需要保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是财务杠杆?", "intent": "专业名称解释"} +{"question": "2020年江苏鱼跃医疗设备股份有限公司研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "其他应收款的定义是什么?", "intent": "专业名称解释"} +{"question": "请问,新能泰山在2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "返利科技2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年泰尔重工股份有限公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "德马科技2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "东珠生态2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "华润微2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年华泰证券企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析中国宝安2019年的审计报告中的审计意见及关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "2020年重庆钢铁的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "津膜科技在2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析厦门港务发展股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "2020年河北汇金集团股份有限公司的净利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年炬申股份的营业外支出具体是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年广州山水比德设计股份有限公司的无形资产达到了多少元?", "intent": "年报基础信息问答"} +{"question": "安徽金禾实业股份有限公司在2019年至2021年期间,法定代表人是否都是相同的?", "intent": "统计对比分析"} +{"question": "博创科技股份有限公司2020年所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,根据2021年的年报数据,深圳燃气的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "浩丰科技在2021年的应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "扬州扬杰电子科技股份有限公司2020年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海艾为电子技术股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年仙乐健康公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中国平安保险(集团)股份有限公司营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "和辉光电2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "新瀚新材2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年信捷电气的年报,资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年山东先达农化股份有限公司货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "吉林敖东药业集团股份有限公司2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "南网储能在2020年的流动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年会稽山绍兴酒股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年西藏矿业的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年罗博特科智能科技股份有限公司公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "药易购在2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供深圳市鼎阳科技股份有限公司在2021年的每股净资产,单位为元。", "intent": "年报基础信息问答"} +{"question": "福建南平太阳电缆股份有限公司在2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "请问,珠海安联锐视科技股份有限公司在2019年的营业成本率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "2020年浙江甬金金属科技股份有限公司流动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广州恒运企业集团股份有限公司2019年的财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年贵州钢绳股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "威星智能2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年山东省药用玻璃股份有限公司货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "成都天箭科技股份有限公司2019年的营业成本率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年悦康药业的现金及现金等价物增长率是多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年中国电研的管理费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "亚信安全科技股份有限公司2021年收回的投资现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年华电重工的非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年大禹节水的毛利率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "山东黄金矿业股份有限公司在2019年的财务费用率大约是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "江苏宁沪高速公路股份有限公司在2019年的企业硕士及以上人员占职工人数比例是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "安徽山河药用辅料股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "吴通控股在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年物产中大衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "威孚高科2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "诺禾致源在2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "东莞市鼎通精密科技股份有限公司2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年六国化工的总资产增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "中兵红箭2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "中电科网络安全科技股份有限公司2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "青木股份在2021年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "聚石化学在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江汇隆新材料股份有限公司营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "亚普汽车部件股份有限公司在2019年的企业研发经费占费用比例为多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "海天精工在2019年的投资收益占营业收入比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2021年,远东智慧能源股份有限公司的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年浙商银行的年报,请简要介绍报告期内公司社会责任工作情况。", "intent": "报告解读分析"} +{"question": "什么是财务报表?", "intent": "专业名称解释"} +{"question": "酒钢宏兴在2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "北京指南针科技发展股份有限公司2021年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,山东省章丘鼓风机股份有限公司2020年年报数据中,公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要介绍2020年上海雅仕投资发展股份有限公司的主营业务及经营模式。", "intent": "报告解读分析"} +{"question": "请问,上海联明机械股份有限公司在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中京电子技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2019年新疆洪通燃气股份有限公司的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "启明星辰2021年年报中无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,浙江南都电源动力股份有限公司的固定资产增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "资产减值损失如何影响公司的盈利能力和财务状况?", "intent": "专业名称解释"} +{"question": "在2020年,天源环保对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年绿茵生态的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "东莞铭普光磁股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "哈空调在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "在2020年,江苏博云的管理费用总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中泰股份利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年泰山石油应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "广东依顿电子科技股份有限公司2020年的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年工商银行利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "康得新复合材料集团股份有限公司2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "山东玉龙黄金股份有限公司在2020年的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "中珠医疗2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年深圳友讯达科技股份有限公司的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2020年,安集科技的资产负债比率是多少?需要保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2019年宜通世纪的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "我想知道2019年甘肃祁连山水泥集团股份有限公司的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年信质集团的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年宁波东方电缆股份有限公司的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "重庆秦安机电股份有限公司在2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "资产减值损失如何反映公司的风险敞口和资产价值的变化?", "intent": "专业名称解释"} +{"question": "请提供深天马A2021年的法定代表人是否相同。", "intent": "统计对比分析"} +{"question": "巨力索具股份有限公司2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年英力特法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "贵州盘江精煤股份有限公司2019年的技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请提供2020年桐昆集团股份有限公司的营业税金及附加金额。", "intent": "年报基础信息问答"} +{"question": "万兴科技2019年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "九联科技2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年南京海辰药业股份有限公司的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "中航产融2020年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年恒泰艾普营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "深圳市科信通信技术股份有限公司2020年非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "光大证券在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,天顺风能(苏州)股份有限公司的利息支出和利息收入各是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年苏州高新年报数据中,货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "登海种业在2020年的综合收益总额具体是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年仙坛股份的年报,其投资收益占营业收入的比率具体是多少?请以2位小数点形式回答。", "intent": "财务指标计算"} +{"question": "2019年英力特三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "爱威科技股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "应交税费的管理对公司的税务合规性和财务稳定性有何影响?", "intent": "专业名称解释"} +{"question": "根据2021年盛新锂能集团股份有限公司的年报,每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "青岛城市传媒股份有限公司2020年销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据国检集团2021年的年报,请简要介绍报告期内公司环境信息情况。", "intent": "报告解读分析"} +{"question": "请提供亿阳信通股份有限公司2021年的现金及现金等价物增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年株洲欧科亿数控精密刀具股份有限公司博士及以上人数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2020年千禾味业食品股份有限公司的营业利润率是多少,保留2位小数?", "intent": "财务指标计算"} +{"question": "达刚控股集团股份有限公司2021年固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年绿景控股股份有限公司的法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "请根据2021年百川畅银的年报,简要分析主要供应商的情况如何", "intent": "报告解读分析"} +{"question": "福莱特在2019年的研发经费占费用比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,深圳市道通科技股份有限公司在2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "鞍钢股份在2019年的财务费用率是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "江苏秀强玻璃工艺股份有限公司2020年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "南京聚隆科技股份有限公司2020年的流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年广东香山衡器集团股份有限公司的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报数据,梦百合的总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "科威尔2020年的利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州市世嘉科技股份有限公司在2020年的财务费用增长率是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "福建博思软件股份有限公司2020年的财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "四川西部资源控股股份有限公司2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "南通江海电容器股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "稳健医疗用品股份有限公司在2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年唯科科技利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "城地香江在2019年的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "2019年安纳达企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "汇纳科技2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年山东宏创铝业控股股份有限公司的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "山东力诺特种玻璃股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "安徽皖仪科技股份有限公司2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,海洋王照明科技股份有限公司2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "深圳市全新好股份有限公司在2021年的无形资产增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "新亚制程在2021年的总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "南京公用2019年的营业利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "瀛通通讯股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年江南奕帆的营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是速动比率?", "intent": "专业名称解释"} +{"question": "根据基蛋生物科技股份有限公司2019年年报,请简要介绍报告期内公司投资收益占营业收入比率的情况,保留2位小数。", "intent": "财务指标计算"} +{"question": "太龙股份在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "一汽解放在2019年的职工总数是多少?", "intent": "年报基础信息问答"} +{"question": "请简要分析深圳市超频三科技股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "湘潭电机股份有限公司在2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年,广西桂东电力股份有限公司的硕士研究生员工数量是多少?", "intent": "年报基础信息问答"} +{"question": "2019年吉比特办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "赣能股份2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "老凤祥公司在2021年收回的投资现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年深圳市崧盛电子股份有限公司的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供黔源电力2019年的外文名称。", "intent": "年报基础信息问答"} +{"question": "上海贝岭股份有限公司2020年的法定代表人与2019年相比是否相同?", "intent": "统计对比分析"} +{"question": "杭州高新2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年广州迪森热能技术股份有限公司应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "银河微电2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,居然之家新零售集团股份有限公司的投资收益增长率是多少?请以两位小数表示。", "intent": "财务指标计算"} +{"question": "2020年深圳市长亮科技股份有限公司销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "银星能源在2019年的管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年朗新科技研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2021年能辉科技销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年优德精密工业(昆山)股份有限公司销售费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要介绍根据宏辉果蔬2020年的年报主要供应商情况怎么样", "intent": "报告解读分析"} +{"question": "资产负债总额和净资产之间的关系如何反映公司的财务稳定性和杠杆效应?", "intent": "专业名称解释"} +{"question": "在2019年,盐津铺子的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市新南山控股(集团)股份有限公司投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "科陆电子2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏国泰2021年的流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年上海中洲特种合金材料股份有限公司的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年大连德迈仕精密科技股份有限公司的营业成本率是多少,结果请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "瑞达期货在2019年的投资收益占营业收入比率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2019年上海阿拉丁生化科技股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "南大环境2021年的净利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "宁波建工股份有限公司2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年格尔软件负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年宣亚国际营销科技(北京)股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年南京银行利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏红豆实业股份有限公司2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年深圳市雄帝科技股份有限公司衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "罗莱生活2019年财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年湖南发展的年报,是否属于环境保护部门公布的重点排污单位。", "intent": "报告解读分析"} +{"question": "天津锐新昌科技股份有限公司2019年的三费比重是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "思源电气股份有限公司2020年企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供2019年上海海立(集团)股份有限公司的注册地址。", "intent": "年报基础信息问答"} +{"question": "招商积余2019年的技术人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "能科科技股份有限公司在2021年每股的净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是应付账款?", "intent": "专业名称解释"} +{"question": "甘李药业2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "武汉菱电汽车电控系统股份有限公司在2021年的营业利润增长率是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "振东制药2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是净利润率?", "intent": "专业名称解释"} +{"question": "重庆百货大楼股份有限公司在2021年的总资产增长率是多少,结果需要保留到两位小数?", "intent": "财务指标计算"} +{"question": "山西华阳新材料股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "牧高笛户外用品股份有限公司2021年的总负债增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年达实智能净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年通达股份流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江富润数字科技股份有限公司在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "赛升药业在2019年的企业硕士及以上人员占职工人数的比例是多少,结果保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "请问,沃尔德2019年硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "在2019年,高铁电气的管理费用率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "请对比2019年和2020年,确认上海海立(集团)股份有限公司的法定代表人是否相同。", "intent": "统计对比分析"} +{"question": "黑猫股份在2021年的固定资产增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2020年中伟新材料股份有限公司的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "杭州热电集团股份有限公司在2019年的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "宁波富达2019年的财务费用率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是长期待摊费用?", "intent": "专业名称解释"} +{"question": "2019年乐山电力投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年杭州美迪凯光电科技股份有限公司公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年锦鸡股份的流动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "兴源环境科技股份有限公司2021年无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,金安国纪集团股份有限公司收回的投资收到的现金总额是多少元?", "intent": "年报基础信息问答"} +{"question": "和而泰2019年的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "请提供2020年上海金枫酒业股份有限公司的财务费用增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "存货的定义是什么?", "intent": "专业名称解释"} +{"question": "2019年西藏天路财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "山东国瓷功能材料股份有限公司在2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年河南思维自动化设备股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天壕环境股份有限公司2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "东港股份有限公司2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "台基股份2021年归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "中国第一重型机械股份公司2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供国金证券股份有限公司2019年的利息收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "请问,2020年宁波戴维医疗器械股份有限公司的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年,山西美锦能源股份有限公司应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "合金投资在2020年的资产负债比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "北京映翰通网络技术股份有限公司在2020年的管理费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "康德莱在2019年的企业研发经费占费用的比例是多少?请保留到小数点后两位。", "intent": "财务指标计算"} +{"question": "2020年绿地控股财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "常熟风范电力设备股份有限公司2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "为什么销售额可以是负的?", "intent": "专业名称解释"} +{"question": "现金流量表与利润表有什么区别?", "intent": "专业名称解释"} +{"question": "2020年安徽六国化工股份有限公司营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "乐歌股份2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年年报数据,江西世龙实业股份有限公司的期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年国发股份每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,山东天鹅棉业机械股份有限公司的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年北陆药业的年报,请分析主要供应商的情况如何", "intent": "报告解读分析"} +{"question": "海洋石油工程股份有限公司在2019年的固定资产以及无形资产分别为多少元?", "intent": "年报基础信息问答"} +{"question": "2019年日照港证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "什么是现金流量的净额?", "intent": "专业名称解释"} +{"question": "2021年霍普股份净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "新疆熙菱信息技术股份有限公司2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "蕾奥规划在2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "三维化学2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "宜宾天原集团股份有限公司2021年的投资收益增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "上海振华重工(集团)股份有限公司在2020年的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "北京易华录信息技术股份有限公司2020年的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "天龙股份在2021年的固定资产增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析广州市广百股份有限公司2019年公司地位的情况。", "intent": "报告解读分析"} +{"question": "深圳市天威视讯股份有限公司2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "昊华能源2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "远程电缆股份有限公司2021年的流动负债增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "广东宏川智慧物流股份有限公司2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问2020年深圳明阳电路科技股份有限公司的利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江唐德影视股份有限公司货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "中兰环保科技股份有限公司2021年无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海畅联国际物流股份有限公司收回的投资收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年江西金达莱环保股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年北方股份流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,湖北三峡旅游集团股份有限公司的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "杭州星帅尔电器股份有限公司2019年研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "海南高速公路股份有限公司2021年的固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年的年报,郑州银行股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年扬州扬杰电子科技股份有限公司的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "茶花股份2019年企业研发经费与利润比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "安博通2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "电子城2019年的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年立航科技销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年雪莱特无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年的年报数据,东方航空物流股份有限公司的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "信维通信2019年硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年北京昭衍新药研究中心股份有限公司技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年富临精工股份有限公司的净利润率是多少?请保留至小数点后2位。", "intent": "财务指标计算"} +{"question": "金宏气体2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "南京全信传输科技股份有限公司2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年朗博科技的固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "上海华铭智能终端设备股份有限公司在2021年的固定资产总值是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是投资性房地产?", "intent": "专业名称解释"} +{"question": "上海徕木电子股份有限公司在2021年的总负债增长率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2021年,中节能铁汉生态环境股份有限公司的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年浙江朗迪集团股份有限公司营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "凯立新材2020年的营业成本和营业利润是分别是多少?", "intent": "年报基础信息问答"} +{"question": "山西蓝焰控股股份有限公司2021年归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "茂业商业2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "桂林福达股份有限公司在2019年的管理费用率为多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "长期待摊费用是什么意思?", "intent": "专业名称解释"} +{"question": "2020年艾为电子营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年双飞股份的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "冠城大通2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "湖南友谊阿波罗商业股份有限公司2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "春立医疗2021年每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "氯碱化工2020年流动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是优先股、永续债等其他金融工具?", "intent": "专业名称解释"} +{"question": "鼎捷软件2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "金河生物科技股份有限公司2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年世荣兆业的年报中,其他非流动金融资产的金额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年大博医疗的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海矩子科技股份有限公司的归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "上海广电电气(集团)股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "中坚科技2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "上海雅运纺织化工股份有限公司2020年的研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请根据创业慧康2020年的年报,给我简要介绍一下报告期内公司的环境信息情况?", "intent": "报告解读分析"} +{"question": "文灿集团股份有限公司2019年的企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供杭州长川科技股份有限公司2021年的负债合计金额。", "intent": "年报基础信息问答"} +{"question": "贵州轮胎在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析浙江亚太药业股份有限公司2019年聘任、解聘会计师事务的情况。", "intent": "报告解读分析"} +{"question": "根据2020年的财务数据,晋亿实业的销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "金卡智能集团股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "北京威卡威汽车零部件股份有限公司2021年的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年北京合纵科技股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "武汉高德红外股份有限公司2021年研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "维康药业2021年的法定代表人与2020年相比是否相同?", "intent": "统计对比分析"} +{"question": "请提供重庆市迪马实业股份有限公司在2021年的总资产增长率,保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,京源环保在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "上海丽人丽妆化妆品股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年交通银行股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "新疆天山水泥股份有限公司2019年投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析山东航空股份有限公司2019年关键审计事项的情况。", "intent": "报告解读分析"} +{"question": "昆山新莱洁净应用材料股份有限公司在2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年得邦照明年报中研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "天域生态环境股份有限公司2020年净利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年浙江双箭橡胶股份有限公司流动负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "广西丰林木业集团股份有限公司2019年企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析新兴铸管股份有限公司2019年研发投入情况", "intent": "报告解读分析"} +{"question": "2021年人福医药衍生金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年柳化股份的年报,请简要介绍报告期内公司的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年浙江亿田智能厨电股份有限公司的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "预付款项的管理对公司的资金利用效率和供应链协调有何影响?", "intent": "专业名称解释"} +{"question": "中石科技在2020年的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "海南双成药业股份有限公司2020年综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "峨眉山旅游股份有限公司2020年的营业税金及附加金额是多少元?", "intent": "年报基础信息问答"} +{"question": "皓元医药2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问2021年索通发展股份有限公司的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年钢研纳克年报中管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "德马科技在2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,兰州佛慈制药股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广东佳兆业佳云科技股份有限公司2020年的营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广东红墙新材料股份有限公司2020年营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "拉芳家化2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "2019年西安旅游的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "什么是应付票据?", "intent": "专业名称解释"} +{"question": "2021年南京银行利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海科泰电源股份有限公司无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏弘业股份有限公司2021年的营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "北京必创科技股份有限公司2021年的固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "五矿发展2021年利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "浙江铁流离合器股份有限公司2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "中钨高新2020年的销售费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "根据2019年海峡股份的年报,营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "巨星农牧2021年法定代表人对比2020年是否相同?", "intent": "统计对比分析"} +{"question": "2021年新宝股份应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "英联股份在2020年的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广东丸美生物技术股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,在2019年的年报数据中,佳都科技集团股份有限公司的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年吉视传媒销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "康辰药业2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "合肥立方制药股份有限公司在2021年的营业利润增长率具体是多少,需要保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "根据2019年的年报数据,密尔克卫的2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华润微在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请问北纬科技在2020年的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "汇宇制药2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,深圳中天精装股份有限公司在2021年收回的投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年,腾达建设的流动比率是多少?请以两位小数表示。", "intent": "财务指标计算"} +{"question": "宁夏东方钽业股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问上海凯鑫在2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "粤传媒2019年营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年上海锦和商业经营管理股份有限公司财务费用是多少元?", "intent": "年报基础信息问答"} +{"question": "龙佰集团2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年百洋医药的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "资本回报率的计算方法和影响因素有哪些?", "intent": "专业名称解释"} +{"question": "2019年营口港企业硕士及以上人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏哈工智能机器人股份有限公司2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2021年,金马游乐的流动负债增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,仁和药业的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年金牌厨柜家居科技股份有限公司研发人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "凌云工业股份有限公司2020年的财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年吉祥航空的毛利率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年迈瑞医疗的注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年益海嘉里金龙鱼粮油食品股份有限公司净利润增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "法狮龙家居建材股份有限公司在2021年收回的投资现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年凯盛科技股份有限公司的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年数据港的管理费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "湖南千山制药机械股份有限公司在2021年的净利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "国新文化控股股份有限公司2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "工业富联2019年企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "会计期间如何定义?", "intent": "专业名称解释"} +{"question": "彩虹股份2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "必创科技2021年的无形资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "广东肇庆星湖生物科技股份有限公司2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "我乐家居2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2019年中颖电子注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "我想了解鹏起科技发展股份有限公司2021年净利润的增长率,结果需要保留两位小数。", "intent": "财务指标计算"} +{"question": "请问,西安中熔电气股份有限公司2020年年报数据中,公司的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是使用权资产?", "intent": "专业名称解释"} +{"question": "2019年中国铁建股份有限公司的三费比重是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年中国武夷每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "东莞铭普光磁股份有限公司2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "南京寒锐钴业股份有限公司2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年中国宝安集团股份有限公司对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请简要分析融钰集团股份有限公司2020年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "2020年胜宏科技(惠州)股份有限公司的非流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海环境在2019年的研发人员占职工人数的比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年江苏天奈科技股份有限公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年西菱动力营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "广西绿城水务股份有限公司2020年资产负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年浙江吉华集团股份有限公司的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年展鹏科技营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "芯原股份2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "研发费用对公司财务状况和经营绩效有什么影响?", "intent": "专业名称解释"} +{"question": "2020年上海机电公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "长城汽车2019年利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "无锡阿科力科技股份有限公司2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "苏州科达2020年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "广东九联科技股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2020年兴业科技的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "上海易连实业集团股份有限公司在2021年的每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "中金岭南2021年的法定代表人与2020年相比是否相同?", "intent": "统计对比分析"} +{"question": "红星发展在2021年的货币资金增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "流动资产金额过高和过低分别代表什么?", "intent": "专业名称解释"} +{"question": "2019年度,广发证券股份有限公司的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "奥维通信股份有限公司在2020年的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年亿联网络的企业研发经费与营业收入的比值是多少? 保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年比亚迪股份有限公司的资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "派克新材2021年每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中自科技应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中国中材国际工程股份有限公司管理费用率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年幸福蓝海办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "2020年保力新能源科技股份有限公司综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏硕世生物科技股份有限公司在2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2021年的年报数据,海鸥股份的2021年固定资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供君正集团2021年的营业利润金额为多少元?", "intent": "年报基础信息问答"} +{"question": "凯盛新能在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "四川浩物机电股份有限公司2020年净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "渝开发2019年管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江南化工在2020年的投资收益金额是多少元?", "intent": "年报基础信息问答"} +{"question": "万邦达2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山河智能在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "金牛化工在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年新疆众和股份有限公司固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年宝新能源公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "山东钢铁2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "罗牛山在2019年的企业研发经费与利润的比值是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年四川汇源光通信股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "你知道宏辉果蔬股份有限公司2019年的管理费用率吗?请保留2位小数。", "intent": "财务指标计算"} +{"question": "在2020年,江山股份的速动比率是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "2019年东南网架营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年的年报数据,东方锆业的管理费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "方正电机2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "长沙银行2019年利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年中国汽研企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年中国电信每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,锋尚文化的净利润增长率是多少,结果请保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2019年天普股份企业研发经费与营业收入比值是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长期股权投资的价值变动如何影响公司的净资产和盈利能力?", "intent": "专业名称解释"} +{"question": "上海复洁环保科技股份有限公司在2021年的营业利润增长率是多少,结果保留至小数点后两位?", "intent": "财务指标计算"} +{"question": "2020年武汉科前生物股份有限公司销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "三维控股集团股份有限公司2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2021年,普邦股份的营业收入增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "请简要分析上海信联信息发展股份有限公司2021年审计意见的情况。", "intent": "报告解读分析"} +{"question": "2019年辉煌科技的企业研发经费与营业收入比值是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年紫光股份每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年四川迅游网络科技股份有限公司的归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,航天时代电子技术股份有限公司在2019年的外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "三安光电股份有限公司2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "聆达股份2020年速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年珠海润都制药股份有限公司企业研发经费与营业收入比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中国太平洋保险(集团)股份有限公司2019年固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年上海医药集团股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "2020年一汽富维非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "北京神州泰岳软件股份有限公司2021年总负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "中远海科2019年的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "上海华鑫股份有限公司2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "根据2021年的年报,健友股份的现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "渤海汽车系统股份有限公司2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "通鼎互联信息股份有限公司2021年应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年思瑞浦的流动比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年广汇物流股份有限公司的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年爱科科技的公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "优利德科技(中国)股份有限公司在2021年的净利润增长率是多少?请以保留2位小数的形式给出。", "intent": "财务指标计算"} +{"question": "2021年隆平高科无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "沈阳商业城股份有限公司在2021年的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "富奥股份2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中广天择营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "天津市依依卫生用品股份有限公司在2021年的营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年上海开开实业股份有限公司的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "百川能源股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "雅克科技2021年其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年内蒙古伊泰煤炭股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "通富微电在2019年的三费(销售费用、管理费用和财务费用)占比是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "锦富技术2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "瑞达期货股份有限公司在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳可立克科技股份有限公司在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,绿城水务的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年湖北济川药业股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2021年首药控股资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "在上海数据港股份有限公司2021年的年度报告中,资产和负债变化的主要原因是什么?", "intent": "报告解读分析"} +{"question": "中顺洁柔纸业股份有限公司2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "帝欧家居集团股份有限公司2019年的三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年宁波联合投资收益占营业收入比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年英可瑞固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "肇民科技2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "无锡德林海环保科技股份有限公司在2019年的研发人员所占职工人数比例是多少,保留两位小数的精确度?", "intent": "财务指标计算"} +{"question": "2019年广汇物流股份有限公司证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "什么是负债和所有者权益总计?", "intent": "专业名称解释"} +{"question": "山东双一科技股份有限公司2020年营业收入和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "康力电梯股份有限公司在2019年的三费比重是多少,结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "苏农银行在2021年的利息支出具体是多少元?", "intent": "年报基础信息问答"} +{"question": "湖南新五丰股份有限公司2020年公允价值变动收益是多少元?", "intent": "年报基础信息问答"} +{"question": "重庆水务集团股份有限公司在2019年的毛利率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "昆仑万维科技股份有限公司在2021年的其他非流动金融资产值是多少元?", "intent": "年报基础信息问答"} +{"question": "西大门2019年研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年山西路桥股份有限公司毛利率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "长城科技在2019年的财务费用总额是多少元?", "intent": "年报基础信息问答"} +{"question": "请问达安基因在2021年的现金及现金等价物增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供顺络电子2019年的研发费用和财务费用分别为多少元?", "intent": "年报基础信息问答"} +{"question": "华丰股份2020年的营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "亚振家居2020年的财务费用增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "中科创达2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "海翔药业在2019年的营业成本率是多少?(保留2位小数)", "intent": "财务指标计算"} +{"question": "兆驰股份在2019年的研发人员占职工人数比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年,成飞集成的企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华峰测控2021年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏恒立液压股份有限公司2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "阳普医疗2019年的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,在2020年,中天科技的博士及以上学位的员工人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年三只松鼠股份有限公司对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中国振华(集团)科技股份有限公司的收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "江苏索普2021年的货币资金增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "东吴证券股份有限公司2021年的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年山西同德化工股份有限公司速动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江化微2019年研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问深圳高速公路集团股份有限公司在2019年的投资收益占营业收入比率是多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "醋化股份2019年营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年地素时尚股份有限公司企业研发经费与利润比值为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华映科技(集团)股份有限公司在2020年的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "华特气体2020年管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "福建福光股份有限公司2021年的现金及现金等价物增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "对比2020年,2021年江苏蔚蓝锂芯股份有限公司的法定代表人是否相同?", "intent": "统计对比分析"} +{"question": "合富(中国)医疗科技股份有限公司在2021年的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年航天时代电子技术股份有限公司的财务费用率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "密尔克卫化工供应链服务股份有限公司2019年注册地址是什么?", "intent": "年报基础信息问答"} +{"question": "深圳市迪威迅股份有限公司2021年期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "杰克科技股份有限公司在2019年的研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "物产金轮2021年年报数据中,总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中国农业银行股份有限公司利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "开元教育科技集团股份有限公司在2021年的固定资产增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华数传媒控股股份有限公司2021年的收回投资所收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "上海建工集团股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年湖南华菱线缆股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年爱尔眼科医院集团股份有限公司现金比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年上海永冠众诚新材料科技(集团)股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年青岛国林科技集团股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问2019年天茂集团的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2019年河南四方达超硬材料股份有限公司的营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "北京北摩高科摩擦材料股份有限公司在2020年的销售费用和管理费用分别为多少元?", "intent": "年报基础信息问答"} +{"question": "神驰机电在2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年海洋石油工程股份有限公司证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "苏州伟创电气科技股份有限公司2021年投资收益增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "什么是净利润?", "intent": "专业名称解释"} +{"question": "深圳市京基智农时代股份有限公司2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供力帆科技2020年的营业外收入,单位为元。", "intent": "年报基础信息问答"} +{"question": "协鑫能源科技股份有限公司2021年的投资收益增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "根据内蒙古福瑞医疗科技股份有限公司2021年年报,该报告期内公司的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,陕西航天动力高科技股份有限公司期末现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "结合2019年山东金岭矿业股份有限公司的年报信息,请简要分析该公司研发投入的情况。", "intent": "报告解读分析"} +{"question": "中泰证券股份有限公司在2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2019年,广东蒙泰高新纤维股份有限公司的研发人员数量是多少?", "intent": "年报基础信息问答"} +{"question": "赛隆药业集团股份有限公司2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "请告知中铁特货2021年的无形资产金额是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年上海神奇制药投资管理股份有限公司营业收入增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "邮储银行在2019年的利息收入是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年海控南海发展股份有限公司研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "山东益生种畜禽股份有限公司2019年营业外支出和营业外收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "华金资本2019年证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "宁波长阳科技股份有限公司2019年硕士人数是什么?", "intent": "年报基础信息问答"} +{"question": "2020年上海梅林管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年丽岛新材货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供2020年巨力索具股份有限公司的资产负债比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "温州意华接插件股份有限公司2021年收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "资本支出对公司的技术更新和资本配置的影响如何评估?", "intent": "专业名称解释"} +{"question": "在2019年,大众公用企业中硕士及以上人员占职工人数的比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "绍兴贝斯美化工股份有限公司在2020年的流动比率是多少,结果请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年大元泵业营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年中金黄金归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "新奥天然气股份有限公司2019年的证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "2020年湖南领湃达志科技股份有限公司的销售费用增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "冀中能源股份有限公司在2021年收回的投资所得到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "在2020年,华自科技的净利润率是多少?结果请保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年深圳市汇创达科技股份有限公司货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "卓胜微2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "众信旅游集团股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年凯马股份研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "营业收入的增长率如何反映公司的市场竞争力和增长潜力?", "intent": "专业名称解释"} +{"question": "请问,新疆天业在2021年的投资收益增长率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析华数传媒控股股份有限公司2020年公司股权激励计划、员工持股计划或其他员工激励措施的实施情况", "intent": "报告解读分析"} +{"question": "上海步科自动化股份有限公司2020年的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "应收票据的到期和违约对公司的现金流和信用风险有何影响?", "intent": "专业名称解释"} +{"question": "浙江金道科技股份有限公司在2021年的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "艾迪药业2020年的营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "中国中车2019年的法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "根据宏达股份2019年的年报,研发人员数是多少?", "intent": "年报基础信息问答"} +{"question": "江苏飞力达国际物流股份有限公司2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "三生国健在2020年的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "固定资产的折旧政策如何影响公司的财务状况和税务成本?", "intent": "专业名称解释"} +{"question": "山东瑞丰高分子材料股份有限公司在2020年的速动比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "鸿利智汇在2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年内蒙古伊泰煤炭股份有限公司企业研发经费占费用比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "浙江大洋生物科技集团股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "万孚生物2019年的三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年杭州安旭生物科技股份有限公司的营业利润增长率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "光库科技在2019年的企业名称是什么?", "intent": "年报基础信息问答"} +{"question": "国机汽车股份有限公司2021年货币资金增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年沙河实业股份有限公司外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "宁波合力科技股份有限公司在2019年的硕士人数是多少?", "intent": "年报基础信息问答"} +{"question": "从2021年的年报数据可知,江西沐邦高科股份有限公司的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "请问2020年的泰恩康的速动比率是多少?请保留角和分。", "intent": "财务指标计算"} +{"question": "什么是应付利息?", "intent": "专业名称解释"} +{"question": "请问,2021年百利科技的应收款项融资是多少元?", "intent": "年报基础信息问答"} +{"question": "哈尔滨空调股份有限公司2021年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "锦州永杉锂业股份有限公司2021年现金及现金等价物增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年复旦微电的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中航重机股份有限公司利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "华能水电在2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "在2021年,康缘药业的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "资本回报率和投资回报率有何区别?", "intent": "专业名称解释"} +{"question": "2021年东方财富信息股份有限公司衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年诺邦股份营业利润率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2019年中建西部建设股份有限公司的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "广州金逸影视传媒股份有限公司在2019年的技术人员数是多少?", "intent": "年报基础信息问答"} +{"question": "祖名股份在2020年的销售费用具体为多少元?", "intent": "年报基础信息问答"} +{"question": "涪陵榨菜公司在2019年的研发费用和财务费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年东莞市鼎通精密科技股份有限公司投资收益增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请简要分析陕西广电网络传媒(集团)股份有限公司2020年核心竞争力的情况。", "intent": "报告解读分析"} +{"question": "浙商证券股份有限公司2021年利息支出是多少元?", "intent": "年报基础信息问答"} +{"question": "记账本位币是什么意思?", "intent": "专业名称解释"} +{"question": "2019年盐田港企业的硕士及以上人员占职工人数比例是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "晨光新材2019年的职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "浙江美大在2019年的营业利润率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年华夏银行的企业硕士及以上人员占职工人数比例是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年山东金城医药集团股份有限公司的速动比率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "什么是营业成本?", "intent": "专业名称解释"} +{"question": "四川金石亚洲医药股份有限公司2021年货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年雅化集团研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "森霸传感科技股份有限公司2019年财务费用率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "青岛城市传媒股份有限公司2020年的管理费用增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "中国海防2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年正强股份的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年河南双汇投资发展股份有限公司的利息支出和利息收入分别是多少元?", "intent": "年报基础信息问答"} +{"question": "瑞可达2020年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年广州达安基因股份有限公司净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "泰禾智能在2020年的企业研发经费与营业收入的比值保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "湖南南新制药股份有限公司2019年的营业外支出和营业外收入具体数额是多少?", "intent": "年报基础信息问答"} +{"question": "广州中海达卫星导航技术股份有限公司2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年双箭股份的公允价值变动收益为多少元?", "intent": "年报基础信息问答"} +{"question": "根据2020年的年报数据,双乐股份的营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,龙宇股份2021年的其他非流动金融资产是多少元?", "intent": "年报基础信息问答"} +{"question": "鲁阳节能2020年管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请告诉我2020年威海广泰空港设备股份有限公司流动比率的具体数值,结果需保留两位小数。", "intent": "财务指标计算"} +{"question": "2019年拓维信息技术的员工人数是多少?", "intent": "年报基础信息问答"} +{"question": "广东富信科技股份有限公司2020年利润总额和净利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "根据2019年红宝丽的年报,请简要介绍报告期内公司主要销售客户客户集中度如何?请结合同行业情况简要分析。", "intent": "报告解读分析"} +{"question": "2019年乐普医疗企业研发经费占费用比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年东风股份营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,富临运业在2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年钱江生化综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "在2021年,镇洋发展的归属母公司所有者净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "中新苏州工业园区开发集团股份有限公司在2019年的电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2020年长春致远新能源装备股份有限公司营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "深圳市联赢激光股份有限公司2021年营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年川仪股份的资产总计是多少元?", "intent": "年报基础信息问答"} +{"question": "万华化学2020年的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "2020年鹏鹞环保股份有限公司销售费用是多少元?", "intent": "年报基础信息问答"} +{"question": "亚翔集成在2019年的企业研发经费占费用比例保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "华贸物流2019年三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "在2019年,西子清洁能源装备制造股份有限公司的三费比重为多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "上海移远通信技术股份有限公司2019年电子信箱是什么?", "intent": "年报基础信息问答"} +{"question": "2021年湖北楚天智能交通股份有限公司收回投资收到的现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2021年玉禾田研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "山东出版2021年营业收入增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2021年的年报数据,华熙生物科技股份有限公司的每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年五矿发展的三费比重保留两位小数是多少?", "intent": "财务指标计算"} +{"question": "中建环能科技股份有限公司在2021年的负债合计是多少元?", "intent": "年报基础信息问答"} +{"question": "请提供福星股份2021年的无形资产金额为多少元?", "intent": "年报基础信息问答"} +{"question": "东软集团在2021年收回的投资现金是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年上海电力三费比重是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年名家汇销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年合肥丰乐种业股份有限公司资产负债比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "抚顺特殊钢股份有限公司在2019年的企业研发经费占费用比例是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年甬金股份营业收入是多少元?", "intent": "年报基础信息问答"} +{"question": "亚光科技集团股份有限公司2021年流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年新疆伊力特实业股份有限公司管理费用增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2020年佰仁医疗利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "奥士康科技股份有限公司在2019年的固定资产和无形资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "黑龙江国中水务股份有限公司在2020年的营业利润率为多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2021年张小泉股份有限公司每股收益和每股净资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2019年合肥百货大楼集团股份有限公司的法定代表人是谁?", "intent": "年报基础信息问答"} +{"question": "资本回报率的计算公式是什么?", "intent": "专业名称解释"} +{"question": "2021年华瑞股份固定资产是多少元?", "intent": "年报基础信息问答"} +{"question": "广博集团股份有限公司2021年的营业利润是多少元?", "intent": "年报基础信息问答"} +{"question": "博通股份2019年公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "2021年东方国信无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "星源材质2020年的净利润率是多少?保留两位小数。", "intent": "财务指标计算"} +{"question": "保变电气在2020年的流动负债比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年石家庄以岭药业股份有限公司营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "请问在2020年,中天能源的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年德美化工营业成本率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏纽泰格科技集团股份有限公司在2020年的管理费用是多少元?", "intent": "年报基础信息问答"} +{"question": "厦门盈趣科技股份有限公司2019年的三费比重保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "郑中设计2021年的无形资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "根据2019年的年报数据,广电计量检测集团股份有限公司的职工总数是什么?", "intent": "年报基础信息问答"} +{"question": "江苏精研科技股份有限公司2020年的非流动负债比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "江苏雷利2021年的无形资产是多少元?", "intent": "年报基础信息问答"} +{"question": "广东金明精机股份有限公司2020年的速动比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问,山东金麒麟股份有限公司在2020年的财务费用增长率是多少?请保留至小数点后两位。", "intent": "财务指标计算"} +{"question": "2021年金浦钛业股份有限公司的流动负债增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "华立科技2021年每股经营现金流量是多少元?", "intent": "年报基础信息问答"} +{"question": "隆华科技2020年财务费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "万邦德医药控股集团股份有限公司2021年营业成本是多少元?", "intent": "年报基础信息问答"} +{"question": "请问东贝电器在2019年的公司网址是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2021年长春一东离合器股份有限公司期末的现金及现金等价物余额是多少元?", "intent": "年报基础信息问答"} +{"question": "浙海德曼在2021年的净利润增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "请问在2019年,卫宁健康的办公地址是什么?", "intent": "年报基础信息问答"} +{"question": "油气资产是什么意思?", "intent": "专业名称解释"} +{"question": "深水海纳水务集团股份有限公司2020年的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "华东医药2020年利润总额是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年湖南华纳大药厂股份有限公司营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年成都国光电气股份有限公司的每股净资产是多少元?", "intent": "年报基础信息问答"} +{"question": "成都燃气集团股份有限公司2020年营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "2019年株洲时代新材料科技股份有限公司研发人员数是什么?", "intent": "年报基础信息问答"} +{"question": "博敏电子在2021年的流动负债增长率是多少,保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年江龙船艇管理费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供2019年大众交通的流动比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "政府补助是什么意思?", "intent": "专业名称解释"} +{"question": "财务报表中的“其他综合收益”是指什么?", "intent": "专业名称解释"} +{"question": "应付票据和应付账款的管理对公司的流动性和信用风险有何影响?", "intent": "专业名称解释"} +{"question": "长飞光纤光缆股份有限公司2019年法定代表人是什么?", "intent": "年报基础信息问答"} +{"question": "2021年莱伯泰科的营业利润增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "东港股份有限公司在2020年的销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年拓日新能的现金比率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年万里股份营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "亚太科技2021年的货币资金是多少元?", "intent": "年报基础信息问答"} +{"question": "极米科技2021年营业利润增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "新诺威在2019年的证券代码是什么?", "intent": "年报基础信息问答"} +{"question": "2020年昆山科森科技股份有限公司对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年精工钢构的流动比率具体是多少?请给出保留两位小数的答案。", "intent": "财务指标计算"} +{"question": "金迪克2020年的营业外支出是多少元?", "intent": "年报基础信息问答"} +{"question": "债权投资的定义是什么?", "intent": "专业名称解释"} +{"question": "2020年,巨化股份的现金比率是多少?请保留2位小数。", "intent": "财务指标计算"} +{"question": "营业周期是指什么?", "intent": "专业名称解释"} +{"question": "2020年韩建河山营业税金及附加是多少元?", "intent": "年报基础信息问答"} +{"question": "洲际油气2021年的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "华天酒店2020年法定代表人对比2019年是否相同?", "intent": "统计对比分析"} +{"question": "你能告诉我2020年山东赫达的营业收入和营业外收入各是多少吗?", "intent": "年报基础信息问答"} +{"question": "汤姆猫2021年总资产增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "股份支付是什么意思?", "intent": "专业名称解释"} +{"question": "什么是短期借款?", "intent": "专业名称解释"} +{"question": "安集微电子科技(上海)股份有限公司在2021年的衍生金融资产和其他非流动金融资产分别是多少元?", "intent": "年报基础信息问答"} +{"question": "生物资产是指什么?", "intent": "专业名称解释"} +{"question": "在2020年度报告中,苏州固锝电子股份有限公司的博士及以上人数是多少?", "intent": "年报基础信息问答"} +{"question": "请提供云海金属在2019年的投资收益占营业收入的比率,保留两位小数。", "intent": "财务指标计算"} +{"question": "乾照光电在2021年的货币资金增长率保留到小数点后两位是多少?", "intent": "财务指标计算"} +{"question": "2019年明新旭腾的研发费用和财务费用分别为多少元?", "intent": "年报基础信息问答"} +{"question": "2020年博世科的综合收益总额是多少元?", "intent": "年报基础信息问答"} +{"question": "新疆青松建材化工(集团)股份有限公司在2019年的职工总人数是多少?", "intent": "年报基础信息问答"} +{"question": "2021年海目星的应收款项融资总额是多少元?", "intent": "年报基础信息问答"} +{"question": "上海安路信息科技股份有限公司2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,根据2021年的年报数据,安徽龙磁科技股份有限公司的营业利润增长率是多少,结果保留2位小数?", "intent": "财务指标计算"} +{"question": "合兴汽车电子股份有限公司2020年研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "请问,2021年科沃斯的总负债增长率是多少,保留两位小数?", "intent": "财务指标计算"} +{"question": "2020年吉林敖东药业集团股份有限公司研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年中国振华(集团)科技股份有限公司流动比率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年通润装备的期末现金及现金等价物余额有多少元?", "intent": "年报基础信息问答"} +{"question": "请提供中国电影公司2020年的净利润率,保留两位小数。", "intent": "财务指标计算"} +{"question": "国电南自2019年外文名称是什么?", "intent": "年报基础信息问答"} +{"question": "2019年赛伍技术研发人员占职工人数比例是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "首航高科2020年销售费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请问创意信息技术股份有限公司在2020年的综合收益总额是多少?", "intent": "年报基础信息问答"} +{"question": "什么是其他应收款?", "intent": "专业名称解释"} +{"question": "深圳汇洁集团股份有限公司2020年现金比率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "请提供海泰科2020年的管理费用金额。", "intent": "年报基础信息问答"} +{"question": "大中矿业2021年销售费用和管理费用分别是多少元?", "intent": "年报基础信息问答"} +{"question": "海天瑞声在2021年的净利润增长率是多少? 请保留两位小数。", "intent": "财务指标计算"} +{"question": "联德股份2020年营业成本和营业利润分别是多少元?", "intent": "年报基础信息问答"} +{"question": "重庆市涪陵榨菜集团股份有限公司2019年证券简称是什么?", "intent": "年报基础信息问答"} +{"question": "贵州三力制药股份有限公司2019年技术人员数是什么?", "intent": "年报基础信息问答"} +{"question": "请问,2020年艾可蓝的所得税费用是多少元?", "intent": "年报基础信息问答"} +{"question": "浪潮软件在2019年的企业研发经费与营业收入比值是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "龙软科技2020年对联营企业和合营企业的投资收益是多少元?", "intent": "年报基础信息问答"} +{"question": "派生科技在2021年的应收款项融资有多少元?", "intent": "年报基础信息问答"} +{"question": "2020年苏州天准科技股份有限公司企业硕士及以上人员占职工人数比例为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "2021年东方海洋的营业收入增长率是多少?请保留两位小数。", "intent": "财务指标计算"} +{"question": "2020年红星发展的营业外收入是多少元?", "intent": "年报基础信息问答"} +{"question": "什么是净资产收益率?", "intent": "专业名称解释"} +{"question": "2021年鹏欣环球资源股份有限公司总资产增长率为多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "苏州东微半导体股份有限公司在2021年归属于母公司所有者的净利润是多少元?", "intent": "年报基础信息问答"} +{"question": "2020年顺威股份研发费用增长率是多少?保留2位小数。", "intent": "财务指标计算"} +{"question": "预计负债是指什么?", "intent": "专业名称解释"} +{"question": "根据鸿博股份有限公司2020年的年报,该报告期内公司的研发费用是多少元?", "intent": "年报基础信息问答"} +{"question": "有友食品股份有限公司2021年应付职工薪酬是多少元?", "intent": "年报基础信息问答"} \ No newline at end of file diff --git a/src/dbgpt-hub-nlu/datasets/financial_report/data/ner.xlsx b/src/dbgpt-hub-nlu/datasets/financial_report/data/ner.xlsx new file mode 100644 index 00000000..162a502a Binary files /dev/null and b/src/dbgpt-hub-nlu/datasets/financial_report/data/ner.xlsx differ diff --git a/src/dbgpt-hub-nlu/datasets/financial_report/financial_report.py b/src/dbgpt-hub-nlu/datasets/financial_report/financial_report.py new file mode 100644 index 00000000..c39ef5f2 --- /dev/null +++ b/src/dbgpt-hub-nlu/datasets/financial_report/financial_report.py @@ -0,0 +1,69 @@ +import json +import os + +import datasets +from datasets.tasks import TextClassification + +logger = datasets.logging.get_logger(__name__) + + +class FinancialReport(datasets.GeneratorBasedBuilder): + VERSION = datasets.Version("1.0.0") + + BUILDER_CONFIGS = [ + datasets.BuilderConfig( + name="financial_report", + version=VERSION, + description="基金年报问答数据集", + ), + ] + + def __init__(self, *args, **kwargs): + self._data_dir = kwargs["data_dir"] + self._base_path = kwargs["base_path"] + self._data_path = os.path.join( + self._base_path, "data", "financial_report.jsonl" + ) + super().__init__(*args, **kwargs) + + def _info(self) -> datasets.DatasetInfo: + features = datasets.Features( + { + "text": datasets.Value("string"), + "label": datasets.ClassLabel( + names=[ + "年报基础信息问答", + "财务指标计算", + "专业名称解释", + "报告解读分析", + "统计对比分析", + ] + ), + } + ) + return datasets.DatasetInfo( + features=features, + description="基金年报问答数据集", + task_templates=[ + TextClassification(text_column="text", label_column="label") + ], + ) + + def _split_generators(self, dl_manager): + return [ + datasets.SplitGenerator( + name=datasets.Split.TRAIN, gen_kwargs={"filepath": self._data_path} + ), + ] + + def _generate_examples(self, filepath): + """Snips built in intent examples.""" + num_examples = 0 + with open(filepath, "r", encoding="utf-8") as f: + for idx, line in enumerate(f): + data = json.loads(line) + yield idx, { + "text": data["question"], + "label": data["intent"], + } + num_examples += 1 diff --git a/dbgpt_hub/data_process/connectors/__init__.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/__init__.py similarity index 100% rename from dbgpt_hub/data_process/connectors/__init__.py rename to src/dbgpt-hub-nlu/dbgpt_hub_nlu/__init__.py diff --git a/dbgpt_hub/dataset_util/__init__.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/__init__.py similarity index 100% rename from dbgpt_hub/dataset_util/__init__.py rename to src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/__init__.py diff --git a/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/dataset.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/dataset.py new file mode 100644 index 00000000..742a90e4 --- /dev/null +++ b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/dataset.py @@ -0,0 +1,50 @@ +import os +from dataclasses import dataclass, field +from typing import Optional + + +@dataclass +class DataArguments: + dataset: str = field( + default="financial_report", + metadata={"help": "The name of the dataset to use."}, + ) + dataset_dir: str = field( + default="./datasets", + metadata={"help": "The name of the folder containing datasets."}, + ) + + max_train_samples: Optional[int] = field( + default=None, + metadata={ + "help": "For debugging purposes or quicker training, truncate the number of training examples to this " + "value if set." + }, + ) + + max_val_samples: Optional[int] = field( + default=None, + metadata={ + "help": "For debugging purposes or quicker training, truncate the number of validation or test examples to this " + "value if set." + }, + ) + + def get_dataset_path(self): + if os.path.exists(self.dataset): + abs_path = os.path.abspath(self.dataset) + return abs_path + abs_path = os.path.abspath(os.path.join(self.dataset_dir, self.dataset)) + return abs_path + + +@dataclass +class InferArguments: + do_infer: bool = field( + default=False, + metadata={"help": "Whether to perform inference."}, + ) + input_text: Optional[str] = field( + default=None, + metadata={"help": "The text to perform inference on."}, + ) diff --git a/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/model_args.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/model_args.py new file mode 100644 index 00000000..28516785 --- /dev/null +++ b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/config/model_args.py @@ -0,0 +1,112 @@ +from dataclasses import dataclass, field +from typing import Optional + +from transformers import TrainingArguments + + +@dataclass +class NLUTrainingArguments(TrainingArguments): + output_dir: str = field( + default="output", + metadata={ + "help": "The output directory where the model predictions and checkpoints will be written." + }, + ) + num_train_epochs: int = field( + default=5, metadata={"help": "Specify number of epochs, default 5"} + ) + per_device_train_batch_size: int = field( + default=8, metadata={"help": "Specify number of batch size, default 8"} + ) + learning_rate: float = field( + default=1e-4, metadata={"help": "Specify learning rate, default 1e-4"} + ) + weight_decay: float = field( + default=0.01, metadata={"help": "Specify weight decay, default 0.01"} + ) + do_train: bool = field(default=True, metadata={"help": "Whether to run training."}) + evaluation_strategy: str = field( + default="epoch", + metadata={"help": "The evaluation strategy to use."}, + ) + save_strategy: str = field( + default="epoch", + metadata={"help": "The save strategy to use."}, + ) + load_best_model_at_end: bool = field( + default=True, + metadata={"help": "Whether to load the best model at the end of training."}, + ) + + +@dataclass +class ModelArguments: + """Arguments pertaining to which model/config/tokenizer we are going to fine-tune from.""" + + base_model_name_or_path: str = field( + metadata={ + "help": "Path to pretrained model or model identifier from huggingface.co/models" + } + ) + + base_tokenizer_name: Optional[str] = field( + default=None, + metadata={ + "help": "Base pretrained tokenizer name or path if not the same as model_name" + }, + ) + + config_name: Optional[str] = field( + default=None, + metadata={ + "help": "Pretrained config name or path if not the same as model_name" + }, + ) + tokenizer_name: Optional[str] = field( + default=None, + metadata={ + "help": "Pretrained tokenizer name or path if not the same as model_name" + }, + ) + cache_dir: Optional[str] = field( + default=None, + metadata={ + "help": "Where to store the pretrained models downloaded from huggingface.co" + }, + ) + use_fast_tokenizer: bool = field( + default=True, + metadata={ + "help": "Whether to use one of the fast tokenizer (backed by the tokenizers library) or not." + }, + ) + model_revision: str = field( + default="main", + metadata={ + "help": "The specific model version to use (can be a branch name, tag name or commit id)." + }, + ) + use_auth_token: bool = field( + default=False, + metadata={ + "help": "Will use the token generated when running `transformers-cli login` (necessary to use this script " + "with private models)." + }, + ) + + lora_r: int = field( + default=8, + metadata={"help": "Lora R dimension"}, + ) + lora_alpha: int = field( + default=32, + metadata={"help": "Lora alpha parameter"}, + ) + lora_dropout: float = field( + default=0.1, + metadata={"help": "Lora dropout probability"}, + ) + max_length: int = field( + default=512, + metadata={"help": "Maximum input sequence length"}, + ) diff --git a/dbgpt_hub/output/adapter/.gitkeep b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/__init__.py similarity index 100% rename from dbgpt_hub/output/adapter/.gitkeep rename to src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/__init__.py diff --git a/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/qwen.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/qwen.py new file mode 100644 index 00000000..3255f956 --- /dev/null +++ b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/qwen.py @@ -0,0 +1,466 @@ +import logging +import os + +from transformers.modeling_attn_mask_utils import ( + _prepare_4d_causal_attention_mask, + _prepare_4d_causal_attention_mask_for_sdpa, +) +from transformers.modeling_outputs import TokenClassifierOutput +from transformers.models.qwen2.modeling_qwen2 import * + +# set start index, default is 0. If set to -1, it will disable BiLLM. +START_INDEX = int(os.getenv("START_INDEX", 0)) + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger("dbgpt_hub_nlu.model.qwen") + + +class Qwen2Model(Qwen2PreTrainedModel): + """ + Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`Qwen2DecoderLayer`] + + Args: + config: Qwen2Config + """ + + def __init__(self, config: Qwen2Config): + super().__init__(config) + self.padding_idx = config.pad_token_id + self.vocab_size = config.vocab_size + + self.embed_tokens = nn.Embedding( + config.vocab_size, config.hidden_size, self.padding_idx + ) + self.bidirectionas = [ + START_INDEX > -1 and layer_idx >= START_INDEX + for layer_idx in range(config.num_hidden_layers) + ] + self.layers = nn.ModuleList( + [ + Qwen2DecoderLayer(config, layer_idx) + for layer_idx in range(config.num_hidden_layers) + ] + ) + self._attn_implementation = config._attn_implementation + self.norm = Qwen2RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + + self.gradient_checkpointing = False + # Initialize weights and apply final processing + self.post_init() + if START_INDEX > -1: + logger.info(f"Here is the Qwen2 model! START_INDEX={START_INDEX}") + else: + logger.info(f"START_INDEX={START_INDEX}") + + def get_input_embeddings(self): + return self.embed_tokens + + def set_input_embeddings(self, value): + self.embed_tokens = value + + @add_start_docstrings_to_model_forward(QWEN2_INPUTS_DOCSTRING) + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPast]: + output_attentions = ( + output_attentions + if output_attentions is not None + else self.config.output_attentions + ) + output_hidden_states = ( + output_hidden_states + if output_hidden_states is not None + else self.config.output_hidden_states + ) + use_cache = use_cache if use_cache is not None else self.config.use_cache + + return_dict = ( + return_dict if return_dict is not None else self.config.use_return_dict + ) + + # retrieve input_ids and inputs_embeds + if input_ids is not None and inputs_embeds is not None: + raise ValueError( + "You cannot specify both decoder_input_ids and decoder_inputs_embeds at the same time" + ) + elif input_ids is not None: + batch_size, seq_length = input_ids.shape + elif inputs_embeds is not None: + batch_size, seq_length, _ = inputs_embeds.shape + else: + raise ValueError( + "You have to specify either decoder_input_ids or decoder_inputs_embeds" + ) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning_once( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + past_key_values_length = 0 + + if use_cache: + use_legacy_cache = not isinstance(past_key_values, Cache) + if use_legacy_cache: + past_key_values = DynamicCache.from_legacy_cache(past_key_values) + past_key_values_length = past_key_values.get_usable_length(seq_length) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange( + past_key_values_length, + seq_length + past_key_values_length, + dtype=torch.long, + device=device, + ) + position_ids = position_ids.unsqueeze(0).view(-1, seq_length) + else: + position_ids = position_ids.view(-1, seq_length).long() + + if inputs_embeds is None: + inputs_embeds = self.embed_tokens(input_ids) + + if ( + attention_mask is not None + and self._attn_implementation == "flash_attention_2" + and use_cache + ): + is_padding_right = attention_mask[:, -1].sum().item() != batch_size + if is_padding_right: + raise ValueError( + "You are attempting to perform batched generation with padding_side='right'" + " this may lead to unexpected behaviour for Flash Attention version of Qwen2. Make sure to " + " call `tokenizer.padding_side = 'left'` before tokenizing the input. " + ) + + if self._attn_implementation == "flash_attention_2": + # 2d mask is passed through the layers + attention_mask = ( + attention_mask + if (attention_mask is not None and 0 in attention_mask) + else None + ) + elif self._attn_implementation == "sdpa" and not output_attentions: + # output_attentions=True can not be supported when using SDPA, and we fall back on + # the manual implementation that requires a 4D causal mask in all cases. + attention_mask = _prepare_4d_causal_attention_mask_for_sdpa( + attention_mask, + (batch_size, seq_length), + inputs_embeds, + past_key_values_length, + ) + else: + # 4d mask is passed through the layers + attention_mask = _prepare_4d_causal_attention_mask( + attention_mask, + (batch_size, seq_length), + inputs_embeds, + past_key_values_length, + sliding_window=self.config.sliding_window, + ) + bi_attention_mask = ( + torch.zeros_like(attention_mask) if attention_mask is not None else None + ) + + hidden_states = inputs_embeds + + # decoder layers + all_hidden_states = () if output_hidden_states else None + all_self_attns = () if output_attentions else None + next_decoder_cache = None + + for is_bidirectional, decoder_layer in zip(self.bidirectionas, self.layers): + if output_hidden_states: + all_hidden_states += (hidden_states,) + + if self.gradient_checkpointing and self.training: + layer_outputs = self._gradient_checkpointing_func( + decoder_layer.__call__, + hidden_states, + bi_attention_mask if is_bidirectional else attention_mask, + position_ids, + past_key_values, + output_attentions, + use_cache, + ) + else: + layer_outputs = decoder_layer( + hidden_states, + attention_mask=bi_attention_mask + if is_bidirectional + else attention_mask, + position_ids=position_ids, + past_key_value=past_key_values, + output_attentions=output_attentions, + use_cache=use_cache, + ) + + hidden_states = layer_outputs[0] + + if use_cache: + next_decoder_cache = layer_outputs[2 if output_attentions else 1] + + if output_attentions: + all_self_attns += (layer_outputs[1],) + + hidden_states = self.norm(hidden_states) + + # add hidden states from the last decoder layer + if output_hidden_states: + all_hidden_states += (hidden_states,) + + next_cache = None + if use_cache: + next_cache = ( + next_decoder_cache.to_legacy_cache() + if use_legacy_cache + else next_decoder_cache + ) + + if not return_dict: + return tuple( + v + for v in [hidden_states, next_cache, all_hidden_states, all_self_attns] + if v is not None + ) + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=next_cache, + hidden_states=all_hidden_states, + attentions=all_self_attns, + ) + + +@add_start_docstrings( + """ + The Qwen2 Model transformer with a sequence classification head on top (linear layer). + + [`Qwen2ForSequenceClassification`] uses the last token in order to do the classification, as other causal models + (e.g. GPT-2) do. + + Since it does classification on the last token, it requires to know the position of the last token. If a + `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If + no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the + padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in + each row of the batch). + """, + QWEN2_START_DOCSTRING, +) +class Qwen2ForSequenceClassification(Qwen2PreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.num_labels = config.num_labels + self.model = Qwen2Model(config) + self.score = nn.Linear(config.hidden_size, self.num_labels, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.model.embed_tokens + + def set_input_embeddings(self, value): + self.model.embed_tokens = value + + @add_start_docstrings_to_model_forward(QWEN2_INPUTS_DOCSTRING) + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, SequenceClassifierOutputWithPast]: + r""" + labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*): + Labels for computing the sequence classification/regression loss. Indices should be in `[0, ..., + config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If + `config.num_labels > 1` a classification loss is computed (Cross-Entropy). + """ + return_dict = ( + return_dict if return_dict is not None else self.config.use_return_dict + ) + + transformer_outputs = self.model( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + hidden_states = transformer_outputs[0] + logits = self.score(hidden_states) + + if input_ids is not None: + batch_size = input_ids.shape[0] + else: + batch_size = inputs_embeds.shape[0] + + if self.config.pad_token_id is None and batch_size != 1: + raise ValueError( + "Cannot handle batch sizes > 1 if no padding token is defined." + ) + if self.config.pad_token_id is None: + sequence_lengths = -1 + else: + if input_ids is not None: + # if no pad token found, use modulo instead of reverse indexing for ONNX compatibility + sequence_lengths = ( + torch.eq(input_ids, self.config.pad_token_id).int().argmax(-1) - 1 + ) + sequence_lengths = sequence_lengths % input_ids.shape[-1] + sequence_lengths = sequence_lengths.to(logits.device) + else: + sequence_lengths = -1 + + pooled_logits = logits[ + torch.arange(batch_size, device=logits.device), sequence_lengths + ] + + loss = None + if labels is not None: + labels = labels.to(logits.device) + if self.config.problem_type is None: + if self.num_labels == 1: + self.config.problem_type = "regression" + elif self.num_labels > 1 and ( + labels.dtype == torch.long or labels.dtype == torch.int + ): + self.config.problem_type = "single_label_classification" + else: + self.config.problem_type = "multi_label_classification" + + if self.config.problem_type == "regression": + loss_fct = MSELoss() + if self.num_labels == 1: + loss = loss_fct(pooled_logits.squeeze(), labels.squeeze()) + else: + loss = loss_fct(pooled_logits, labels) + elif self.config.problem_type == "single_label_classification": + loss_fct = CrossEntropyLoss() + loss = loss_fct( + pooled_logits.view(-1, self.num_labels), labels.view(-1) + ) + elif self.config.problem_type == "multi_label_classification": + loss_fct = BCEWithLogitsLoss() + loss = loss_fct(pooled_logits, labels) + if not return_dict: + output = (pooled_logits,) + transformer_outputs[1:] + return ((loss,) + output) if loss is not None else output + + return SequenceClassifierOutputWithPast( + loss=loss, + logits=pooled_logits, + past_key_values=transformer_outputs.past_key_values, + hidden_states=transformer_outputs.hidden_states, + attentions=transformer_outputs.attentions, + ) + + +@add_start_docstrings( + """ + The Qwen2 Model transformer with a token classification head on top (linear layer). + """, + QWEN2_START_DOCSTRING, +) +class Qwen2ForTokenClassification(Qwen2PreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.num_labels = config.num_labels + self.model = Qwen2Model(config) + if ( + hasattr(config, "classifier_dropout") + and config.classifier_dropout is not None + ): + classifier_dropout = config.classifier_dropout + elif hasattr(config, "hidden_dropout") and config.hidden_dropout is not None: + classifier_dropout = config.hidden_dropout + else: + classifier_dropout = 0.1 + self.dropout = nn.Dropout(classifier_dropout) + self.classifier = nn.Linear(config.hidden_size, config.num_labels) + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.model.embed_tokens + + def set_input_embeddings(self, value): + self.model.embed_tokens = value + + @add_start_docstrings_to_model_forward(QWEN2_INPUTS_DOCSTRING) + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, TokenClassifierOutput]: + r""" + labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*): + Labels for computing the sequence classification/regression loss. Indices should be in `[0, ..., + config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If + `config.num_labels > 1` a classification loss is computed (Cross-Entropy). + """ + return_dict = ( + return_dict if return_dict is not None else self.config.use_return_dict + ) + + outputs = self.model( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + sequence_output = outputs[0] + + sequence_output = self.dropout(sequence_output) + logits = self.classifier(sequence_output) + + loss = None + if labels is not None: + loss_fct = CrossEntropyLoss() + loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) + + if not return_dict: + output = (logits,) + outputs[2:] + return ((loss,) + output) if loss is not None else output + + return TokenClassifierOutput( + loss=loss, + logits=logits, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) diff --git a/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/simple.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/simple.py new file mode 100644 index 00000000..d285883e --- /dev/null +++ b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/model/simple.py @@ -0,0 +1,53 @@ +import json + +import torch +from torch import nn + + +class SimpleIntentClassifier(nn.Module): + def __init__(self, input_dim: int, num_classes: int): + super(SimpleIntentClassifier, self).__init__() + self.fc1 = nn.Linear(input_dim, 128) + self.fc2 = nn.Linear(128, num_classes) + self.relu = nn.ReLU() + + def forward(self, input_ids, intent_label_ids): + x = self.fc1(input_ids) + x = self.relu(x) + logits = self.fc2(x) + if intent_label_ids is not None: + loss_fct = nn.CrossEntropyLoss() + loss = loss_fct(logits, intent_label_ids) + return loss, logits + return None, logits + + def save_pretrained(self, save_directory): + torch.save(self.state_dict(), f"{save_directory}/pytorch_model.bin") + config = { + "input_dim": self.fc1.in_features, + "num_classes": self.fc2.out_features, + } + with open(f"{save_directory}/config.json", "w") as f: + json.dump(config, f) + + @classmethod + def from_pretrained(cls, model_path): + with open(f"{model_path}/config.json", "r") as f: + config = json.load(f) + model = cls(config["input_dim"], config["num_classes"]) + state_dict = torch.load(f"{model_path}/pytorch_model.bin") + model.load_state_dict(state_dict) + return model + + +def batch_sentence_embeddings(batch, tokenizer, model, device): + encoded_input = tokenizer( + batch, padding=True, truncation=True, return_tensors="pt" + ).to(device) + with torch.no_grad(): + model_output = model(**encoded_input) + sentence_embeddings = model_output[0][:, 0] + sentence_embeddings = torch.nn.functional.normalize( + sentence_embeddings, p=2, dim=1 + ) + return sentence_embeddings diff --git a/src/dbgpt-hub-nlu/dbgpt_hub_nlu/ner.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/ner.py new file mode 100644 index 00000000..167b8dbd --- /dev/null +++ b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/ner.py @@ -0,0 +1,200 @@ +import ast + +import evaluate +import numpy as np +import pandas as pd +import torch +from config.dataset import DataArguments, InferArguments +from config.model_args import ModelArguments, NLUTrainingArguments +from datasets import Dataset +from model.qwen import Qwen2ForTokenClassification +from peft import LoraConfig, PeftConfig, PeftModel, TaskType, get_peft_model +from transformers import ( + AutoTokenizer, + DataCollatorForTokenClassification, + HfArgumentParser, + Trainer, + pipeline, +) + + +def get_device(): + return torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +def load_tokenizer(base_model_name_or_path): + return AutoTokenizer.from_pretrained(base_model_name_or_path) + + +def load_dataset_from_excel(file_path): + df = pd.read_excel(file_path) + df["tokens"] = df["tokens"].apply(ast.literal_eval) + df["labels"] = df["labels"].apply(ast.literal_eval) + df["ner_tags"] = df["ner_tags"].apply(ast.literal_eval) + dataset_dict = { + "tokens": df["tokens"].tolist(), + "labels": df["labels"].tolist(), + "ner_tags": df["ner_tags"].tolist(), + } + return Dataset.from_dict(dataset_dict).train_test_split(test_size=0.2) + + +def prepare_model(args, label2id, id2label): + model = Qwen2ForTokenClassification.from_pretrained( + args.base_model_name_or_path, + num_labels=len(label2id), + id2label=id2label, + label2id=label2id, + ).bfloat16() + + peft_config = LoraConfig( + task_type=TaskType.TOKEN_CLS, + inference_mode=False, + r=args.lora_r, + lora_alpha=args.lora_alpha, + lora_dropout=args.lora_dropout, + target_modules=[ + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "up_proj", + "gate_proj", + "down_proj", + ], + ) + + return get_peft_model(model, peft_config) + + +def tokenize_and_align_labels(examples, tokenizer, max_length): + tokenized_inputs = tokenizer( + examples["tokens"], + is_split_into_words=True, + padding="longest", + max_length=max_length, + truncation=True, + ) + labels = [] + for i, label in enumerate(examples["ner_tags"]): + word_ids = tokenized_inputs.word_ids(batch_index=i) + previous_word_idx = None + label_ids = [] + for word_idx in word_ids: + if word_idx is None: + label_ids.append(-100) + elif word_idx != previous_word_idx: + label_ids.append(label[word_idx]) + else: + label_ids.append(-100) + previous_word_idx = word_idx + labels.append(label_ids) + tokenized_inputs["labels"] = labels + return tokenized_inputs + + +def compute_metrics(p, label_list, seqeval): + predictions, labels = p + predictions = np.argmax(predictions, axis=2) + true_predictions = [ + [label_list[p] for (p, l) in zip(prediction, label) if l != -100] + for prediction, label in zip(predictions, labels) + ] + true_labels = [ + [label_list[l] for (p, l) in zip(prediction, label) if l != -100] + for prediction, label in zip(predictions, labels) + ] + results = seqeval.compute(predictions=true_predictions, references=true_labels) + return { + "precision": results["overall_precision"], + "recall": results["overall_recall"], + "f1": results["overall_f1"], + "accuracy": results["overall_accuracy"], + } + + +def main(): + parser = HfArgumentParser( + (ModelArguments, NLUTrainingArguments, DataArguments, InferArguments) + ) + ( + model_args, + training_args, + data_args, + infer_args, + ) = parser.parse_args_into_dataclasses() + + device = get_device() + print(f"Using device: {device}") + + tokenizer = load_tokenizer(model_args.base_model_name_or_path) + seqeval = evaluate.load("seqeval") + + if data_args.dataset == "ner": + label2id = { + "O": 0, + "B-ent_name": 1, + "I-ent_name": 2, + "B-ent_short_name": 3, + "I-ent_short_name": 4, + "B-year": 5, + "I-year": 6, + "B-key_word": 7, + "I-key_word": 8 + } + ds = load_dataset_from_excel("./datasets/financial_report/data/ner.xlsx") + else: + raise NotImplementedError + + id2label = {v: k for k, v in label2id.items()} + label_list = list(label2id.keys()) + + if training_args.do_train: + model = prepare_model(model_args, label2id, id2label) + model.print_trainable_parameters() + + tokenized_ds = ds.map( + lambda x: tokenize_and_align_labels(x, tokenizer, model_args.max_length), + batched=True, + ) + data_collator = DataCollatorForTokenClassification(tokenizer=tokenizer) + + trainer = Trainer( + model=model, + args=training_args, + train_dataset=tokenized_ds["train"], + eval_dataset=tokenized_ds["test"], + tokenizer=tokenizer, + data_collator=data_collator, + compute_metrics=compute_metrics, + ) + + trainer.train() + + if infer_args.do_infer: + adapter_path = "./output/checkpoint-500" + tokenizer = AutoTokenizer.from_pretrained(adapter_path) + peft_config = PeftConfig.from_pretrained(adapter_path) + model = Qwen2ForTokenClassification.from_pretrained( + peft_config.base_model_name_or_path, + num_labels=len(label2id), + id2label=id2label, + label2id=label2id, + ) + model = PeftModel.from_pretrained(model, adapter_path) + # merge and unload is necessary for inference + model = model.merge_and_unload() + + token_classifier = pipeline( + "token-classification", + model=model, + tokenizer=tokenizer, + aggregation_strategy="simple", + ) + sentence = "康希诺生物股份公司在2020年的资产负债比率具体是多少?" + tokens = token_classifier(sentence) + print(tokens) + + +if __name__ == "__main__": + main() diff --git a/src/dbgpt-hub-nlu/dbgpt_hub_nlu/trainer.py b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/trainer.py new file mode 100644 index 00000000..4014ad37 --- /dev/null +++ b/src/dbgpt-hub-nlu/dbgpt_hub_nlu/trainer.py @@ -0,0 +1,87 @@ +import logging +import os +from typing import Optional, Type + +import torch +from datasets import DatasetDict +from sklearn.metrics import accuracy_score +from transformers import Trainer + +from .config.model_args import ModelArguments, NLUTrainingArguments + +logger = logging.getLogger(__name__) + + +def _load_base_model(model_args: ModelArguments, device: torch.device): + from transformers import AutoModel, AutoTokenizer + + tokenizer = AutoTokenizer.from_pretrained( + model_args.base_tokenizer_name or model_args.base_model_name_or_path + ) + model = AutoModel.from_pretrained(model_args.base_model_name_or_path) + model = model.to(device) + model.eval() + return tokenizer, model + + +def compute_metrics(p): + preds = torch.argmax(torch.Tensor(p.predictions), axis=1) + return {"accuracy": accuracy_score(p.label_ids, preds)} + + +class NLUTrainer: + def __init__( + self, + dataset: DatasetDict, + model, + training_args: NLUTrainingArguments, + model_cls: Optional[Type] = None, + ): + self.dataset = dataset + self.model = model + self.model_cls = model_cls or model.__class__ + self.training_args = training_args + self.trainer = Trainer( + model=model, + args=training_args, + train_dataset=self.dataset["train"] if training_args.do_train else None, + eval_dataset=self.dataset["valid"] if training_args.do_eval else None, + compute_metrics=compute_metrics, + ) + + def load_model(self, model_path: Optional[str] = None): + if not model_path: + return + model_file = os.path.join(model_path, "pytorch_model.bin") + if not os.path.exists(model_file): + return + # Load the saved model weights + model = self.model_cls.from_pretrained(model_path) + model = model.to(self.training_args.device) + self.model = model + self.trainer.model = model + logger.info(f"Model loaded from {model_path}") + + def train(self): + self.trainer.train() + self.model.save_pretrained(self.training_args.output_dir) + self.trainer.save_model() + + def evaluate(self): + eval_result = self.trainer.evaluate() + logger.info(f"Evaluation result: {eval_result}") + + def infer(self, input_ids, label_features): + model = self.model + model.eval() + label_features = label_features or self._get_label_features() + with torch.no_grad(): + input_ids = input_ids.to(self.training_args.device) + _, logits = model(input_ids, None) + prediction = torch.argmax(logits, axis=1).item() + prediction_label = label_features.int2str([prediction]) + logger.info(f"Prediction: {prediction_label[0]}") + return prediction + + def _get_label_features(self): + return self.dataset["train"].features["label"] diff --git a/src/dbgpt-hub-nlu/main.py b/src/dbgpt-hub-nlu/main.py new file mode 100644 index 00000000..3b653f1f --- /dev/null +++ b/src/dbgpt-hub-nlu/main.py @@ -0,0 +1,137 @@ +import logging +import os +import sys + +logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%m/%d/%Y %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + level=logging.INFO, +) + +from typing import TYPE_CHECKING, Tuple + +import torch +from datasets import DatasetDict, load_dataset +from dbgpt_hub_nlu.config.dataset import DataArguments, InferArguments +from dbgpt_hub_nlu.config.model_args import ModelArguments, NLUTrainingArguments +from dbgpt_hub_nlu.model.simple import SimpleIntentClassifier +from dbgpt_hub_nlu.trainer import NLUTrainer, _load_base_model +from transformers import HfArgumentParser + +logger = logging.getLogger(__name__) + +if TYPE_CHECKING: + from datasets import Features + + +def _load_model( + input_dim: int, num_classes: int, device: torch.device +) -> SimpleIntentClassifier: + model = SimpleIntentClassifier(input_dim, num_classes) + logger.info(f"Model loaded to devie: {device}") + model = model.to(device) + return model + + +def _load_dataset( + tokenizer, + model, + data_args: DataArguments, + training_args: NLUTrainingArguments, + just_infer: bool = False, +) -> Tuple[int, int, "Features", DatasetDict]: + from dbgpt_hub_nlu.model.simple import batch_sentence_embeddings + + def handle_fin_func(batch): + return { + "input_ids": batch_sentence_embeddings( + batch["text"], tokenizer, model, training_args.device + ), + "intent_label_ids": batch["label"], + } + + ds = load_dataset(data_args.get_dataset_path(), trust_remote_code=True) + # Just has train split + ds = ds["train"] + if data_args.max_train_samples: + ds = ds.select(range(data_args.max_train_samples)) + + label_features = ds.features["label"] + num_classes = label_features.num_classes + + if just_infer: + return 1, num_classes, label_features, ds + + dataset = ds.map( + handle_fin_func, batched=True, batch_size=training_args.train_batch_size + ) + dataset = dataset.remove_columns(["text", "label"]) + ds_train_devtest = dataset.train_test_split(test_size=0.2, seed=42) + ds_devtest = ds_train_devtest["test"].train_test_split(test_size=0.5, seed=42) + + input_dim = len(ds_train_devtest["train"][0]["input_ids"]) + ds_splits = DatasetDict( + { + "train": ds_train_devtest["train"], + "valid": ds_devtest["train"], + "test": ds_devtest["test"], + } + ) + return input_dim, num_classes, label_features, ds_splits + + +def main() -> None: + # See all possible arguments by passing the --help flag to this script. + parser = HfArgumentParser( + (ModelArguments, DataArguments, NLUTrainingArguments, InferArguments) + ) + if len(sys.argv) == 2 and sys.argv[1].endswith(".json"): + # If we pass only one argument to the script and it's the path to a json file, + # let's parse it to get our arguments. + model_args, data_args, training_args, infer_args = parser.parse_json_file( + json_file=os.path.abspath(sys.argv[1]) + ) + else: + ( + model_args, + data_args, + training_args, + infer_args, + ) = parser.parse_args_into_dataclasses() + + just_infer = ( + infer_args.do_infer + and not training_args.do_train + and not training_args.do_eval + and not training_args.do_predict + ) + + base_tokenizer, base_model = _load_base_model(model_args, training_args.device) + + input_dim, num_classes, label_features, dataset = _load_dataset( + base_tokenizer, base_model, data_args, training_args, just_infer=just_infer + ) + model = _load_model(input_dim, num_classes, training_args.device) + trainer = NLUTrainer(dataset, model, training_args) + if model_args.model_name_or_path: + trainer.load_model(model_args.model_name_or_path) + + if training_args.do_train: + trainer.train() + + if training_args.do_eval: + trainer.evaluate() + + if infer_args.do_infer: + from dbgpt_hub_nlu.model.simple import batch_sentence_embeddings + + input_text = infer_args.input_text + input_ids = batch_sentence_embeddings( + [input_text], base_tokenizer, base_model, training_args.device + ) + trainer.infer(input_ids, label_features) + + +if __name__ == "__main__": + main() diff --git a/src/dbgpt-hub-nlu/scripts/eval.sh b/src/dbgpt-hub-nlu/scripts/eval.sh new file mode 100644 index 00000000..f0e1278e --- /dev/null +++ b/src/dbgpt-hub-nlu/scripts/eval.sh @@ -0,0 +1,8 @@ +# base_model="/data/models/chinese-roberta-wwm-ext" +base_model="/data/models/gte-large-zh" + +python main.py \ +--base_model_name_or_path $base_model \ +--per_device_train_batch_size 4096 \ +--model_name_or_path ./output \ +--do_eval diff --git a/src/dbgpt-hub-nlu/scripts/infer.sh b/src/dbgpt-hub-nlu/scripts/infer.sh new file mode 100644 index 00000000..477e03a3 --- /dev/null +++ b/src/dbgpt-hub-nlu/scripts/infer.sh @@ -0,0 +1,10 @@ +# base_model="/data/models/chinese-roberta-wwm-ext" +base_model="/data/models/gte-large-zh" + +python main.py \ +--base_model_name_or_path $base_model \ +--per_device_train_batch_size 4096 \ +--model_name_or_path ./output \ +--do_infer \ +--input_text "请问安泰集团在2021年的营业成本是多少元" + diff --git a/src/dbgpt-hub-nlu/scripts/ner.sh b/src/dbgpt-hub-nlu/scripts/ner.sh new file mode 100644 index 00000000..49dc11b4 --- /dev/null +++ b/src/dbgpt-hub-nlu/scripts/ner.sh @@ -0,0 +1,6 @@ + +START_INDEX=0 CUDA_VISIBLE_DEVICES=0 python ./dbgpt_hub_nlu/ner.py \ +--base_model_name_or_path Qwen/Qwen2-1.5B-Instruct \ +--dataset ner \ + + diff --git a/src/dbgpt-hub-nlu/scripts/train.sh b/src/dbgpt-hub-nlu/scripts/train.sh new file mode 100644 index 00000000..7b3cd27e --- /dev/null +++ b/src/dbgpt-hub-nlu/scripts/train.sh @@ -0,0 +1,18 @@ +base_model="/data/models/chinese-roberta-wwm-ext" +# base_model="/data/models/gte-large-zh" + +python main.py \ +--dataset financial_report \ +--dataset_dir ./datasets \ +--base_model_name_or_path $base_model \ +--per_device_train_batch_size 4096 \ +--output_dir ./output \ +--num_train_epochs 1000 \ +--gradient_accumulation_steps 16 \ +--learning_rate 0.001 \ +--logging_steps 20 \ +--eval_strategy "steps" \ +--eval_steps 20 \ +--save_steps 100 \ +--do_train \ +--do_eval \ No newline at end of file diff --git a/src/dbgpt-hub-nlu/setup.py b/src/dbgpt-hub-nlu/setup.py new file mode 100644 index 00000000..dc583dbb --- /dev/null +++ b/src/dbgpt-hub-nlu/setup.py @@ -0,0 +1,50 @@ +from typing import List + +from setuptools import find_packages, setup + + +class SetupSpec: + def __init__(self) -> None: + self.extras: dict = {} + self.install_requires: List[str] = [] + + @property + def unique_extras(self) -> dict[str, list[str]]: + unique_extras = {} + for k, v in self.extras.items(): + unique_extras[k] = list(set(v)) + return unique_extras + + +setup_spec = SetupSpec() + + +def core_dependencies(): + setup_spec.extras["core"] = [ + "transformers>=4.41.2", + "accelerate", + "scikit-learn", + "torch>=2.2.1", + "datasets", + ] + + +def init_install_requires(): + setup_spec.install_requires += setup_spec.extras["core"] + print(f"Install requires: \n{','.join(setup_spec.install_requires)}") + + +core_dependencies() +init_install_requires() + +excluded_packages = ["tests", "*.tests", "*.tests.*", "examples"] + +setup( + name="dbgpt-hub-nlu", + version="0.1.0", + description="Out-of-the-box text understanding model components, suitable for Chinese and English, capable of performing text understanding tasks such as information extraction and text classification under zero-shot conditions.", + packages=find_packages(exclude=excluded_packages), + install_requires=setup_spec.install_requires, + extras_require=setup_spec.unique_extras, + python_requires=">=3.10", +) diff --git a/dbgpt_hub/output/logs/.gitkeep b/src/dbgpt-hub-sql/dbgpt_hub_sql/__init__.py similarity index 100% rename from dbgpt_hub/output/logs/.gitkeep rename to src/dbgpt-hub-sql/dbgpt_hub_sql/__init__.py diff --git a/dbgpt_hub/baseline/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/__init__.py similarity index 100% rename from dbgpt_hub/baseline/__init__.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/__init__.py diff --git a/dbgpt_hub/baseline/baseline.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/baseline.json similarity index 100% rename from dbgpt_hub/baseline/baseline.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/baseline.json diff --git a/dbgpt_hub/baseline/show_result.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/show_result.py similarity index 96% rename from dbgpt_hub/baseline/show_result.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/show_result.py index b3c58c38..aa4f6694 100644 --- a/dbgpt_hub/baseline/show_result.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/show_result.py @@ -1,8 +1,9 @@ -import os -import sys import json +import os import pkgutil -from typing import Optional, Dict, Any +import sys +from typing import Any, Dict, Optional + from prettytable.colortable import ColorTable, Theme ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) @@ -74,7 +75,7 @@ def init_baseline_json(): json.dump(json_data, file, indent=4) -data = pkgutil.get_data("dbgpt_hub", baseline_file) +data = pkgutil.get_data("dbgpt_hub_sql", baseline_file) if data is not None: baseline_json = json.loads(data.decode("utf-8")) else: @@ -127,7 +128,7 @@ def show_score(dataset=None, model=None, method=None, prompt=None): Examples - >>> from dbgpt_hub.baseline import show_score + >>> from dbgpt_hub_sql.baseline import show_score >>> show_score(dataset="spider", model="llama2-7b-chat", method="lora", prompt="alpaca") """ @@ -171,7 +172,7 @@ def show_scores(): Examples - >>> from dbgpt_hub.baseline import show_scores + >>> from dbgpt_hub_sql.baseline import show_scores >>> show_scores() """ diff --git a/dbgpt_hub/baseline/show_result_api.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/show_result_api.py similarity index 78% rename from dbgpt_hub/baseline/show_result_api.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/show_result_api.py index 5f0b225b..397e9152 100644 --- a/dbgpt_hub/baseline/show_result_api.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/baseline/show_result_api.py @@ -1,6 +1,6 @@ -from typing import Optional, Dict, Any +from typing import Any, Dict, Optional -from dbgpt_hub.baseline import show_result +from dbgpt_hub_sql.baseline import show_result def show_scores(): diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/__init__.py new file mode 100644 index 00000000..34e8a997 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/__init__.py @@ -0,0 +1,9 @@ +from .data_args import DataArguments, Llama2Template +from .model_args import ModelArguments, TrainingArguments + +__all__ = [ + "DataArguments", + "Llama2Template", + "ModelArguments", + "TrainingArguments", +] diff --git a/dbgpt_hub/configs/config.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/config.py similarity index 95% rename from dbgpt_hub/configs/config.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/configs/config.py index e2711950..2bb8c23a 100644 --- a/dbgpt_hub/configs/config.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/config.py @@ -11,17 +11,19 @@ MODEL_PATH = os.path.join(MODELS_PARENT_PATH, DEFAULT_FT_MODEL_NAME) # MODEL_PATH = os.path.join(ROOT_PATH, "model") -ADAPTER_PATH = os.path.join(ROOT_PATH, "dbgpt_hub/output/adapter") -MERGED_MODELS = os.path.join(ROOT_PATH, "dbgpt_hub/output/merged_models") +ADAPTER_PATH = os.path.join(ROOT_PATH, "dbgpt_hub_sql/output/adapter") +MERGED_MODELS = os.path.join(ROOT_PATH, "dbgpt_hub_sql/output/merged_models") # DATA_PATH = "/root/autodl-tmp/data/spider/pre_processed_data" # OUT_DIR= "/root/autodl-tmp/codellama" -DATA_PATH = os.path.join(ROOT_PATH, "dbgpt_hub/data") -PREDICTED_DATA_PATH = os.path.join(ROOT_PATH, "dbgpt_hub/data/eval_data/dev_sql.json") +DATA_PATH = os.path.join(ROOT_PATH, "dbgpt_hub_sql/data") +PREDICTED_DATA_PATH = os.path.join( + ROOT_PATH, "dbgpt_hub_sql/data/eval_data/dev_sql.json" +) PREDICTED_OUT_FILENAME = "pred_sql.sql" # OUT_DIR = os.path.join(DATA_PATH, "out_pred") -OUT_DIR = os.path.join(ROOT_PATH, "dbgpt_hub/output/") +OUT_DIR = os.path.join(ROOT_PATH, "dbgpt_hub_sql/output/") ## model constants IGNORE_INDEX = -100 diff --git a/dbgpt_hub/configs/data_args.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/data_args.py similarity index 99% rename from dbgpt_hub/configs/data_args.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/configs/data_args.py index 6dcf764a..1f8083fe 100644 --- a/dbgpt_hub/configs/data_args.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/data_args.py @@ -1,9 +1,10 @@ -import os import json -import tiktoken +import os from dataclasses import dataclass, field from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple, Union +import tiktoken + if TYPE_CHECKING: from transformers import PreTrainedTokenizer @@ -78,7 +79,7 @@ class DataArguments: }, ) dataset_dir: Optional[str] = field( - default="dbgpt_hub/data/", + default="dbgpt_hub_sql/data/", metadata={"help": "The name of the folder containing datasets."}, ) cutoff_len: Optional[int] = field( @@ -162,7 +163,7 @@ class DataArguments: }, ) predicted_input_filename: Optional[str] = field( - default="dbgpt_hub/data/example_text2sql_dev.json", + default="dbgpt_hub_sql/data/example_text2sql_dev.json", metadata={"help": "Predict input filename to do pred "}, ) predicted_out_filename: Optional[str] = field( diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/ds_config.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/ds_config.json new file mode 100644 index 00000000..e96d4d9b --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/ds_config.json @@ -0,0 +1,23 @@ +{ + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "gradient_clipping": "auto", + "zero_allow_untested_optimizer": true, + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "initial_scale_power": 16, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 2, + "allgather_partitions": true, + "allgather_bucket_size": 5e8, + "reduce_scatter": true, + "reduce_bucket_size": 5e8, + "overlap_comm": false, + "contiguous_gradients": true + } + } diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/ds_config_stage3.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/ds_config_stage3.json new file mode 100644 index 00000000..ea173478 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/ds_config_stage3.json @@ -0,0 +1,32 @@ +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "offload_param": { + "device": "cpu", + "pin_memory": true + }, + "overlap_comm": true, + "contiguous_gradients": true, + "stage3_max_live_parameters" : 1e9, + "stage3_max_reuse_distance" : 1e9, + "stage3_prefetch_bucket_size" : 5e8, + "stage3_param_persistence_threshold" : 1e6, + "sub_group_size" : 1e12, + "stage3_gather_16bit_weights_on_model_save": true + }, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto" +} diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/model_args.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/model_args.py new file mode 100644 index 00000000..3d40a2a8 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/configs/model_args.py @@ -0,0 +1,412 @@ +import json +from dataclasses import asdict, dataclass, field +from typing import Any, Dict, Literal, Optional + +import torch +from transformers import Seq2SeqTrainingArguments + +from .config import ADAPTER_PATH + + +@dataclass +class ModelArguments: + r""" + Arguments pertaining to which model/config/tokenizer we are going to fine-tune. + """ + model_name_or_path: str = field( + metadata={ + "help": "Path to pretrained model or model identifier from huggingface.co/models." + } + ) + cache_dir: Optional[str] = field( + default=None, + metadata={ + "help": "Where to store the pretrained models downloaded from huggingface.co." + }, + ) + use_fast_tokenizer: Optional[bool] = field( + default=False, + metadata={ + "help": "Whether to use one of the fast tokenizer (backed by the tokenizers library) or not." + }, + ) + use_auth_token: Optional[bool] = field( + default=False, + metadata={ + "help": "Will use the token generated when running `huggingface-cli login`." + }, + ) + model_revision: Optional[str] = field( + default="main", + metadata={ + "help": "The specific model version to use (can be a branch name, tag name or commit id)." + }, + ) + padding_side: Optional[Literal["left", "right"]] = field( + default="left", + metadata={"help": "The side on which the model should have padding applied."}, + ) + quantization_bit: Optional[int] = field( + default=None, metadata={"help": "The number of bits to quantize the model."} + ) + quantization_type: Optional[Literal["fp4", "nf4"]] = field( + default="nf4", + metadata={"help": "Quantization data type to use in int4 training."}, + ) + double_quantization: Optional[bool] = field( + default=True, + metadata={ + "help": "Whether to use double quantization in int4 training or not." + }, + ) + rope_scaling: Optional[Literal["linear", "dynamic"]] = field( + default=None, metadata={"help": "Adopt scaled rotary positional embeddings."} + ) + checkpoint_dir: Optional[str] = field( + default=None, + metadata={ + "help": "Path to the directory(s) containing the delta model checkpoints as well as the configurations." + }, + ) + # reward_model: Optional[str] = field( + # default=None, + # metadata={"help": "Path to the directory containing the checkpoints of the reward model."} + # ) + plot_loss: Optional[bool] = field( + default=False, + metadata={ + "help": "Whether to plot the training loss after fine-tuning or not." + }, + ) + hf_auth_token: Optional[str] = field( + default=None, metadata={"help": "Auth token to log in with Hugging Face Hub."} + ) + compute_dtype: Optional[torch.dtype] = field( + default=None, + metadata={ + "help": "Used in quantization configs. Do not specify this argument manually." + }, + ) + model_max_length: Optional[int] = field( + default=None, + metadata={ + "help": "Used in rope scaling. Do not specify this argument manually." + }, + ) + hf_hub_token: Optional[str] = field( + default=None, metadata={"help": "Auth token to log in with Hugging Face Hub."} + ) + split_special_tokens: Optional[bool] = field( + default=False, + metadata={ + "help": "Whether or not the special tokens should be split during the tokenization process." + }, + ) + + def __post_init__(self): + if self.compute_dtype is not None or self.model_max_length is not None: + raise ValueError("These arguments cannot be specified.") + + if self.checkpoint_dir is not None: # support merging multiple lora weights + self.checkpoint_dir = [cd.strip() for cd in self.checkpoint_dir.split(",")] + + if self.quantization_bit is not None: + assert self.quantization_bit in [ + 4, + 8, + ], "We only accept 4-bit or 8-bit quantization." + + if self.use_auth_token == True and self.hf_auth_token is not None: + from huggingface_hub.hf_api import HfFolder # lazy load + + HfFolder.save_token(self.hf_auth_token) + + +@dataclass +class GeneratingArguments: + r""" + Arguments pertaining to specify the decoding parameters. + """ + do_sample: Optional[bool] = field( + default=True, + metadata={ + "help": "Whether or not to use sampling, use greedy decoding otherwise." + }, + ) + temperature: Optional[float] = field( + default=0.95, + metadata={"help": "The value used to modulate the next token probabilities."}, + ) + top_p: Optional[float] = field( + default=0.7, + metadata={ + "help": "The smallest set of most probable tokens with probabilities that add up to top_p or higher are kept." + }, + ) + top_k: Optional[int] = field( + default=50, + metadata={ + "help": "The number of highest probability vocabulary tokens to keep for top-k filtering." + }, + ) + num_beams: Optional[int] = field( + default=1, + metadata={"help": "Number of beams for beam search. 1 means no beam search."}, + ) + max_length: Optional[int] = field( + default=None, + metadata={ + "help": "The maximum length the generated tokens can have. It can be overridden by max_new_tokens." + }, + ) + max_new_tokens: Optional[int] = field( + default=512, + metadata={ + "help": "The maximum numbers of tokens to generate, ignoring the number of tokens in the prompt." + }, + ) + repetition_penalty: Optional[float] = field( + default=1.0, + metadata={ + "help": "The parameter for repetition penalty. 1.0 means no penalty." + }, + ) + length_penalty: Optional[float] = field( + default=1.0, + metadata={ + "help": "Exponential penalty to the length that is used with beam-based generation." + }, + ) + + def to_dict(self) -> Dict[str, Any]: + args = asdict(self) + if args.get("max_new_tokens", None): + args.pop("max_length", None) + return args + + +@dataclass +class FinetuningArguments: + r""" + Arguments pertaining to which techniques we are going to fine-tuning with. + """ + stage: Optional[Literal["sft", "rm"]] = field( + default="sft", metadata={"help": "Which stage will be performed in training."} + ) + finetuning_type: Optional[Literal["lora", "freeze", "full", "none"]] = field( + default="lora", metadata={"help": "Which fine-tuning method to use."} + ) + num_hidden_layers: Optional[int] = field( + default=32, + metadata={ + "help": 'Number of decoder blocks in the model for partial-parameter (freeze) fine-tuning. \ + LLaMA choices: ["32", "40", "60", "80"], \ + LLaMA-2 choices: ["32", "40", "80"], \ + BLOOM choices: ["24", "30", "70"], \ + Falcon choices: ["32", "60"], \ + Baichuan choices: ["32", "40"] \ + Qwen choices: ["32"], \ + XVERSE choices: ["40"], \ + ChatGLM2 choices: ["28"],\ + ChatGLM3 choices: ["28"]' + }, + ) + num_layer_trainable: Optional[int] = field( + default=3, + metadata={ + "help": "Number of trainable layers for partial-parameter (freeze) fine-tuning." + }, + ) + name_module_trainable: Optional[ + Literal["mlp", "self_attn", "self_attention"] + ] = field( + default="mlp", + metadata={ + "help": 'Name of trainable modules for partial-parameter (freeze) fine-tuning. \ + LLaMA choices: ["mlp", "self_attn"], \ + BLOOM & Falcon & ChatGLM2 & ChatGLM3choices: ["mlp", "self_attention"], \ + Baichuan choices: ["mlp", "self_attn"], \ + Qwen choices: ["mlp", "attn"], \ + LLaMA-2, InternLM, XVERSE choices: the same as LLaMA.' + }, + ) + lora_rank: Optional[int] = field( + default=8, metadata={"help": "The intrinsic dimension for LoRA fine-tuning."} + ) + lora_alpha: Optional[float] = field( + default=32.0, + metadata={ + "help": "The scale factor for LoRA fine-tuning (similar with the learning rate)." + }, + ) + lora_dropout: Optional[float] = field( + default=0.1, metadata={"help": "Dropout rate for the LoRA fine-tuning."} + ) + lora_target: Optional[str] = field( + default=None, + metadata={ + "help": 'Name(s) of target modules to apply LoRA. Use commas to separate multiple modules. \ + LLaMA choices: ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], \ + BLOOM & Falcon & ChatGLM2 & ChatGLM3 choices: ["query_key_value", "self_attention.dense", "mlp.dense"], \ + Baichuan choices: ["W_pack", "o_proj", "gate_proj", "up_proj", "down_proj"], \ + Qwen choices: ["c_attn", "attn.c_proj", "w1", "w2", "mlp.c_proj"], \ + LLaMA-2, InternLM, XVERSE choices: the same as LLaMA.' + }, + ) + resume_lora_training: Optional[bool] = field( + default=True, + metadata={ + "help": "Whether to resume training from the last LoRA weights or create new weights after merging them." + }, + ) + ppo_score_norm: Optional[bool] = field( + default=False, metadata={"help": "Use score normalization in PPO Training."} + ) + dpo_beta: Optional[float] = field( + default=0.1, metadata={"help": "The beta parameter for the DPO loss."} + ) + + def __post_init__(self): + if isinstance( + self.lora_target, str + ): # support custom target modules/layers of LoRA + self.lora_target = [ + target.strip() for target in self.lora_target.split(",") + ] + + if ( + self.num_layer_trainable > 0 + ): # fine-tuning the last n layers if num_layer_trainable > 0 + trainable_layer_ids = [ + self.num_hidden_layers - k - 1 for k in range(self.num_layer_trainable) + ] + else: # fine-tuning the first n layers if num_layer_trainable < 0 + trainable_layer_ids = [k for k in range(-self.num_layer_trainable)] + + self.trainable_layers = [ + "{:d}.{}".format(idx, self.name_module_trainable) + for idx in trainable_layer_ids + ] + + assert self.finetuning_type in [ + "lora", + "freeze", + "full", + "none", + ], "Invalid fine-tuning method." + + def save_to_json(self, json_path: str): + r"""Saves the content of this instance in JSON format inside `json_path`.""" + json_string = json.dumps(asdict(self), indent=2, sort_keys=True) + "\n" + with open(json_path, "w", encoding="utf-8") as f: + f.write(json_string) + + @classmethod + def load_from_json(cls, json_path: str): + r"""Creates an instance from the content of `json_path`.""" + with open(json_path, "r", encoding="utf-8") as f: + text = f.read() + return cls(**json.loads(text)) + + +@dataclass +class TrainingArguments(Seq2SeqTrainingArguments): + cache_dir: Optional[str] = field(default=None) + train_on_source: Optional[bool] = field( + default=False, + metadata={ + "help": "Whether to train on the input in addition to the target text." + }, + ) + full_finetune: bool = field( + default=False, metadata={"help": "Finetune the entire model without adapters."} + ) + do_train: bool = field( + default=True, + metadata={"help": "To train or not to train, that is the question?"}, + ) + sample_generate: bool = field( + default=False, metadata={"help": "If do sample generation on evaluation."} + ) + optim: str = field( + default="paged_adamw_32bit", metadata={"help": "The optimizer to be used"} + ) + max_grad_norm: float = field( + default=0.3, + metadata={ + "help": "Gradient clipping max norm. This is tuned and works well for all models tested." + }, + ) + gradient_checkpointing: bool = field( + default=True, + metadata={"help": "Use gradient checkpointing. You want to use this."}, + ) + predict_with_generate: bool = field( + default=False, + metadata={ + "help": "Group sequences into batches with same length. Saves memory and speeds up training considerably." + }, + ) + model_max_length: int = field( + default=2048, + metadata={ + "help": "Maximum sequence length. Sequences will be right padded (and possibly truncated)." + }, + ) + output_dir: str = field( + default=ADAPTER_PATH, + metadata={"help": "The output dir for logs and checkpoints"}, + ) + per_device_train_batch_size: int = field( + default=1, + metadata={ + "help": "The training batch size per GPU. Increase for better speed." + }, + ) + gradient_accumulation_steps: int = field( + default=16, + metadata={ + "help": "How many gradients to accumulate before to perform an optimizer step" + }, + ) + max_steps: int = field( + default=10000, metadata={"help": "How many optimizer update steps to take"} + ) + # use lora dropout instead for regularization if needed + weight_decay: float = field( + default=0.0, metadata={"help": "The L2 weight decay rate of AdamW"} + ) + learning_rate: float = field(default=0.0002, metadata={"help": "The learnign rate"}) + remove_unused_columns: bool = field( + default=False, + metadata={"help": "Removed unused columns. Needed to make this codebase work."}, + ) + lr_scheduler_type: str = field( + default="constant", + metadata={ + "help": "Learning rate schedule. Constant a bit better than cosine, and has advantage for analysis" + }, + ) + warmup_ratio: float = field( + default=0.03, metadata={"help": "Fraction of steps to do a warmup for"} + ) + logging_steps: int = field( + default=10, + metadata={"help": "The frequency of update steps after which to log the loss"}, + ) + group_by_length: bool = field( + default=True, + metadata={ + "help": "Group sequences into batches with same length. Saves memory and speeds up training considerably." + }, + ) + save_strategy: str = field( + default="steps", metadata={"help": "When to save checkpoints"} + ) + save_steps: int = field(default=250, metadata={"help": "How often to save a model"}) + save_total_limit: int = field( + default=40, + metadata={ + "help": "How many checkpoints to save before the oldest is overwritten" + }, + ) diff --git a/dbgpt_hub/data/dataset_info.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/dataset_info.json similarity index 100% rename from dbgpt_hub/data/dataset_info.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/dataset_info.json diff --git a/dbgpt_hub/data/eval_data/20k.pkl b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/20k.pkl similarity index 100% rename from dbgpt_hub/data/eval_data/20k.pkl rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/20k.pkl diff --git a/dbgpt_hub/data/eval_data/dev.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/dev.json similarity index 100% rename from dbgpt_hub/data/eval_data/dev.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/dev.json diff --git a/dbgpt_hub/data/eval_data/dev_sql.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/dev_sql.json similarity index 100% rename from dbgpt_hub/data/eval_data/dev_sql.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/dev_sql.json diff --git a/dbgpt_hub/data/eval_data/download-db-files-README.txt b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/download-db-files-README.txt similarity index 100% rename from dbgpt_hub/data/eval_data/download-db-files-README.txt rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/download-db-files-README.txt diff --git a/dbgpt_hub/data/eval_data/gold.txt b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/gold.txt similarity index 100% rename from dbgpt_hub/data/eval_data/gold.txt rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/gold.txt diff --git a/dbgpt_hub/data/eval_data/gold_natsql2sql.txt b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt similarity index 100% rename from dbgpt_hub/data/eval_data/gold_natsql2sql.txt rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt diff --git a/dbgpt_hub/data/eval_data/tables.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/tables.json similarity index 100% rename from dbgpt_hub/data/eval_data/tables.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/tables.json diff --git a/dbgpt_hub/data/eval_data/tables_for_natsql.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/tables_for_natsql.json similarity index 100% rename from dbgpt_hub/data/eval_data/tables_for_natsql.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/eval_data/tables_for_natsql.json diff --git a/dbgpt_hub/data/example_text2sql.json b/src/dbgpt-hub-sql/dbgpt_hub_sql/data/example_text2sql.json similarity index 100% rename from dbgpt_hub/data/example_text2sql.json rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data/example_text2sql.json diff --git a/dbgpt_hub/data_generator/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/__init__.py similarity index 100% rename from dbgpt_hub/data_generator/__init__.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/__init__.py diff --git a/dbgpt_hub/data_generator/gpt_generator.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/gpt_generator.py similarity index 99% rename from dbgpt_hub/data_generator/gpt_generator.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/gpt_generator.py index 3023791a..06650e34 100644 --- a/dbgpt_hub/data_generator/gpt_generator.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/gpt_generator.py @@ -1,7 +1,5 @@ -from openai import OpenAI - -import os import json +import os from tqdm import tqdm @@ -118,6 +116,8 @@ def generate_synthetic_dataset(self): self._writeout_dataset() def _chat_llm(self, prompt): + from openai import OpenAI + client = OpenAI( api_key=os.environ["OPENAI_API_KEY"], ) diff --git a/dbgpt_hub/data_generator/gpt_generator_api.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/gpt_generator_api.py similarity index 84% rename from dbgpt_hub/data_generator/gpt_generator_api.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/gpt_generator_api.py index d34200f9..5dec0be4 100644 --- a/dbgpt_hub/data_generator/gpt_generator_api.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/gpt_generator_api.py @@ -1,7 +1,7 @@ import os import sys +from typing import Any, Dict, Optional -from typing import Optional, Dict, Any from .gpt_generator import GPTGenerator from .utils import COT_PROMPT @@ -17,10 +17,10 @@ def generate_dataset_with_gpt(args: Optional[Dict[str, Any]] = None): "prompt": COT_PROMPT, "num_text2sql_pair_each_db": 1, "table_file_path": os.path.join( - ROOT_PATH, "dbgpt_hub/data/spider/tables.json" + ROOT_PATH, "dbgpt_hub_sql/data/spider/tables.json" ), "output_path": os.path.join( - ROOT_PATH, "dbgpt_hub/data/spider/synthetic_data_with_gpt.json" + ROOT_PATH, "dbgpt_hub_sql/data/spider/synthetic_data_with_gpt.json" ), } else: diff --git a/dbgpt_hub/data_generator/llm_generator.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/llm_generator.py similarity index 99% rename from dbgpt_hub/data_generator/llm_generator.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/llm_generator.py index 783acd34..3f7385b9 100644 --- a/dbgpt_hub/data_generator/llm_generator.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/llm_generator.py @@ -1,5 +1,4 @@ from abc import ABC, abstractmethod - from typing import Any, Dict, List, Optional, Tuple, Union diff --git a/dbgpt_hub/data_generator/utils.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/utils.py similarity index 100% rename from dbgpt_hub/data_generator/utils.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_generator/utils.py diff --git a/dbgpt_hub/data_process/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/__init__.py similarity index 100% rename from dbgpt_hub/data_process/__init__.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/__init__.py diff --git a/dbgpt_hub/output/pred/.gitkeep b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/__init__.py similarity index 100% rename from dbgpt_hub/output/pred/.gitkeep rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/__init__.py diff --git a/dbgpt_hub/data_process/connectors/anydb_connector.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/anydb_connector.py similarity index 99% rename from dbgpt_hub/data_process/connectors/anydb_connector.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/anydb_connector.py index 98bbf40e..e094c65d 100644 --- a/dbgpt_hub/data_process/connectors/anydb_connector.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/anydb_connector.py @@ -1,4 +1,5 @@ from typing import Any + from .mysql_connector import MySQLConnector diff --git a/dbgpt_hub/data_process/connectors/base_connector.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/base_connector.py similarity index 100% rename from dbgpt_hub/data_process/connectors/base_connector.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/base_connector.py diff --git a/dbgpt_hub/data_process/connectors/mysql_connector.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/mysql_connector.py similarity index 97% rename from dbgpt_hub/data_process/connectors/mysql_connector.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/mysql_connector.py index fc58ece8..c47a4afe 100644 --- a/dbgpt_hub/data_process/connectors/mysql_connector.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/connectors/mysql_connector.py @@ -2,8 +2,7 @@ from abc import ABC import pymysql - -from dbgpt_hub.data_process.connections.base_connector import BaseConnector +from dbgpt_hub_sql.data_process.connections.base_connector import BaseConnector class MySQLConnector(BaseConnector, ABC): diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/data_utils.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/data_utils.py new file mode 100644 index 00000000..1b366f9d --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/data_utils.py @@ -0,0 +1,1010 @@ +import hashlib +import os +from itertools import chain +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Generator, + List, + Literal, + Optional, + Tuple, + Union, +) + +import numpy as np +import pandas as pd +import tiktoken +from datasets import ( + Dataset, + DatasetDict, + concatenate_datasets, + interleave_datasets, + load_dataset, +) + +from ..configs.config import EXT2TYPE, IGNORE_INDEX +from ..configs.data_args import ( + ALPACA_PROMPT_DICT, + DEFAULT_PROMPT_DICT, + SQL_PROMPT_DICT, + Llama2Template, + Template, +) + +if TYPE_CHECKING: + pass + +from dbgpt_hub_sql.llm_base.loggings import get_logger + +logger = get_logger(__name__) + + +def extract_default_prompt_dataset(example: Dict[str, Any]) -> Dict[str, str]: + # Not random, use pre-defined templates + if example.get("input", "") != "": + prompt_template = DEFAULT_PROMPT_DICT["prompt_input"] + else: + prompt_template = DEFAULT_PROMPT_DICT["prompt_no_input"] + + # Format prompt with example + formated_prompt = prompt_template.format(**example) + + return {"input": formated_prompt} + + +def extract_alpaca_prompt_dataset(example: Dict[str, Any]) -> Dict[str, str]: + if example.get("input", "") != "": + prompt_format = ALPACA_PROMPT_DICT["prompt_input"] + else: + prompt_format = ALPACA_PROMPT_DICT["prompt_no_input"] + return {"input": prompt_format.format(**example)} + + +def extract_sql_prompt_dataset(example: Dict[str, Any]) -> Dict[str, str]: + if example.get("input", "") != "": + prompt_format = SQL_PROMPT_DICT["prompt_input"] + else: + prompt_format = SQL_PROMPT_DICT["prompt_no_input"] + return {"input": prompt_format.format(**example)} + + +def infer_max_len( + source_len: int, target_len: int, data_args: "DataArguments" +) -> Tuple[int, int]: + max_target_len = int( + data_args.cutoff_len * (target_len / (source_len + target_len)) + ) + max_target_len = max(max_target_len, data_args.reserved_label_len) + max_source_len = data_args.cutoff_len - max_target_len + return max_source_len, max_target_len + + +def local_dataset( + dataset_path: str, eval_dataset_size: float = 0.1 +) -> Tuple[Dataset, Dataset]: + """ + Reads in a dataset from a file and returns it as a split train-test dataset. + + Args: + dataset_path (str): The name of the dataset file to read in. \ + The format is inferred based on the file extension. + + Returns: + A tuple containing two datasets - the training subset and the testing subset. + Raises: + ValueError: If the specified file format is unsupported. + + """ + + # Read in the full dataset from file based on the file format + if dataset_path.endswith(".json"): + full_dataset = load_dataset("json", data_files=dataset_path) + elif dataset_path.endswith(".jsonl"): + full_dataset = load_dataset("json", data_files=dataset_path) + elif dataset_path.endswith(".csv"): + full_dataset = Dataset.from_pandas(pd.read_csv(dataset_path)) + elif dataset_path.endswith(".tsv"): + full_dataset = Dataset.from_pandas(pd.read_csv(dataset_path, delimiter="\t")) + else: + raise ValueError(f"Unsupported dataset format: {dataset_path}") + if "train" not in full_dataset: + split_dataset = full_dataset.train_test_split(test_size=eval_dataset_size) + return split_dataset + else: + return full_dataset + + +def load_data( + dataset_path: str, eval_dataset_size: float = 0.1 +) -> Union[Dict[str, Dataset], None]: + """ + Load a dataset based on its name. + + Args: + dataset_path: A string representing the path to the dataset to be loaded. + + Returns: + A dictionary containing the loaded dataset if the dataset exists. + None if the dataset does not exist. + + Raises: + NotImplementedError: If the dataset name provided is not implemented yet or if + the dataset is not released. + + Examples: + >>> load_data('alpaca') + {'train': Dataset(...), 'validation': Dataset(...), 'test': Dataset(...)} + + """ + if not os.path.exists(dataset_path): + # Download dataset from HuggingFace Datasets + print( + f"Lodding dataset from huggingface, please ref to https://huggingface.co/datasets/{dataset_path}" + ) + dataset = load_dataset(dataset_path, cache_dir="~/.cache/huggingface/datasets") + return dataset + else: + # Load dataset from local file + try: + print(f"Lodding dataset from local path: {dataset_path}") + dataset = local_dataset(dataset_path, eval_dataset_size) + return dataset + except: + raise ValueError(f"Error loading dataset from {dataset_path}") + + +templates: Dict[str, Template] = {} + + +def get_template_and_fix_tokenizer( + name: str, tokenizer: "PreTrainedTokenizer" +) -> Template: + template = templates.get(name, None) + assert template is not None, "Template {} does not exist.".format(name) + + additional_special_tokens = template.stop_words + + if tokenizer.eos_token_id is None: + tokenizer.eos_token = "<|endoftext|>" + logger.info("Add eos token: {}".format(tokenizer.eos_token)) + + if tokenizer.pad_token_id is None: + if tokenizer.unk_token_id is not None: + tokenizer.pad_token = tokenizer.unk_token + else: + tokenizer.pad_token = tokenizer.eos_token + logger.info("Add pad token: {}".format(tokenizer.pad_token)) + + if name is None: + return None + + tokenizer.add_special_tokens( + dict(additional_special_tokens=additional_special_tokens), + replace_additional_special_tokens=False, + ) + return template + + +def register_template( + name: str, + prefix: List[Union[str, Dict[str, str]]], + prompt: List[Union[str, Dict[str, str]]], + system: str, + sep: List[Union[str, Dict[str, str]]], + stop_words: Optional[List[str]] = [], + use_history: Optional[bool] = True, +) -> None: + template_class = Llama2Template if "llama2" in name else Template + templates[name] = template_class( + prefix=prefix, + prompt=prompt, + system=system, + sep=sep, + stop_words=stop_words, + use_history=use_history, + ) + + +r""" +Supports language model inference without histories. +""" +register_template( + name="vanilla", + prefix=[], + prompt=["{{query}}"], + system="", + sep=[], + use_history=False, +) + +r""" +Supports language model for mistral sqlcoder-7b +""" +register_template( + name="mistral", + prefix=["{{system}}"], + prompt=["[INST] {{query}} [/INST]"], + system="", + sep=[], +) + + +r""" +Default template. +""" +register_template( + name="default", + prefix=["{{system}}"], + prompt=["Human: {{query}}\nAssistant: "], + system=( + "A chat between a curious user and an artificial intelligence assistant. " + "The assistant gives helpful, detailed, and polite answers to the user's questions." + ), + sep=["\n"], +) + + +r""" +Supports: https://huggingface.co/meta-llama/Llama-2-7b-chat-hf + https://huggingface.co/meta-llama/Llama-2-13b-chat-hf + https://huggingface.co/meta-llama/Llama-2-70b-chat-hf +""" +register_template( + name="llama2", + prefix=["<>\n{{system}}\n<>\n\n"], + prompt=["[INST] {{query}} [/INST] "], + system=( + "You are a helpful, respectful and honest assistant. " + "Always answer as helpfully as possible, while being safe. " + "Your answers should not include any harmful, unethical, " + "racist, sexist, toxic, dangerous, or illegal content. " + "Please ensure that your responses are socially unbiased and positive in nature.\n" + "If a question does not make any sense, or is not factually coherent, " + "explain why instead of answering something not correct. " + "If you don't know the answer to a question, please don't share false information." + ), + sep=[], +) + + +r""" +Supports: https://github.com/ymcui/Chinese-LLaMA-Alpaca-2 + https://huggingface.co/ziqingyang/chinese-alpaca-2-7b +""" +register_template( + name="llama2_zh", + prefix=["<>\n{{system}}\n<>\n\n"], + prompt=["[INST] {{query}} [/INST] "], + system="You are a helpful assistant. 你是一个乐于助人的助手。", + sep=[], +) + + +r""" +Supports: https://huggingface.co/tatsu-lab/alpaca-7b-wdiff + https://github.com/ymcui/Chinese-LLaMA-Alpaca +""" +register_template( + name="alpaca", + prefix=["{{system}}"], + prompt=["### Instruction:\n{{query}}\n\n### Response:\n"], + system=( + "Below is an instruction that describes a task. " + "Write a response that appropriately completes the request." + ), + sep=["\n\n"], +) + + +r""" +Supports: https://huggingface.co/lmsys/vicuna-7b-delta-v1.1 + https://huggingface.co/lmsys/vicuna-13b-delta-v1.1 +""" +register_template( + name="vicuna", + prefix=["{{system}}"], + prompt=["USER: {{query}} ASSISTANT: "], + system=( + "A chat between a curious user and an artificial intelligence assistant. " + "The assistant gives helpful, detailed, and polite answers to the user's questions." + ), + sep=[], +) + + +r""" +Supports: https://huggingface.co/BelleGroup/BELLE-LLaMA-EXT-13B +""" +register_template( + name="belle", + prefix=["{{system}}"], + prompt=["Human: {{query}}\n\nBelle: "], + system="", + sep=["\n\n"], +) + + +r""" +Supports: https://github.com/CVI-SZU/Linly +""" +register_template( + name="linly", + prefix=["{{system}}"], + prompt=["User: {{query}}\nBot: "], + system="", + sep=["\n"], +) + + +r""" +Supports: https://github.com/Neutralzz/BiLLa +""" +register_template( + name="billa", + prefix=["{{system}}"], + prompt=["Human: {{query}}\nAssistant: "], + system="", + sep=["\n"], +) + + +r""" +Supports: https://huggingface.co/IDEA-CCNL/Ziya-LLaMA-13B-v1 +""" +register_template( + name="ziya", + prefix=["{{system}}"], + prompt=[{"token": ""}, ":{{query}}\n", {"token": ""}, ":"], + system="", + sep=["\n"], +) + + +r""" +Supports: https://huggingface.co/qhduan/aquilachat-7b +""" +register_template( + name="aquila", + prefix=["{{system}}"], + prompt=["Human: {{query}}###Assistant: "], + system=( + "A chat between a curious human and an artificial intelligence assistant. " + "The assistant gives helpful, detailed, and polite answers to the human's questions." + ), + sep=["###"], +) + + +r""" +Supports: https://huggingface.co/internlm/internlm-chat-7b +""" +register_template( + name="intern", + prefix=["{{system}}"], + prompt=["<|User|>:{{query}}", {"token": ""}, "\n<|Bot|>:"], + system="", + sep=["\n"], + stop_words=["", ""], # internlm cannot replace eos token +) + + +r""" +Supports: https://huggingface.co/baichuan-inc/Baichuan-13B-Chat +Used for training and inference of the fine-tuned models. +""" +register_template( + name="baichuan", + prefix=["{{system}}"], + prompt=[ + {"token": ""}, # user token + "{{query}}", + {"token": ""}, # assistant token + ], + system="", + sep=[], + stop_words=[], +) + + +r""" +Supports: https://huggingface.co/baichuan-inc/Baichuan-13B-Chat +Used for inference of the original model. +""" +register_template( + name="baichuan_eval", + prefix=["{{system}}", {"token": ""}], # user token + prompt=["{{query}}", {"token": ""}], # assistant token + system="", + sep=[], + stop_words=[""], # user token +) + +r""" +Supports: https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat + https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat +Used for training and inference of the fine-tuned models. +""" +register_template( + name="baichuan2", + prefix=["{{system}}"], + prompt=[ + {"token": ""}, # user token + "{{query}}", + {"token": ""}, # assistant token + ], + system="", + sep=[], +) + + +r""" +Supports: https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat + https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat +Used for inference of the original model. +""" +register_template( + name="baichuan2_eval", + prefix=["{{system}}", {"token": ""}], # user token + prompt=["{{query}}", {"token": ""}], # assistant token + system="", + sep=[], + stop_words=[""], # user token +) + + +r""" +Supports: https://huggingface.co/HuggingFaceH4/starchat-alpha + https://huggingface.co/HuggingFaceH4/starchat-beta + +""" +register_template( + name="starchat", + prefix=[{"token": "<|system|>"}, "\n{{system}}", {"token": "<|end|>"}], + prompt=[ + {"token": "<|user|>"}, + "\n{{query}}", + {"token": "<|end|>"}, + "\n", + {"token": "<|assistant|>"}, + ], + system="", + sep=["\n"], + stop_words=["<|end|>"], +) + + +r""" +Supports: https://huggingface.co/Qwen/Qwen-7B-Chat +""" +register_template( + name="chatml", + prefix=[{"token": "<|im_start|>"}, "system\n{{system}}", {"token": "<|im_end|>"}], + prompt=[ + {"token": "<|im_start|>"}, + "user\n{{query}}", + {"token": "<|im_end|>"}, + "\n", + {"token": "<|im_start|>"}, + "assistant\n", + ], + system="You are a helpful assistant.", + sep=["\n"], + stop_words=["<|im_end|>"], +) + + +r""" +Supports: https://huggingface.co/THUDM/chatglm2-6b +""" +register_template( + name="chatglm2", + prefix=[{"token": "[gMASK]"}, {"token": "sop"}, "{{system}}"], + prompt=["[Round {{idx}}]\n\n问:{{query}}\n\n答:"], + system="", + sep=["\n\n"], +) + + +r""" +Supports: https://huggingface.co/THUDM/chatglm3-6b +""" +register_template( + name="chatglm3", + prefix=[ + {"token": "[gMASK]"}, + {"token": "sop"}, + {"token": "<|system|>"}, + "\n", + "{{system}}", + ], + prompt=[ + {"token": "<|user|>"}, + "\n", + "{{query}}", + {"token": "<|assistant|>"}, + "\n", # add an extra newline to avoid error in ChatGLM's process_response method + ], + system=( + "You are ChatGLM3, a large language model trained by Zhipu.AI. " + "Follow the user's instructions carefully. Respond using markdown." + ), + sep=[], + stop_words=["<|user|>", "<|observation|>"], +) + +register_template( + name="chatglm3_raw", # the raw template for tool tuning + prefix=[ + {"token": "[gMASK]"}, + {"token": "sop"}, + {"token": "<|system|>"}, + "\n", + "{{system}}", + ], + prompt=[{"token": "<|user|>"}, "\n", "{{query}}", {"token": "<|assistant|>"}], + system=( + "You are ChatGLM3, a large language model trained by Zhipu.AI. " + "Follow the user's instructions carefully. Respond using markdown." + ), + sep=[], + stop_words=["<|user|>", "<|observation|>"], +) + + +r""" +Supports: https://huggingface.co/xverse/XVERSE-13B-Chat +""" +register_template( + name="xverse", + prefix=["{{system}}"], + prompt=["Human: {{query}}\n\nAssistant: "], + system="", + sep=[], +) + + +def split_dataset( + dataset: Union["Dataset", "IterableDataset"], + data_args: "DataArguments", + training_args: "TrainingArguments", +) -> Dict[str, "Dataset"]: + if training_args.do_train: + if data_args.val_size > 1e-6: # Split the dataset + if data_args.streaming: + val_set = dataset.take(int(data_args.val_size)) + train_set = dataset.skip(int(data_args.val_size)) + dataset = dataset.shuffle( + buffer_size=data_args.buffer_size, seed=training_args.seed + ) + return {"train_dataset": train_set, "eval_dataset": val_set} + else: + val_size = ( + int(data_args.val_size) + if data_args.val_size > 1 + else data_args.val_size + ) + dataset = dataset.train_test_split( + test_size=val_size, seed=training_args.seed + ) + return { + "train_dataset": dataset["train"], + "eval_dataset": dataset["test"], + } + else: + if data_args.streaming: + dataset = dataset.shuffle( + buffer_size=data_args.buffer_size, seed=training_args.seed + ) + return {"train_dataset": dataset} + else: # do_eval or do_predict + return {"eval_dataset": dataset} + + +def preprocess_dataset( + dataset: Union["Dataset", "IterableDataset"], + tokenizer: "PreTrainedTokenizer", + data_args: "DataArguments", + training_args: "Seq2SeqTrainingArguments", + stage: Literal["pt", "sft", "rm", "ppo"], +) -> Union["Dataset", "IterableDataset"]: + column_names = list(next(iter(dataset)).keys()) + template = get_template_and_fix_tokenizer(data_args.template, tokenizer) + + def construct_example(examples: Dict[str, List[Any]]) -> Generator[Any, None, None]: + for i in range(len(examples["prompt"])): + query, response = examples["prompt"][i], examples["response"][i] + query = ( + query + "\n" + examples["query"][i] + if "query" in examples and examples["query"][i] + else query + ) + history = examples["history"][i] if "history" in examples else None + system = examples["system"][i] if "system" in examples else None + yield query, response, history, system + + def preprocess_pretrain_dataset(examples: Dict[str, List[Any]]) -> Dict[str, Any]: + # build grouped texts with format `X1 X2 X3 ...` (without ) + if isinstance( + getattr(tokenizer, "tokenizer", None), tiktoken.Encoding + ): # for tiktoken tokenizer (Qwen) + kwargs = dict(allowed_special="all") + else: + kwargs = dict(add_special_tokens=False) + + tokenized_examples = tokenizer(examples["prompt"], **kwargs) + concatenated_examples = { + k: list(chain(*tokenized_examples[k])) for k in tokenized_examples.keys() + } + total_length = len(concatenated_examples[list(concatenated_examples.keys())[0]]) + block_size = data_args.max_source_length + # we drop the small remainder, and if the total_length < block_size, we exclude this batch + total_length = (total_length // block_size) * block_size + # split by chunks of max_source_length + result = { + k: [t[i : i + block_size] for i in range(0, total_length, block_size)] + for k, t in concatenated_examples.items() + } + return result + + def preprocess_supervised_dataset(examples: Dict[str, List[Any]]) -> Dict[str, Any]: + # build inputs with format ` X Y ` and labels with format ` ... Y ` + # for multiturn examples, we only mask the prompt part in each prompt-response pair. + model_inputs = {"input_ids": [], "attention_mask": [], "labels": []} + max_length = data_args.max_source_length + data_args.max_target_length + + for query, response, history, system in construct_example(examples): + input_ids, labels = [], [] + + for source_ids, target_ids in template.encode_multiturn( + tokenizer, query, response, history, system + ): + if len(source_ids) > data_args.max_source_length: + source_ids = source_ids[: data_args.max_source_length] + if len(target_ids) > data_args.max_target_length: + target_ids = target_ids[: data_args.max_target_length] + + if len(input_ids) + len(source_ids) + len(target_ids) > max_length: + break + + input_ids += source_ids + target_ids + labels += [IGNORE_INDEX] * len(source_ids) + target_ids + + model_inputs["input_ids"].append(input_ids) + model_inputs["attention_mask"].append([1] * len(input_ids)) + model_inputs["labels"].append(labels) + + return model_inputs + + def preprocess_unsupervised_dataset( + examples: Dict[str, List[Any]] + ) -> Dict[str, Any]: + # build inputs with format ` X` and labels with format `Y ` + model_inputs = {"input_ids": [], "attention_mask": [], "labels": []} + + for query, response, history, system in construct_example(examples): + source_ids, target_ids = template.encode_oneturn( + tokenizer, query, response, history, system + ) + + if len(source_ids) > data_args.max_source_length: + source_ids = source_ids[: data_args.max_source_length] + if len(target_ids) > data_args.max_target_length: + target_ids = target_ids[: data_args.max_target_length] + + model_inputs["input_ids"].append(source_ids) + model_inputs["attention_mask"].append([1] * len(source_ids)) + model_inputs["labels"].append(target_ids) + + return model_inputs + + def preprocess_pairwise_dataset( + examples: Dict[str, List[Any]] + ) -> Dict[str, List[List[int]]]: + # build input pairs with format ` X`, `Y1 ` and `Y2 ` for rm stage + model_inputs = {"prompt_ids": [], "chosen_ids": [], "rejected_ids": []} + for query, response, history, system in construct_example(examples): + if not ( + isinstance(query, str) + and isinstance(response, list) + and query != "" + and len(response) > 1 + ): + continue + + prompt_ids, chosen_ids = template.encode_oneturn( + tokenizer, query, response[0], history, system + ) + _, rejected_ids = template.encode_oneturn( + tokenizer, query, response[1], history, system + ) + + # if template.efficient_eos: + chosen_ids += [tokenizer.eos_token_id] + rejected_ids += [tokenizer.eos_token_id] + + source_len, target_len = len(prompt_ids), max( + len(chosen_ids), len(rejected_ids) + ) + max_source_len, max_target_len = infer_max_len( + source_len, target_len, data_args + ) + if source_len > max_source_len: + prompt_ids = prompt_ids[:max_source_len] + if target_len > max_target_len: + chosen_ids = chosen_ids[:max_target_len] + rejected_ids = rejected_ids[:max_target_len] + + model_inputs["prompt_ids"].append(prompt_ids) + model_inputs["chosen_ids"].append(chosen_ids) + model_inputs["rejected_ids"].append(rejected_ids) + + return model_inputs + + def print_pairwise_dataset_example(example: Dict[str, List[int]]) -> None: + print("prompt_ids:\n{}".format(example["prompt_ids"])) + print( + "prompt:\n{}".format( + tokenizer.decode(example["prompt_ids"], skip_special_tokens=False) + ) + ) + print("chosen_ids:\n{}".format(example["chosen_ids"])) + print( + "chosen:\n{}".format( + tokenizer.decode(example["chosen_ids"], skip_special_tokens=False) + ) + ) + print("rejected_ids:\n{}".format(example["rejected_ids"])) + print( + "rejected:\n{}".format( + tokenizer.decode(example["rejected_ids"], skip_special_tokens=False) + ) + ) + + def print_supervised_dataset_example(example): + print("input_ids:\n{}".format(example["input_ids"])) + print( + "inputs:\n{}".format( + tokenizer.decode(example["input_ids"], skip_special_tokens=False) + ) + ) + print("label_ids:\n{}".format(example["labels"])) + print( + "labels:\n{}".format( + tokenizer.decode( + [ + token_id if token_id != IGNORE_INDEX else tokenizer.pad_token_id + for token_id in example["labels"] + ], + skip_special_tokens=False, + ) + ) + ) + + if stage == "pt": + pass + elif stage == "sft" and not training_args.predict_with_generate: + preprocess_function = preprocess_supervised_dataset + print_function = print_supervised_dataset_example + elif stage == "rm": + print(111111111111111111) + preprocess_function = preprocess_pairwise_dataset + print_function = print_pairwise_dataset_example + else: + pass + + with training_args.main_process_first(desc="dataset map pre-processing"): + kwargs = {} + if not data_args.streaming: + kwargs = dict( + num_proc=data_args.preprocessing_num_workers, + load_from_cache_file=not data_args.overwrite_cache, + desc="Running tokenizer on dataset", + ) + + dataset = dataset.map( + preprocess_function, batched=True, remove_columns=column_names, **kwargs + ) + + print_function(next(iter(dataset))) + return dataset + + +## used in get_dataset +def checksum(data_files: List[str], file_sha1: Optional[str] = None) -> None: + if file_sha1 is None: + logger.warning( + "Checksum failed: missing SHA-1 hash value in dataset_info.json." + ) + return + + if len(data_files) != 1: + logger.warning("Checksum failed: too many files.") + return + + with open(data_files[0], "rb") as f: + sha1 = hashlib.sha1(f.read()).hexdigest() + if sha1 != file_sha1: + logger.warning( + "Checksum failed: mismatched SHA-1 hash value at {}.".format( + data_files[0] + ) + ) + + +def get_dataset( + model_args: "ModelArguments", data_args: "DataArguments" +) -> Union["Dataset", "IterableDataset"]: + max_samples = data_args.max_samples + all_datasets: List[ + Union["Dataset", "IterableDataset"] + ] = [] # support multiple datasets + + for dataset_attr in data_args.dataset_list: + logger.info("Loading dataset {}...".format(dataset_attr)) + + if dataset_attr.load_from == "hf_hub": + data_path = dataset_attr.dataset_name + data_files = None + elif dataset_attr.load_from == "script": + data_path = os.path.join(data_args.dataset_dir, dataset_attr.dataset_name) + data_files = None + elif dataset_attr.load_from == "file": + data_path = None + data_files: List[str] = [] + + if os.path.isdir( + os.path.join(data_args.dataset_dir, dataset_attr.dataset_name) + ): # directory + for file_name in os.listdir( + os.path.join(data_args.dataset_dir, dataset_attr.dataset_name) + ): + data_files.append( + os.path.join( + data_args.dataset_dir, dataset_attr.dataset_name, file_name + ) + ) + if data_path is None: + data_path = EXT2TYPE.get(file_name.split(".")[-1], None) + else: + assert data_path == EXT2TYPE.get( + file_name.split(".")[-1], None + ), "file type does not match." + elif os.path.isfile( + os.path.join(data_args.dataset_dir, dataset_attr.dataset_name) + ): # single file + data_files.append( + os.path.join(data_args.dataset_dir, dataset_attr.dataset_name) + ) + data_path = EXT2TYPE.get(dataset_attr.dataset_name.split(".")[-1], None) + else: + raise ValueError("File not found.") + + assert data_path, "File extension must be txt, csv, json or jsonl." + checksum(data_files, dataset_attr.dataset_sha1) + else: + raise NotImplementedError + + dataset = load_dataset( + data_path, + data_files=data_files, + split=data_args.split, + cache_dir=model_args.cache_dir, + streaming=data_args.streaming, + use_auth_token=True if model_args.use_auth_token else None, + ) + + if max_samples is not None: + max_samples_temp = min(len(dataset), max_samples) + dataset = dataset.select(range(max_samples_temp)) + + for column_name in ["prompt", "query", "response", "history"]: # align datasets + if ( + getattr(dataset_attr, column_name) + and getattr(dataset_attr, column_name) != column_name + ): + dataset = dataset.rename_column( + getattr(dataset_attr, column_name), column_name + ) + + if dataset_attr.system_prompt: # add system prompt + if data_args.streaming: + dataset = dataset.map(lambda _: {"system": dataset_attr.system_prompt}) + else: + dataset = dataset.add_column( + "system", [dataset_attr.system_prompt] * len(dataset) + ) + + all_datasets.append(dataset) + + if len(data_args.dataset_list) == 1: + return all_datasets[0] + elif data_args.mix_strategy == "concat": + if data_args.streaming: + logger.warning( + "The samples between different datasets will not be mixed in streaming mode." + ) + return concatenate_datasets(all_datasets) + elif data_args.mix_strategy.startswith("interleave"): + if not data_args.streaming: + logger.warning( + "We recommend using `mix_strategy=concat` in non-streaming mode." + ) + stopping_strategy = ( + "first_exhausted" + if data_args.mix_strategy.endswith("under") + else "all_exhausted" + ) + return interleave_datasets( + all_datasets, + data_args.interleave_probs, + stopping_strategy=stopping_strategy, + ) + else: + raise ValueError("Unknown mixing strategy.") + + +def split_train_eval( + dataset: Dataset, + do_eval: bool = False, + eval_dataset_size: float = 0.1, + max_eval_samples: int = None, + do_train: bool = True, + max_train_samples: int = None, +) -> Dict[str, Dataset]: + """ + Prepare the training and evaluation datasets for a machine learning model. + + Args: + dataset (DatasetDict): The complete dataset containing train, validation, and test splits. + do_eval (bool, optional): Whether to use an evaluation dataset or not. Defaults to False. + eval_dataset_size (float, optional): The size of the validation set if splitting from the training data. + Ignored if `do_eval` is False. Defaults to 0.2. + max_eval_samples (int, optional): The maximum number of samples to keep in the evaluation dataset. + Ignored if `do_eval` is False or `None`. Defaults to None. + do_train (bool, optional): Whether to use a training dataset or not. Defaults to True. + max_train_samples (int, optional): The maximum number of samples to keep in the training dataset. + Ignored if `do_train` is False or `None`. Defaults to None. + + Returns: + Dict[str, Dataset]: A dictionary containing the prepared training and evaluation datasets + (if used), where the keys are 'train' and 'eval', respectively. + """ + if not isinstance(dataset, DatasetDict): + raise TypeError("The 'dataset' argument must be a DatasetDict object.") + + train_dataset, eval_dataset = None, None + # Prepare evaluation dataset + if do_eval: + if "eval" in dataset: + eval_dataset = dataset["eval"] + else: + # Split train dataset in train and validation according to `eval_dataset_size` + print( + f"Splitting the dataset into train and validation according to `eval_dataset_size`: {eval_dataset_size}" + ) + dataset = dataset["train"].train_test_split( + test_size=eval_dataset_size, shuffle=True, seed=42 + ) + eval_dataset = dataset["test"] + + # Reduce evaluation dataset size (if specified) + print( + f"You have set the max_eval_samples: {max_eval_samples}, will do sampling ..." + ) + if max_eval_samples is not None and len(eval_dataset) > max_eval_samples: + eval_dataset = eval_dataset.select(np.arange(max_eval_samples)) + + # Prepare training dataset + if do_train: + train_dataset = dataset["train"] + + # Reduce training dataset size (if specified) + print( + f"You have set the max_train_samples: {max_train_samples}, will do sampling ..." + ) + if max_train_samples is not None and len(train_dataset) > max_train_samples: + train_dataset = train_dataset.select(np.arange(max_train_samples)) + + return train_dataset, eval_dataset diff --git a/dbgpt_hub/data_process/multi_turn_process.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/multi_turn_process.py similarity index 89% rename from dbgpt_hub/data_process/multi_turn_process.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/multi_turn_process.py index 9e532473..a10c759c 100644 --- a/dbgpt_hub/data_process/multi_turn_process.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/multi_turn_process.py @@ -37,8 +37,8 @@ def process_data(input_file_path): # 指定输入和输出文件路径 -train_file_path = "./dbgpt_hub/data/example_text2sql_train.json" -dev_file_path = "./dbgpt_hub/data/example_text2sql_dev.json" +train_file_path = "./dbgpt_hub_sql/data/example_text2sql_train.json" +dev_file_path = "./dbgpt_hub_sql/data/example_text2sql_dev.json" # 处理数据 process_data(train_file_path) process_data(dev_file_path) diff --git a/dbgpt_hub/data_process/sft_dataset.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sft_dataset.py similarity index 98% rename from dbgpt_hub/data_process/sft_dataset.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sft_dataset.py index dec58e31..77cd9225 100644 --- a/dbgpt_hub/data_process/sft_dataset.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sft_dataset.py @@ -1,15 +1,16 @@ import copy import logging +from dataclasses import dataclass +from typing import Dict, List + import datasets import torch +from datasets import DatasetDict from torch.nn.utils.rnn import pad_sequence from torch.utils.data import Dataset -from dataclasses import dataclass -from datasets import DatasetDict from transformers.tokenization_utils import PreTrainedTokenizer -from dbgpt_hub.configs.config import IGNORE_INDEX -from typing import Dict, List +from ..configs.config import IGNORE_INDEX logger = logging.getLogger(__name__) diff --git a/dbgpt_hub/data_process/specialized_scenario_data_processing.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/specialized_scenario_data_processing.py similarity index 100% rename from dbgpt_hub/data_process/specialized_scenario_data_processing.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/specialized_scenario_data_processing.py index a35d9750..c2bbad61 100644 --- a/dbgpt_hub/data_process/specialized_scenario_data_processing.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/specialized_scenario_data_processing.py @@ -1,12 +1,12 @@ # -*- encoding: utf-8 -*- -import os import csv - +import os from typing import Any, Optional + +from connectors.anydb_connector import AnyDBConnector from sklearn.model_selection import train_test_split from .table_meta_data_processor import TableMetaDataProcessor -from connectors.anydb_connector import AnyDBConnector class SpecialScenarioDataProcessor(object): diff --git a/dbgpt_hub/data_process/sql_data_process.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sql_data_process.py similarity index 99% rename from dbgpt_hub/data_process/sql_data_process.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sql_data_process.py index 6e94acb9..d213ad58 100644 --- a/dbgpt_hub/data_process/sql_data_process.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sql_data_process.py @@ -1,22 +1,22 @@ -import os +import argparse import json -import jsonlines -import sys +import os import re -import argparse +import sys + +import jsonlines ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(ROOT_PATH) -from tqdm import tqdm - -from dbgpt_hub.configs.config import ( - SQL_DATA_INFO, +from dbgpt_hub_sql.configs.config import ( DATA_PATH, INPUT_PROMPT, - INSTRUCTION_PROMPT, INSTRUCTION_ONE_SHOT_PROMPT, + INSTRUCTION_PROMPT, + SQL_DATA_INFO, ) +from tqdm import tqdm class ProcessSqlData: @@ -159,7 +159,7 @@ def decode_json_file( with open(schema_file_path, "r") as file: schema_content = file.read() create_statements = re.findall( - r"CREATE\s.*?;", schema_content, re.DOTALL|re.IGNORECASE + r"CREATE\s.*?;", schema_content, re.DOTALL | re.IGNORECASE ) input = { "db_id": data[db_id_name], diff --git a/dbgpt_hub/data_process/sql_data_process_api.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sql_data_process_api.py similarity index 96% rename from dbgpt_hub/data_process/sql_data_process_api.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sql_data_process_api.py index 9b3c15c0..87641776 100644 --- a/dbgpt_hub/data_process/sql_data_process_api.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/sql_data_process_api.py @@ -1,18 +1,16 @@ -import os import json -import jsonlines +import os import sys +import jsonlines + ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(ROOT_PATH) -from tqdm import tqdm -from typing import List, Dict, Any, Optional +from typing import Any, Dict, List, Optional -from dbgpt_hub.configs.config import ( - INPUT_PROMPT, - INSTRUCTION_PROMPT, -) +from dbgpt_hub_sql.configs.config import INPUT_PROMPT, INSTRUCTION_PROMPT +from tqdm import tqdm class SqlDataProcessor(object): @@ -20,9 +18,9 @@ def __init__( self, data_folder: Optional[str] = None, data_info: Optional[List[Dict]] = None ) -> Any: if data_folder is None: - self.data_folder = os.path.join(ROOT_PATH, "dbgpt_hub/data") + self.data_folder = os.path.join(ROOT_PATH, "dbgpt_hub_sql/data") print( - "The user do not provide exact data folder, we take 'dbgpt_hub/data' as the default folder" + "The user do not provide exact data folder, we take 'dbgpt_hub_sql/data' as the default folder" ) else: self.data_folder = data_folder @@ -197,7 +195,7 @@ def preprocess_sft_data( if __name__ == "__main__": - data_folder = os.path.join(ROOT_PATH, "dbgpt_hub/data") + data_folder = os.path.join(ROOT_PATH, "dbgpt_hub_sql/data") data_info = [ { "data_source": "spider", diff --git a/dbgpt_hub/data_process/table_meta_data_processor.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/table_meta_data_processor.py similarity index 96% rename from dbgpt_hub/data_process/table_meta_data_processor.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/table_meta_data_processor.py index 30b1e453..c13342f3 100644 --- a/dbgpt_hub/data_process/table_meta_data_processor.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/data_process/table_meta_data_processor.py @@ -1,8 +1,8 @@ -from typing import Any, Optional, Dict -from connectors.anydb_connector import AnyDBConnector +from typing import Any, Dict, Optional + +from .connectors.anydb_connector import AnyDBConnector -# -*- encoding: utf-8 -*- class TableMetaDataProcessor(object): def __init__( self, conn: Optional[AnyDBConnector] = None, config_data: Optional[Dict] = None diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/dbgpt_hub/dataset_util/db_config.yaml b/src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/db_config.yaml similarity index 100% rename from dbgpt_hub/dataset_util/db_config.yaml rename to src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/db_config.yaml diff --git a/dbgpt_hub/dataset_util/main.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/main.py similarity index 87% rename from dbgpt_hub/dataset_util/main.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/main.py index c0824a7e..2e8cec1c 100644 --- a/dbgpt_hub/dataset_util/main.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/dataset_util/main.py @@ -1,10 +1,10 @@ # -*- encoding: utf-8 -*- -import yaml import json import os -from dbgpt_hub.data_process.connections.mysql_connector import MySQLConnector -from dbgpt_hub.data_process.table_meta_data_processor import TableMetaDataProcessor +import yaml +from dbgpt_hub_sql.data_process.connections.mysql_connector import MySQLConnector +from dbgpt_hub_sql.data_process.table_meta_data_processor import TableMetaDataProcessor def get_config(path): diff --git a/dbgpt_hub/eval/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/__init__.py similarity index 100% rename from dbgpt_hub/eval/__init__.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/eval/__init__.py diff --git a/dbgpt_hub/eval/evaluation.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation.py similarity index 98% rename from dbgpt_hub/eval/evaluation.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation.py index a96c7f90..8bf6078f 100644 --- a/dbgpt_hub/eval/evaluation.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation.py @@ -7,15 +7,15 @@ ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(ROOT_PATH) -import sqlite3 import argparse -import subprocess import json +import sqlite3 +import subprocess +from typing import Any, Dict, Optional -from typing import Optional, Dict, Any -from process_sql import get_schema, Schema, get_sql from exec_eval import eval_exec_match -from func_timeout import func_timeout, FunctionTimedOut +from func_timeout import FunctionTimedOut, func_timeout +from process_sql import Schema, get_schema, get_sql TIMEOUT = 30 # maximum waiting time for a single query @@ -1206,7 +1206,7 @@ def evaluate_api(args: Optional[Dict[str, Any]] = None): dest="db", type=str, help="the directory that contains all the databases and test suites", - default="./dbgpt_hub/data/spider/database", + default="./dbgpt_hub_sql/data/spider/database", ) parser.add_argument( "--table", @@ -1258,13 +1258,13 @@ def evaluate_api(args: Optional[Dict[str, Any]] = None): output_file_path = ( args.input.rsplit(".", 1)[0] + "2sql." + args.input.rsplit(".", 1)[1] ) - args.gold = "./dbgpt_hub/data/eval_data/gold_natsql2sql.txt" - args.table = "./dbgpt_hub/data/eval_data/tables_for_natsql2sql.json" + args.gold = "./dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt" + args.table = "./dbgpt_hub_sql/data/eval_data/tables_for_natsql2sql.json" else: output_file_path = args.input # args.gold = "./eval/data/gold.txt" - args.gold = "./dbgpt_hub/data/eval_data/gold.txt" - args.table = "./dbgpt_hub/data/eval_data/tables.json" + args.gold = "./dbgpt_hub_sql/data/eval_data/gold.txt" + args.table = "./dbgpt_hub_sql/data/eval_data/tables.json" args.pred = output_file_path # only evaluating exact match needs this argument diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation_api.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation_api.py new file mode 100644 index 00000000..4a17e778 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation_api.py @@ -0,0 +1,32 @@ +from typing import Any, Dict, Optional + +from dbgpt_hub_sql.eval import evaluation + + +def start_evaluate( + args: Optional[Dict[str, Any]] = None, +): + # Arguments for evaluation + if args is None: + args = { + "input": "./dbgpt_hub_sql/output/pred/pred_sql_dev_skeleton.sql", + "gold": "./dbgpt_hub_sql/data/eval_data/gold.txt", + "gold_natsql": "./dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt", + "db": "./dbgpt_hub_sql/data/spider/database", + "table": "./dbgpt_hub_sql/data/eval_data/tables.json", + "table_natsql": "./dbgpt_hub_sql/data/eval_data/tables_for_natsql2sql.json", + "etype": "exec", + "plug_value": True, + "keep_distict": False, + "progress_bar_for_each_datapoint": False, + "natsql": False, + } + else: + args = args + + # Execute evaluation + evaluation.evaluate_api(args) + + +if __name__ == "__main__": + start_evaluate() diff --git a/dbgpt_hub/eval/evaluation_bird.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation_bird.py similarity index 97% rename from dbgpt_hub/eval/evaluation_bird.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation_bird.py index aee545eb..71172e87 100644 --- a/dbgpt_hub/eval/evaluation_bird.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/evaluation_bird.py @@ -2,15 +2,16 @@ do evaluate about the predict sql in dataset BIRD,compare with default dev.sql --db """ -import sys -import json import argparse -import sqlite3 -import multiprocessing as mp -from func_timeout import func_timeout, FunctionTimedOut +import json import math +import multiprocessing as mp +import sqlite3 +import sys import time +from func_timeout import FunctionTimedOut, func_timeout + def load_json(dir): with open(dir, "r") as j: @@ -201,13 +202,15 @@ def print_data(score_lists, count_lists, metric="Exec ACCURACY"): default="../../pred_sql/pred_sql_bird_qwen14b_1212.sql", ) args_parser.add_argument( - "--ground_truth_path", type=str, default="../../dbgpt_hub/data/bird/dev/dev.sql" + "--ground_truth_path", + type=str, + default="../../dbgpt_hub_sql/data/bird/dev/dev.sql", ) args_parser.add_argument("--data_mode", type=str, default="dev") args_parser.add_argument( "--db_root_path", type=str, - default="../../dbgpt_hub/data/bird/dev/dev_databases/", + default="../../dbgpt_hub_sql/data/bird/dev/dev_databases/", ) args_parser.add_argument("--num_cpus", type=int, default=1) args_parser.add_argument("--meta_time_out", type=float, default=30.0) diff --git a/dbgpt_hub/eval/exec_eval.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/exec_eval.py similarity index 98% rename from dbgpt_hub/eval/exec_eval.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/eval/exec_eval.py index 24dec4ea..22ac6e2a 100644 --- a/dbgpt_hub/eval/exec_eval.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/exec_eval.py @@ -1,19 +1,18 @@ +import asyncio import os +import random import re -import asyncio import sqlite3 import threading -import tqdm -import random -from typing import Tuple, Any, List, Set -from itertools import product from collections import defaultdict +from itertools import chain, product +from typing import Any, List, Set, Tuple + +import tqdm # from .parse import get_all_preds_for_execution, remove_distinct from parse import get_all_preds_for_execution, remove_distinct -from itertools import chain - threadLock = threading.Lock() TIMEOUT = 60 EXEC_TMP_DIR = "tmp/" diff --git a/dbgpt_hub/eval/parse.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/parse.py similarity index 99% rename from dbgpt_hub/eval/parse.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/eval/parse.py index 2cdb9225..cfb6cabe 100644 --- a/dbgpt_hub/eval/parse.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/parse.py @@ -1,10 +1,11 @@ +import itertools import re +from collections import namedtuple +from typing import Any, Dict, Iterator, List, Set, Tuple, Union + import sqlparse -import itertools -from typing import List, Tuple, Set, Iterator, Dict, Any, Union from sqlparse.sql import Comparison, Identifier from sqlparse.tokens import Whitespace -from collections import namedtuple Token = namedtuple("Token", ["ttype", "value"]) VALUE_NUM_SYMBOL = "VALUERARE" diff --git a/dbgpt_hub/eval/process_sql.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/process_sql.py similarity index 99% rename from dbgpt_hub/eval/process_sql.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/eval/process_sql.py index 7fd426e2..2ad8aea6 100644 --- a/dbgpt_hub/eval/process_sql.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/eval/process_sql.py @@ -26,6 +26,7 @@ import json import sqlite3 + from nltk import word_tokenize CLAUSE_KEYWORDS = ( diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/__init__.py @@ -0,0 +1 @@ + diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/adapter.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/adapter.py new file mode 100644 index 00000000..322ad44c --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/adapter.py @@ -0,0 +1,116 @@ +import os +from typing import TYPE_CHECKING + +import torch +from peft import LoraConfig, PeftModel, TaskType, get_peft_model +from peft.utils import CONFIG_NAME, WEIGHTS_NAME + +from .config_parser import load_trainable_params +from .loggings import get_logger + +if TYPE_CHECKING: + from transformers.modeling_utils import PreTrainedModel + +logger = get_logger(__name__) + + +def init_adapter( + model: "PreTrainedModel", + model_args: "ModelArguments", + finetuning_args: "FinetuningArguments", + is_trainable: bool, + is_mergeable: bool, +) -> "PreTrainedModel": + r""" + Initializes the adapters. + + Support full-parameter, freeze and LoRA ,QLoRA,training. + + Note that the trainable parameters must be cast to float32. + """ + + if finetuning_args.finetuning_type == "none" and is_trainable: + raise ValueError("You cannot use finetuning_type=none while training.") + + if finetuning_args.finetuning_type == "full" and is_trainable: + logger.info("Fine-tuning method: Full") + model = model.float() + + if finetuning_args.finetuning_type == "freeze": + logger.info("Fine-tuning method: Freeze") + + for name, param in model.named_parameters(): + if not any( + trainable_layer in name + for trainable_layer in finetuning_args.trainable_layers + ): + param.requires_grad_(False) + else: + param.data = param.data.to(torch.float32) + + if model_args.checkpoint_dir is not None: + assert load_trainable_params( + model, model_args.checkpoint_dir[0] + ), "Model checkpoint is not correctly loaded." + + if finetuning_args.finetuning_type == "lora": + logger.info("Fine-tuning method: LoRA") + latest_checkpoint = None + + if model_args.checkpoint_dir is not None: + assert os.path.exists( + os.path.join(model_args.checkpoint_dir[0], WEIGHTS_NAME) + ), "Provided path ({}) does not contain a LoRA weight.".format( + model_args.checkpoint_dir[0] + ) + assert os.path.exists( + os.path.join(model_args.checkpoint_dir[0], CONFIG_NAME) + ), "The given checkpoint may be not a LoRA checkpoint, please specify `--finetuning_type full/freeze` instead." + + if (is_trainable and finetuning_args.resume_lora_training) or ( + not is_mergeable + ): # continually fine-tuning + checkpoints_to_merge, latest_checkpoint = ( + model_args.checkpoint_dir[:-1], + model_args.checkpoint_dir[-1], + ) + else: + checkpoints_to_merge = model_args.checkpoint_dir + + for checkpoint in checkpoints_to_merge: + model = PeftModel.from_pretrained(model, checkpoint) + model = model.merge_and_unload() + + if len(checkpoints_to_merge) > 0: + logger.info( + "Merged {} model checkpoint(s).".format(len(checkpoints_to_merge)) + ) + + if ( + latest_checkpoint is not None + ): # resume lora training or quantized inference + model = PeftModel.from_pretrained( + model, latest_checkpoint, is_trainable=is_trainable + ) + + if ( + is_trainable and latest_checkpoint is None + ): # create new lora weights while training + lora_config = LoraConfig( + task_type=TaskType.CAUSAL_LM, + inference_mode=False, + r=finetuning_args.lora_rank, + lora_alpha=finetuning_args.lora_alpha, + lora_dropout=finetuning_args.lora_dropout, + target_modules=finetuning_args.lora_target, + ) + model = get_peft_model(model, lora_config) + + if model_args.checkpoint_dir is not None: + logger.info( + "Loaded fine-tuned model from checkpoint(s): {}".format( + ",".join(model_args.checkpoint_dir) + ) + ) + + return model diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/chat_model.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/chat_model.py new file mode 100644 index 00000000..82b0e0ba --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/chat_model.py @@ -0,0 +1,125 @@ +from threading import Thread +from typing import Any, Dict, Generator, List, Optional, Tuple + +import torch +from transformers import GenerationConfig, TextIteratorStreamer + +from ..data_process.data_utils import get_template_and_fix_tokenizer +from .config_parser import get_infer_args +from .load_tokenizer import dispatch_model, load_model_and_tokenizer +from .model_trainer import get_logits_processor + + +class ChatModel: + def __init__(self, args: Optional[Dict[str, Any]] = None) -> None: + ( + model_args, + self.data_args, + finetuning_args, + self.generating_args, + ) = get_infer_args(args) + self.model, self.tokenizer = load_model_and_tokenizer( + model_args, finetuning_args + ) + self.tokenizer.padding_side = "left" + self.model = dispatch_model(self.model) + self.template = get_template_and_fix_tokenizer( + self.data_args.template, self.tokenizer + ) + self.system_prompt = self.data_args.system_prompt + + def process_args( + self, + query: str, + history: Optional[List[Tuple[str, str]]] = None, + system: Optional[str] = None, + **input_kwargs + ) -> Tuple[Dict[str, Any], int]: + system = system or self.system_prompt + + prompt, _ = self.template.encode_oneturn( + tokenizer=self.tokenizer, + query=query, + resp="", + history=history, + system=system, + ) + input_ids = torch.tensor([prompt], device=self.model.device) + prompt_length = len(input_ids[0]) + + do_sample = input_kwargs.pop("do_sample", None) + temperature = input_kwargs.pop("temperature", None) + top_p = input_kwargs.pop("top_p", None) + top_k = input_kwargs.pop("top_k", None) + repetition_penalty = input_kwargs.pop("repetition_penalty", None) + max_length = input_kwargs.pop("max_length", None) + max_new_tokens = input_kwargs.pop("max_new_tokens", None) + + generating_args = self.generating_args.to_dict() + generating_args.update( + dict( + do_sample=do_sample + if do_sample is not None + else generating_args["do_sample"], + temperature=temperature or generating_args["temperature"], + top_p=top_p or generating_args["top_p"], + top_k=top_k or generating_args["top_k"], + repetition_penalty=repetition_penalty + or generating_args["repetition_penalty"], + eos_token_id=[self.tokenizer.eos_token_id] + + self.tokenizer.additional_special_tokens_ids, + pad_token_id=self.tokenizer.pad_token_id, + ) + ) + + if max_length: + generating_args.pop("max_new_tokens", None) + generating_args["max_length"] = max_length + + if max_new_tokens: + generating_args.pop("max_length", None) + generating_args["max_new_tokens"] = max_new_tokens + + gen_kwargs = dict( + inputs=input_ids, + generation_config=GenerationConfig(**generating_args), + logits_processor=get_logits_processor(), + ) + + return gen_kwargs, prompt_length + + @torch.inference_mode() + def chat( + self, + query: str, + history: Optional[List[Tuple[str, str]]] = None, + system: Optional[str] = None, + **input_kwargs + ) -> Tuple[str, Tuple[int, int]]: + gen_kwargs, prompt_length = self.process_args( + query, history, system, **input_kwargs + ) + generation_output = self.model.generate(**gen_kwargs) + outputs = generation_output.tolist()[0][prompt_length:] + response = self.tokenizer.decode(outputs, skip_special_tokens=True) + response_length = len(outputs) + return response, (prompt_length, response_length) + + @torch.inference_mode() + def stream_chat( + self, + query: str, + history: Optional[List[Tuple[str, str]]] = None, + system: Optional[str] = None, + **input_kwargs + ) -> Generator[str, None, None]: + gen_kwargs, _ = self.process_args(query, history, system, **input_kwargs) + streamer = TextIteratorStreamer( + self.tokenizer, timeout=60.0, skip_prompt=True, skip_special_tokens=True + ) + gen_kwargs["streamer"] = streamer + + thread = Thread(target=self.model.generate, kwargs=gen_kwargs) + thread.start() + + yield from streamer diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/config_parser.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/config_parser.py new file mode 100644 index 00000000..34ead7ad --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/config_parser.py @@ -0,0 +1,258 @@ +import os +import sys +from typing import Any, Dict, Optional, Tuple + +import datasets +import torch +import transformers +from transformers import HfArgumentParser, Seq2SeqTrainingArguments +from transformers.modeling_utils import load_sharded_checkpoint +from transformers.trainer import WEIGHTS_INDEX_NAME, WEIGHTS_NAME +from transformers.trainer_utils import get_last_checkpoint + +from ..configs.data_args import DataArguments +from ..configs.model_args import ( + FinetuningArguments, + GeneratingArguments, + ModelArguments, +) +from .loggings import get_logger + +logger = get_logger(__name__) + + +def get_state_dict(model: torch.nn.Module) -> Dict[str, torch.Tensor]: + state_dict: Dict[str, torch.Tensor] = model.state_dict() + filtered_state_dict = {} + + for k, v in model.named_parameters(): + if v.requires_grad: + filtered_state_dict[k] = state_dict[k].cpu().clone().detach() + + return filtered_state_dict + + +def load_trainable_params(model: torch.nn.Module, checkpoint_dir: os.PathLike) -> bool: + weights_file = os.path.join(checkpoint_dir, WEIGHTS_NAME) + if os.path.exists(weights_file): + model_state_dict = torch.load(weights_file, map_location="cpu") + model.load_state_dict(model_state_dict, strict=False) # skip missing keys + elif os.path.exists(os.path.join(checkpoint_dir, WEIGHTS_INDEX_NAME)): + load_sharded_checkpoint(model, checkpoint_dir, strict=False) + else: + logger.warning( + "Provided path ({}) does not contain pre-trained weights.".format( + checkpoint_dir + ) + ) + return False + return True + + +def _parse_args( + parser: HfArgumentParser, args: Optional[Dict[str, Any]] = None +) -> Tuple[Any]: + if args is not None: + return parser.parse_dict(args) + elif len(sys.argv) == 2 and sys.argv[1].endswith(".yaml"): + return parser.parse_yaml_file(os.path.abspath(sys.argv[1])) + elif len(sys.argv) == 2 and sys.argv[1].endswith(".json"): + return parser.parse_json_file(os.path.abspath(sys.argv[1])) + else: + return parser.parse_args_into_dataclasses() + + +def parse_train_args( + args: Optional[Dict[str, Any]] = None +) -> Tuple[ + ModelArguments, + DataArguments, + Seq2SeqTrainingArguments, + FinetuningArguments, + GeneratingArguments, +]: + parser = HfArgumentParser( + ( + ModelArguments, + DataArguments, + Seq2SeqTrainingArguments, + FinetuningArguments, + GeneratingArguments, + ) + ) + return _parse_args(parser, args) + + +def parse_infer_args( + args: Optional[Dict[str, Any]] = None +) -> Tuple[ModelArguments, DataArguments, FinetuningArguments, GeneratingArguments]: + parser = HfArgumentParser( + (ModelArguments, DataArguments, FinetuningArguments, GeneratingArguments) + ) + return _parse_args(parser, args) + + +def get_train_args( + args: Optional[Dict[str, Any]] = None, data_args_init: bool = True +) -> Tuple[ + ModelArguments, + DataArguments, + Seq2SeqTrainingArguments, + FinetuningArguments, + GeneratingArguments, +]: + ( + model_args, + data_args, + training_args, + finetuning_args, + generating_args, + ) = parse_train_args(args) + + # Setup logging + if training_args.should_log: + # The default of training_args.log_level is passive, so we set log level at info here to have that default. + transformers.utils.logging.set_verbosity_info() + + log_level = training_args.get_process_log_level() + datasets.utils.logging.set_verbosity(log_level) + transformers.utils.logging.set_verbosity(log_level) + transformers.utils.logging.enable_default_handler() + transformers.utils.logging.enable_explicit_format() + + # Check arguments (do not check finetuning_args since it may be loaded from checkpoints) + if data_args_init: + data_args.init_for_training() + + if training_args.max_steps == -1 and data_args.streaming: + raise ValueError("Please specify `max_steps` in streaming mode.") + + if data_args.val_size > 1e-6 and data_args.val_size < 1 and data_args.streaming: + raise ValueError("Streaming mode should have an integer val size.") + + if training_args.do_train and training_args.predict_with_generate: + raise ValueError( + "`predict_with_generate` cannot be set as True while training." + ) + + if ( + training_args.do_train + and finetuning_args.finetuning_type == "lora" + and finetuning_args.lora_target is None + ): + raise ValueError("Please specify `lora_target` in LoRA training.") + + if ( + model_args.quantization_bit is not None + and finetuning_args.finetuning_type != "lora" + ): + raise ValueError("Quantization is only compatible with the LoRA method.") + + if model_args.checkpoint_dir is not None: + if finetuning_args.finetuning_type != "lora": + if len(model_args.checkpoint_dir) != 1: + raise ValueError("Only LoRA tuning accepts multiple checkpoints.") + elif ( + model_args.quantization_bit is not None + and len(model_args.checkpoint_dir) != 1 + ): + raise ValueError("Quantized model only accepts a single checkpoint.") + + if model_args.quantization_bit is not None and (not training_args.do_train): + logger.warning("Evaluating model in 4/8-bit mode may cause lower scores.") + + if training_args.do_train and (not training_args.fp16) and (not training_args.bf16): + logger.warning("We recommend enable mixed precision training.") + + # postprocess data_args + if data_args.max_samples is not None and data_args.streaming: + logger.warning( + "`max_samples` is incompatible with `streaming`. Disabling max_samples." + ) + data_args.max_samples = None + + # postprocess training_args + if ( + training_args.local_rank != -1 + and training_args.ddp_find_unused_parameters is None + and finetuning_args.finetuning_type == "lora" + ): + logger.warning( + "`ddp_find_unused_parameters` needs to be set as False for LoRA in DDP training." + ) + training_args_dict = training_args.to_dict() + training_args_dict.update(dict(ddp_find_unused_parameters=False)) + training_args = Seq2SeqTrainingArguments(**training_args_dict) + + if ( + training_args.resume_from_checkpoint is None + and training_args.do_train + and os.path.isdir(training_args.output_dir) + and not training_args.overwrite_output_dir + ): + last_checkpoint = get_last_checkpoint(training_args.output_dir) + if last_checkpoint is None and len(os.listdir(training_args.output_dir)) > 0: + raise ValueError( + "Output directory already exists and is not empty. Use `overwrite_output_dir`." + ) + + if last_checkpoint is not None: + training_args_dict = training_args.to_dict() + training_args_dict.update(dict(resume_from_checkpoint=last_checkpoint)) + training_args = Seq2SeqTrainingArguments(**training_args_dict) + logger.info( + "Resuming from checkpoint. Change `output_dir` or use `overwrite_output_dir` to avoid." + ) + + # postprocess model_args + if training_args.bf16: + if not torch.cuda.is_bf16_supported(): + raise ValueError("Current device does not support bf16 training.") + model_args.compute_dtype = torch.bfloat16 + else: + model_args.compute_dtype = torch.float16 + + model_args.model_max_length = ( + data_args.max_source_length + data_args.max_target_length + ) + + # Log on each process the small summary: + logger.info( + "Process rank: {}, device: {}, n_gpu: {}\n distributed training: {}, compute dtype: {}".format( + training_args.local_rank, + training_args.device, + training_args.n_gpu, + bool(training_args.local_rank != -1), + str(model_args.compute_dtype), + ) + ) + logger.info(f"Training/evaluation parameters {training_args}") + + # Set seed before initializing model. + transformers.set_seed(training_args.seed) + + return model_args, data_args, training_args, finetuning_args, generating_args + + +def get_infer_args( + args: Optional[Dict[str, Any]] = None +) -> Tuple[ModelArguments, DataArguments, FinetuningArguments, GeneratingArguments]: + model_args, data_args, finetuning_args, generating_args = parse_infer_args(args) + + if ( + model_args.quantization_bit is not None + and finetuning_args.finetuning_type != "lora" + ): + raise ValueError("Quantization is only compatible with the LoRA method.") + + if model_args.checkpoint_dir is not None: + if finetuning_args.finetuning_type != "lora": + if len(model_args.checkpoint_dir) != 1: + raise ValueError("Only LoRA tuning accepts multiple checkpoints.") + elif ( + model_args.quantization_bit is not None + and len(model_args.checkpoint_dir) != 1 + ): + raise ValueError("Quantized model only accepts a single checkpoint.") + + return model_args, data_args, finetuning_args, generating_args diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/load_tokenizer.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/load_tokenizer.py new file mode 100644 index 00000000..5bd16fc3 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/load_tokenizer.py @@ -0,0 +1,401 @@ +import inspect +import math +import os +from types import MethodType +from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple + +import torch +from transformers import ( + AutoConfig, + AutoModelForCausalLM, + AutoTokenizer, + BitsAndBytesConfig, + PretrainedConfig, + PreTrainedModel, + PreTrainedTokenizer, + PreTrainedTokenizerBase, +) +from transformers.deepspeed import is_deepspeed_zero3_enabled +from transformers.trainer import SAFE_WEIGHTS_NAME, WEIGHTS_NAME +from transformers.utils import cached_file, check_min_version +from transformers.utils.versions import require_version +from trl import AutoModelForCausalLMWithValueHead + +from ..configs.config import LAYERNORM_NAMES, VALUE_HEAD_FILE_NAME +from ..configs.model_args import FinetuningArguments +from .adapter import init_adapter +from .loggings import get_logger, reset_logging + +if TYPE_CHECKING: + from transformers import PreTrainedTokenizer + + from ..configs.model_args import ModelArguments + + +logger = get_logger(__name__) + + +check_min_version("4.29.1") +require_version("datasets>=2.12.0", "To fix: pip install datasets>=2.12.0") +require_version("accelerate>=0.21.0", "To fix: pip install accelerate>=0.21.0") +require_version("peft>=0.4.0", "To fix: pip install peft>=0.4.0") +require_version("trl>=0.5.0", "To fix: pip install trl>=0.5.0") + + +def count_parameters(model: torch.nn.Module) -> Tuple[int, int]: + r""" + Returns the number of trainable parameters and number of all parameters in the model. + """ + trainable_params, all_param = 0, 0 + for param in model.parameters(): + num_params = param.numel() + # if using DS Zero 3 and the weights are initialized empty + if num_params == 0 and hasattr(param, "ds_numel"): + num_params = param.ds_numel + + # Due to the design of 4bit linear layers from bitsandbytes, multiply the number of parameters by 2 + if param.__class__.__name__ == "Params4bit": + num_params = num_params * 2 + + all_param += num_params + if param.requires_grad: + trainable_params += num_params + + return trainable_params, all_param + + +# Includes: (1) cast the layernorm in fp32 (2) make output embedding layer require grads (3) upcast the lm_head to fp32 +# Inspired by: https://github.com/huggingface/peft/blob/c0209c35abbf88c63aa267800d98a8e212ed0a42/src/peft/utils/other.py#L35 +def prepare_model_for_training( + model: "PreTrainedModel", + finetuning_type: str, + output_layer_name: Optional[str] = "lm_head", + use_gradient_checkpointing: Optional[bool] = True, + layer_norm_names: Optional[List[str]] = LAYERNORM_NAMES, +) -> "PreTrainedModel": + for name, param in model.named_parameters(): + if param.ndim == 1 and any( + layer_norm_name in name for layer_norm_name in layer_norm_names + ): + param.data = param.data.to(torch.float32) + + if use_gradient_checkpointing: + if hasattr(model, "enable_input_require_grads"): + model.enable_input_require_grads() + else: + + def make_inputs_require_grad(module, input, output): + output.requires_grad_(True) + + model.get_input_embeddings().register_forward_hook(make_inputs_require_grad) + + model.gradient_checkpointing_enable() + model.config.use_cache = ( + False # turn off when gradient checkpointing is enabled + ) + + if finetuning_type != "full" and hasattr(model, output_layer_name): + output_layer: torch.nn.Linear = getattr(model, output_layer_name) + input_dtype = output_layer.weight.dtype + + class CastOutputToFloat(torch.nn.Sequential): + def forward(self, x: torch.Tensor) -> torch.Tensor: + return super().forward(x.to(input_dtype)).to(torch.float32) + + setattr(model, output_layer_name, CastOutputToFloat(output_layer)) + + return model + + +def load_valuehead_params( + path_or_repo_id: str, model_args: "ModelArguments" +) -> Dict[str, torch.Tensor]: + r""" + Loads value head parameters from Hugging Face Hub or local disk. + + Returns: dict with keys `v_head.summary.weight` and `v_head.summary.bias`. + """ + kwargs = {"path_or_repo_id": path_or_repo_id, "cache_dir": model_args.cache_dir} + + if "token" in inspect.signature(cached_file).parameters: + kwargs["token"] = model_args.hf_hub_token + elif ( + "use_auth_token" in inspect.signature(cached_file).parameters + ): # for transformers==4.31.0 + kwargs["use_auth_token"] = model_args.hf_hub_token + else: + logger.warning("Ignore `hf_hub_token` since matched parameter is not found.") + + try: + vhead_file = cached_file(filename=WEIGHTS_NAME, **kwargs) + return torch.load(vhead_file, map_location="cpu") + except Exception as err: + logger.info("Failed to load {}: {}".format(WEIGHTS_NAME, str(err))) + + try: + from safetensors import safe_open + + vhead_file = cached_file(filename=SAFE_WEIGHTS_NAME, **kwargs) + with safe_open(vhead_file, framework="pt", device="cpu") as f: + return { + "v_head.summary.weight": f.get_tensor("v_head.summary.weight"), + "v_head.summary.bias": f.get_tensor("v_head.summary.bias"), + } + except Exception as err: + logger.info("Failed to load {}: {}".format(SAFE_WEIGHTS_NAME, str(err))) + + logger.warning( + "Provided path ({}) does not contain valuehead weights.".format(path_or_repo_id) + ) + return None + + +def load_model_and_tokenizer( + model_args: "ModelArguments", + finetuning_args: "FinetuningArguments", + is_trainable: Optional[bool] = False, + add_valuehead: Optional[bool] = False, +) -> Tuple[PreTrainedModel, "PreTrainedTokenizer"]: + r""" + Loads pretrained model and tokenizer. + + Support both training and inference. + """ + if (not is_trainable) and model_args.checkpoint_dir is None: + logger.warning( + "Checkpoint is not found at evaluation, load the original model." + ) + finetuning_args = FinetuningArguments(finetuning_type="none") + + config_kwargs = { + "trust_remote_code": True, + "cache_dir": model_args.cache_dir, + "revision": model_args.model_revision, + "use_auth_token": True if model_args.use_auth_token else None, + } + + tokenizer = AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + use_fast=model_args.use_fast_tokenizer, + split_special_tokens=model_args.split_special_tokens, + padding_side="right", # training with left-padded tensors in fp16 precision may cause overflow + **config_kwargs + ) + + if ( + finetuning_args.finetuning_type == "full" + and model_args.checkpoint_dir is not None + ): + model_to_load = model_args.checkpoint_dir[0] + else: + model_to_load = model_args.model_name_or_path + + config = AutoConfig.from_pretrained(model_to_load, **config_kwargs) + + if hasattr(config, "fp16") and hasattr(config, "bf16"): # fix Qwen config + if model_args.compute_dtype == torch.bfloat16: + setattr(config, "bf16", True) + else: + setattr(config, "fp16", True) + + # Fix config (for Qwen) + if getattr(config, "model_type", None) == "qwen": + for dtype_name, dtype in [ + ("fp16", torch.float16), + ("bf16", torch.bfloat16), + ("fp32", torch.float32), + ]: + setattr(config, dtype_name, getattr(config, "torch_dtype", None) == dtype) + + # Set RoPE scaling + if model_args.rope_scaling is not None: + if hasattr(config, "use_dynamic_ntk"): # for Qwen models + if is_trainable: + logger.warning("Qwen model does not support RoPE scaling in training.") + else: + setattr(config, "use_dynamic_ntk", True) + setattr(config, "use_logn_attn", True) + logger.info("Using dynamic NTK scaling.") + + elif hasattr(config, "rope_scaling"): # for LLaMA models + require_version( + "transformers>=4.31.0", "RoPE scaling requires transformers>=4.31.0" + ) + + if is_trainable: + if model_args.rope_scaling == "dynamic": + logger.warning( + "Dynamic NTK may not work well with fine-tuning. " + "See: https://github.com/huggingface/transformers/pull/24653" + ) + + current_max_length = getattr(config, "max_position_embeddings", None) + if ( + current_max_length + and model_args.model_max_length > current_max_length + ): + scaling_factor = float( + math.ceil(model_args.model_max_length / current_max_length) + ) + else: + logger.warning( + "Input length is smaller than max length. Consider increase input length." + ) + scaling_factor = 1.0 + else: + scaling_factor = 2.0 + + setattr( + config, + "rope_scaling", + {"type": model_args.rope_scaling, "factor": scaling_factor}, + ) + logger.info( + "Using {} scaling strategy and setting scaling factor to {}".format( + model_args.rope_scaling, scaling_factor + ) + ) + + else: + logger.warning("Current model does not support RoPE scaling.") + + # Quantization configurations (using bitsandbytes library). + is_mergeable = True + if model_args.quantization_bit is not None: + if is_deepspeed_zero3_enabled(): + raise ValueError("DeepSpeed ZeRO-3 is incompatible with quantization.") + + if model_args.quantization_bit == 8: + require_version( + "bitsandbytes>=0.37.0", "To fix: pip install bitsandbytes>=0.37.0" + ) + # config_kwargs["load_in_8bit"] = True + config_kwargs["quantization_config"] = BitsAndBytesConfig(load_in_8bit=True) + + elif model_args.quantization_bit == 4: + require_version( + "bitsandbytes>=0.39.0", "To fix: pip install bitsandbytes>=0.39.0" + ) + # config_kwargs["load_in_4bit"] = True + config_kwargs["quantization_config"] = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_compute_dtype=model_args.compute_dtype, + bnb_4bit_use_double_quant=model_args.double_quantization, + bnb_4bit_quant_type=model_args.quantization_type, + ) + + is_mergeable = False + config_kwargs["device_map"] = ( + {"": int(os.environ.get("LOCAL_RANK", "0"))} if is_trainable else "auto" + ) + logger.info("Quantizing model to {} bit.".format(model_args.quantization_bit)) + + # Load and prepare pre-trained models (without valuehead). + model = AutoModelForCausalLM.from_pretrained( + model_to_load, + config=config, + torch_dtype=model_args.compute_dtype, + low_cpu_mem_usage=(not is_deepspeed_zero3_enabled()), + **config_kwargs + ) + + # Disable custom generate method (for Qwen) + if "GenerationMixin" not in str(model.generate.__func__): + model.generate = MethodType(PreTrainedModel.generate, model) + + # Fix LM head (for ChatGLM2,ChatGLM3) + if not hasattr(model, "lm_head") and hasattr(model, "transformer"): + setattr(model, "lm_head", model.transformer.output_layer) + + # Register auto class to save the custom code files. + if isinstance(config, PretrainedConfig) and "AutoConfig" in getattr( + config, "auto_map", {} + ): + config.__class__.register_for_auto_class() + if isinstance(model, PreTrainedModel) and "AutoModelForCausalLM" in getattr( + config, "auto_map", {} + ): + model.__class__.register_for_auto_class() + if isinstance( + tokenizer, PreTrainedTokenizerBase + ) and "AutoTokenizer" in tokenizer.init_kwargs.get("auto_map", {}): + tokenizer.__class__.register_for_auto_class() + + # Initialize adapters + model = ( + prepare_model_for_training(model, finetuning_args.finetuning_type) + if is_trainable + else model + ) + model = init_adapter(model, model_args, finetuning_args, is_trainable, is_mergeable) + + # Prepare model with valuehead for RLHF + if add_valuehead: + model: "AutoModelForCausalLMWithValueHead" = ( + AutoModelForCausalLMWithValueHead.from_pretrained(model) + ) + ignore_modules = [ + name for name, _ in model.named_parameters() if "pretrained_model" in name + ] + setattr(model, "_keys_to_ignore_on_save", ignore_modules) + setattr( + model, "tie_weights", MethodType(lambda _: None, model) + ) # use empty method + vhead_path = ( + model_args.checkpoint_dir[-1] + if model_args.checkpoint_dir is not None + else model_args.model_name_or_path + ) + vhead_params = load_valuehead_params(vhead_path, model_args) + if vhead_params is not None: + model.load_state_dict(vhead_params, strict=False) + logger.info("Loaded valuehead from checkpoint: {}".format(vhead_path)) + + # Prepare model for inference + if not is_trainable: + model.requires_grad_(False) # fix all model params + infer_dtype = ( + torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16 + ) # detect cuda capability + model = model.to(infer_dtype) if model_args.quantization_bit is None else model + + trainable_params, all_param = count_parameters(model) + logger.info( + "trainable params: {:d} || all params: {:d} || trainable%: {:.4f}".format( + trainable_params, all_param, 100 * trainable_params / all_param + ) + ) + + return model, tokenizer + + +def dispatch_model(model: "PreTrainedModel") -> "PreTrainedModel": + r""" + Dispatches a pre-trained model to GPUs with balanced memory. + Borrowed from: https://github.com/huggingface/transformers/blob/v4.31.0/src/transformers/modeling_utils.py#L2803 + """ + if getattr(model, "is_loaded_in_8bit", False) or getattr( + model, "is_loaded_in_4bit", False + ): # do nothing + return model + + if torch.cuda.device_count() > 1: + from accelerate import dispatch_model + from accelerate.utils import get_balanced_memory, infer_auto_device_map + + if model._no_split_modules is None: + raise ValueError( + "The model class needs to implement the `_no_split_modules` attribute." + ) + + kwargs = { + "dtype": model.dtype, + "no_split_module_classes": model._no_split_modules, + } + max_memory = get_balanced_memory(model, **kwargs) + # Make sure tied weights are tied before creating the device map. + model.tie_weights() + device_map = infer_auto_device_map(model, max_memory=max_memory, **kwargs) + return dispatch_model(model, device_map) + else: + return model.cuda() diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/loggings.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/loggings.py new file mode 100644 index 00000000..b33270fb --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/loggings.py @@ -0,0 +1,229 @@ +import json +import logging +import os +import sys +import time +from datetime import timedelta +from typing import TYPE_CHECKING + +from transformers import TrainerCallback +from transformers.trainer_utils import has_length + +from ..configs.config import LOG_FILE_NAME + +if TYPE_CHECKING: + from transformers import TrainerControl, TrainerState, TrainingArguments + + +def reset_logging(): + r""" + Removes basic config of root logger + """ + root = logging.getLogger() + list(map(root.removeHandler, root.handlers)) + list(map(root.removeFilter, root.filters)) + + +def get_logger(name: str) -> logging.Logger: + formatter = logging.Formatter( + fmt="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%m/%d/%Y %H:%M:%S", + ) + handler = logging.StreamHandler(sys.stdout) + handler.setFormatter(formatter) + + logger = logging.getLogger(name) + logger.setLevel(logging.INFO) + logger.addHandler(handler) + + return logger + + +logger = get_logger(__name__) + + +class LoggerHandler(logging.Handler): + def __init__(self): + super().__init__() + self.log = "" + + def reset(self): + self.log = "" + + def emit(self, record): + if record.name == "httpx": + return + log_entry = self.format(record) + self.log += log_entry + self.log += "\n\n" + + +class LogCallback(TrainerCallback): + def __init__(self, runner=None): + self.runner = runner + self.in_training = False + self.start_time = time.time() + self.cur_steps = 0 + self.max_steps = 0 + self.elapsed_time = "" + self.remaining_time = "" + + def timing(self): + cur_time = time.time() + elapsed_time = cur_time - self.start_time + avg_time_per_step = elapsed_time / self.cur_steps if self.cur_steps != 0 else 0 + remaining_time = (self.max_steps - self.cur_steps) * avg_time_per_step + self.elapsed_time = str(timedelta(seconds=int(elapsed_time))) + self.remaining_time = str(timedelta(seconds=int(remaining_time))) + + def on_train_begin( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ): + r""" + Event called at the beginning of training. + """ + if state.is_local_process_zero: + self.in_training = True + self.start_time = time.time() + self.max_steps = state.max_steps + if os.path.exists(os.path.join(args.output_dir, LOG_FILE_NAME)): + logger.warning("Previous log file in this folder will be deleted.") + os.remove(os.path.join(args.output_dir, LOG_FILE_NAME)) + + def on_train_end( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ): + r""" + Event called at the end of training. + """ + if state.is_local_process_zero: + self.in_training = False + self.cur_steps = 0 + self.max_steps = 0 + + def on_substep_end( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ): + r""" + Event called at the end of an substep during gradient accumulation. + """ + if ( + state.is_local_process_zero + and self.runner is not None + and self.runner.aborted + ): + control.should_epoch_stop = True + control.should_training_stop = True + + def on_step_end( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ): + r""" + Event called at the end of a training step. + """ + if state.is_local_process_zero: + self.cur_steps = state.global_step + self.timing() + if self.runner is not None and self.runner.aborted: + control.should_epoch_stop = True + control.should_training_stop = True + + def on_evaluate( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ): + r""" + Event called after an evaluation phase. + """ + if state.is_local_process_zero and not self.in_training: + self.cur_steps = 0 + self.max_steps = 0 + + def on_predict( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + *other, + **kwargs + ): + r""" + Event called after a successful prediction. + """ + if state.is_local_process_zero and not self.in_training: + self.cur_steps = 0 + self.max_steps = 0 + + def on_log( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ) -> None: + r""" + Event called after logging the last logs. + """ + if not state.is_local_process_zero: + return + + logs = dict( + current_steps=self.cur_steps, + total_steps=self.max_steps, + loss=state.log_history[-1].get("loss", None), + eval_loss=state.log_history[-1].get("eval_loss", None), + predict_loss=state.log_history[-1].get("predict_loss", None), + reward=state.log_history[-1].get("reward", None), + learning_rate=state.log_history[-1].get("learning_rate", None), + epoch=state.log_history[-1].get("epoch", None), + percentage=round(self.cur_steps / self.max_steps * 100, 2) + if self.max_steps != 0 + else 100, + elapsed_time=self.elapsed_time, + remaining_time=self.remaining_time, + ) + os.makedirs(args.output_dir, exist_ok=True) + with open( + os.path.join(args.output_dir, "trainer_log.jsonl"), "a", encoding="utf-8" + ) as f: + f.write(json.dumps(logs) + "\n") + + def on_prediction_step( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs + ): + r""" + Event called after a prediction step. + """ + eval_dataloader = kwargs.pop("eval_dataloader", None) + if ( + state.is_local_process_zero + and has_length(eval_dataloader) + and not self.in_training + ): + if self.max_steps == 0: + self.max_steps = len(eval_dataloader) + self.cur_steps += 1 + self.timing() diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/model_trainer.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/model_trainer.py new file mode 100644 index 00000000..0a56f7f3 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/llm_base/model_trainer.py @@ -0,0 +1,412 @@ +import json +import math +import os +from dataclasses import dataclass +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union + +import jieba +import matplotlib.pyplot as plt +import numpy as np +import torch +import torch.nn as nn +from nltk.translate.bleu_score import SmoothingFunction, sentence_bleu +from peft import PeftModel +from rouge_chinese import Rouge +from transformers import Seq2SeqTrainer +from transformers.generation.logits_process import LogitsProcessor +from transformers.generation.utils import LogitsProcessorList +from transformers.modeling_utils import ( + PreTrainedModel, + load_sharded_checkpoint, + unwrap_model, +) +from transformers.trainer import ( + TRAINER_STATE_NAME, + TRAINING_ARGS_NAME, + WEIGHTS_INDEX_NAME, + WEIGHTS_NAME, +) +from trl import PreTrainedModelWrapper + +from ..configs.config import FINETUNING_ARGS_NAME, IGNORE_INDEX, VALUE_HEAD_FILE_NAME +from .config_parser import get_state_dict, get_train_args, load_trainable_params +from .load_tokenizer import load_model_and_tokenizer +from .loggings import get_logger + +if TYPE_CHECKING: + from transformers import PreTrainedTokenizer, Seq2SeqTrainingArguments, TrainerState + from transformers.trainer import PredictionOutput + + from ..configs.model_args import FinetuningArguments + + +logger = get_logger(__name__) + + +class PeftModelMixin: + r""" + Patches the save and load methods in Hugging Face Trainer for PeftModel and ModelWithValueHead. + """ + + def __init__(self) -> None: # for type checking + self.model: PreTrainedModel = None + self.tokenizer: "PreTrainedTokenizer" = None + self.args: "Seq2SeqTrainingArguments" = None + self.finetuning_args: "FinetuningArguments" = None + self.state: "TrainerState" = None + raise AssertionError("Mixin should not be initialized.") + + def _save( + self, + output_dir: Optional[str] = None, + state_dict: Optional[Dict[str, torch.Tensor]] = None, + ) -> None: + r""" + Saves trainable parameters as model checkpoint. + + This function will only be executed at the process zero. + + Subclass and override to inject custom behavior. It should not be directly used by external scripts. + """ + output_dir = output_dir if output_dir is not None else self.args.output_dir + os.makedirs(output_dir, exist_ok=True) + logger.info(f"Saving model checkpoint to {output_dir}") + + model = unwrap_model(self.model) + if isinstance(model, PreTrainedModelWrapper): + # Custom state dict: https://github.com/lvwerra/trl/blob/v0.4.7/trl/models/modeling_value_head.py#L200 + model_state_dict = state_dict or model.state_dict() + v_head_state_dict = { + name.replace("v_head.", ""): model_state_dict[name] + .cpu() + .clone() + .detach() + for name in model_state_dict.keys() + if name.startswith("v_head.") + } + + torch.save( + v_head_state_dict, os.path.join(output_dir, VALUE_HEAD_FILE_NAME) + ) + model = model.pretrained_model + + state_dict = state_dict or get_state_dict(model) + if isinstance(model, (PeftModel, PreTrainedModel)): + model.config.use_cache = True + model.save_pretrained( + output_dir, + state_dict=state_dict, + safe_serialization=self.args.save_safetensors, + ) + model.config.use_cache = False + else: + torch.save(state_dict, os.path.join(output_dir, WEIGHTS_NAME)) + + if ( + self.finetuning_args.finetuning_type == "full" + and self.tokenizer is not None + ): + try: + self.tokenizer.save_pretrained(output_dir) + except: + logger.warning("Cannot save tokenizer, copy the files manually.") + + with open( + os.path.join(output_dir, TRAINING_ARGS_NAME), "w", encoding="utf-8" + ) as f: + f.write(self.args.to_json_string() + "\n") + + self.finetuning_args.save_to_json( + os.path.join(output_dir, FINETUNING_ARGS_NAME) + ) + + def _load_best_model(self): + r""" + Loads trainable parameters from model checkpoint. + + Subclass and override to inject custom behavior. It should not be directly used by external scripts. + """ + logger.info( + f"Loading best model from {self.state.best_model_checkpoint} (score: {self.state.best_metric})." + ) + model = unwrap_model(self.model) + + if isinstance(model, PreTrainedModelWrapper): + model.v_head.load_state_dict( + torch.load( + os.path.join( + self.state.best_model_checkpoint, VALUE_HEAD_FILE_NAME + ), + map_location="cpu", + ) + ) + model = model.pretrained_model + + if isinstance(model, PeftModel): + model.load_adapter(self.state.best_model_checkpoint, model.active_adapter) + else: # freeze/full-tuning + load_trainable_params(model, self.state.best_model_checkpoint) + + +class PeftTrainer(PeftModelMixin, Seq2SeqTrainer): + r""" + Inherits Seq2SeqTrainer to support parameter-efficient checkpoints. + """ + + def __init__(self, finetuning_args: "FinetuningArguments", **kwargs): + Seq2SeqTrainer.__init__(self, **kwargs) + self.finetuning_args = finetuning_args + + +class Seq2SeqPeftTrainer(PeftTrainer): + r""" + Inherits PeftTrainer to compute generative metrics such as BLEU and ROUGE. + """ + + def prediction_step( + self, + model: nn.Module, + inputs: Dict[str, Union[torch.Tensor, Any]], + prediction_loss_only: bool, + ignore_keys: Optional[List[str]] = None, + ) -> Tuple[Optional[float], Optional[torch.Tensor], Optional[torch.Tensor]]: + r""" + Removes the prompt part in the generated tokens. + + Subclass and override to inject custom behavior. + """ + prompt_len, label_len = inputs["input_ids"].size(-1), inputs["labels"].size(-1) + if prompt_len > label_len: + inputs["labels"] = self._pad_tensors_to_target_len( + inputs["labels"], inputs["input_ids"] + ) + if label_len > prompt_len: + inputs["input_ids"] = self._pad_tensors_to_target_len( + inputs["input_ids"], inputs["labels"] + ) + if "attention_mask" in inputs: + inputs["attention_mask"] = self._pad_tensors_to_target_len( + inputs["attention_mask"], inputs["labels"], pad_token_id=0 + ) + if "position_ids" in inputs: + inputs["position_ids"] = self._pad_tensors_to_target_len( + inputs["position_ids"], inputs["labels"], pad_token_id=0 + ) + + loss, generated_tokens, labels = super().prediction_step( + model, + inputs, + prediction_loss_only=prediction_loss_only, + ignore_keys=ignore_keys, + ) + if generated_tokens is not None: + generated_tokens[ + :, : max(prompt_len, label_len) + ] = self.tokenizer.pad_token_id * torch.ones_like( + generated_tokens[:, : max(prompt_len, label_len)] + ) + + return loss, generated_tokens, labels + + def _pad_tensors_to_target_len( + self, + src_tensor: torch.Tensor, + tgt_tensor: torch.Tensor, + pad_token_id: Optional[int] = None, + ) -> torch.Tensor: + r""" + Pads the tensor to the same length as the target tensor. + + Should only be called when predict_with_generate=True. + """ + if pad_token_id is None: + if self.tokenizer is not None and hasattr(self.tokenizer, "pad_token_id"): + assert ( + self.tokenizer.padding_side == "left" + ), "This method only accepts left-padded tensor." + pad_token_id = self.tokenizer.pad_token_id + else: + raise ValueError("PAD token is required.") + + padded_tensor = pad_token_id * torch.ones_like(tgt_tensor) + padded_tensor[:, -src_tensor.shape[-1] :] = src_tensor # adopt left-padding + return padded_tensor.contiguous() # in contiguous memory + + def save_predictions(self, predict_results: "PredictionOutput") -> None: + r""" + Saves model predictions to `output_dir`. + + A custom behavior that not contained in Seq2SeqTrainer. + """ + if not self.is_world_process_zero(): + return + + output_prediction_file = os.path.join( + self.args.output_dir, "generated_predictions.jsonl" + ) + logger.info(f"Saving prediction results to {output_prediction_file}") + + preds = np.where( + predict_results.predictions != IGNORE_INDEX, + predict_results.predictions, + self.tokenizer.pad_token_id, + ) + labels = np.where( + predict_results.label_ids != IGNORE_INDEX, + predict_results.label_ids, + self.tokenizer.pad_token_id, + ) + + decoded_preds = self.tokenizer.batch_decode( + preds, skip_special_tokens=True, clean_up_tokenization_spaces=True + ) + decoded_labels = self.tokenizer.batch_decode( + labels, skip_special_tokens=True, clean_up_tokenization_spaces=True + ) + + with open(output_prediction_file, "w", encoding="utf-8") as writer: + res: List[str] = [] + for pred, label in zip(decoded_preds, decoded_labels): + res.append( + json.dumps({"label": label, "predict": pred}, ensure_ascii=False) + ) + writer.write("\n".join(res)) + + +@dataclass +class ComputeMetrics: + r""" + Wraps the tokenizer into metric functions, used in Seq2SeqPeftTrainer. + """ + + tokenizer: "PreTrainedTokenizer" + + def __call__( + self, eval_preds: Sequence[Union[np.ndarray, Tuple[np.ndarray]]] + ) -> Dict[str, float]: + r""" + Uses the model predictions to compute metrics. + """ + preds, labels = eval_preds + score_dict = {"rouge-1": [], "rouge-2": [], "rouge-l": [], "bleu-4": []} + + preds = np.where(preds != IGNORE_INDEX, preds, self.tokenizer.pad_token_id) + labels = np.where(labels != IGNORE_INDEX, labels, self.tokenizer.pad_token_id) + + decoded_preds = self.tokenizer.batch_decode(preds, skip_special_tokens=True) + decoded_labels = self.tokenizer.batch_decode(labels, skip_special_tokens=True) + + for pred, label in zip(decoded_preds, decoded_labels): + hypothesis = list(jieba.cut(pred)) + reference = list(jieba.cut(label)) + + if ( + len(" ".join(hypothesis).split()) == 0 + or len(" ".join(reference).split()) == 0 + ): + result = { + "rouge-1": {"f": 0.0}, + "rouge-2": {"f": 0.0}, + "rouge-l": {"f": 0.0}, + } + else: + rouge = Rouge() + scores = rouge.get_scores(" ".join(hypothesis), " ".join(reference)) + result = scores[0] + + for k, v in result.items(): + score_dict[k].append(round(v["f"] * 100, 4)) + + bleu_score = sentence_bleu( + [list(label)], + list(pred), + smoothing_function=SmoothingFunction().method3, + ) + score_dict["bleu-4"].append(round(bleu_score * 100, 4)) + + return {k: float(np.mean(v)) for k, v in score_dict.items()} + + +# Avoid runtime error in model.generate(do_sample=True). +class InvalidScoreLogitsProcessor(LogitsProcessor): + def __call__( + self, input_ids: torch.LongTensor, scores: torch.FloatTensor + ) -> torch.FloatTensor: + if torch.isnan(scores).any() or torch.isinf(scores).any(): + scores.zero_() + scores[..., 0] = 1.0 + return scores + + +def get_logits_processor() -> LogitsProcessorList: + logits_processor = LogitsProcessorList() + logits_processor.append(InvalidScoreLogitsProcessor()) + return logits_processor + + +# metric used +def smooth(scalars: List[float]) -> List[float]: + r""" + EMA implementation according to TensorBoard. + """ + last = scalars[0] + smoothed = list() + weight = 1.8 * ( + 1 / (1 + math.exp(-0.05 * len(scalars))) - 0.5 + ) # a sigmoid function + for next_val in scalars: + smoothed_val = last * weight + (1 - weight) * next_val + smoothed.append(smoothed_val) + last = smoothed_val + return smoothed + + +def plot_loss( + save_dictionary: os.PathLike, keys: Optional[List[str]] = ["loss"] +) -> None: + with open( + os.path.join(save_dictionary, TRAINER_STATE_NAME), "r", encoding="utf-8" + ) as f: + data = json.load(f) + + for key in keys: + steps, metrics = [], [] + for i in range(len(data["log_history"])): + if key in data["log_history"][i]: + steps.append(data["log_history"][i]["step"]) + metrics.append(data["log_history"][i][key]) + + if len(metrics) == 0: + logger.warning(f"No metric {key} to plot.") + continue + + plt.figure() + plt.plot(steps, metrics, alpha=0.4, label="original") + plt.plot(steps, smooth(metrics), label="smoothed") + plt.title("training {} of {}".format(key, save_dictionary)) + plt.xlabel("step") + plt.ylabel(key) + plt.legend() + plt.savefig( + os.path.join(save_dictionary, "training_{}.png".format(key)), + format="png", + dpi=100, + ) + print( + "Figure saved:", + os.path.join(save_dictionary, "training_{}.png".format(key)), + ) + + +def export_model( + args: Optional[Dict[str, Any]] = None, max_shard_size: Optional[str] = "10GB" +): + model_args, _, training_args, finetuning_args, _ = get_train_args( + args, data_args_init=False + ) + model, tokenizer = load_model_and_tokenizer(model_args, finetuning_args) + model.save_pretrained(training_args.output_dir, max_shard_size=max_shard_size) + try: + tokenizer.save_pretrained(training_args.output_dir) + except: + logger.warning("Cannot save tokenizer, please copy the files manually.") diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/output/adapter/.gitkeep b/src/dbgpt-hub-sql/dbgpt_hub_sql/output/adapter/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/output/logs/.gitkeep b/src/dbgpt-hub-sql/dbgpt_hub_sql/output/logs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/output/pred/.gitkeep b/src/dbgpt-hub-sql/dbgpt_hub_sql/output/pred/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/__init__.py new file mode 100644 index 00000000..d9cb30ed --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/__init__.py @@ -0,0 +1,8 @@ +""" +dbgpt_hub.predict +============== +""" + +from .predict_api import start_predict + +__all__ = ["start_predict"] diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/predict.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/predict.py new file mode 100644 index 00000000..3db979ee --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/predict.py @@ -0,0 +1,51 @@ +import json +import os +import sys + +ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.append(ROOT_PATH) + +from typing import Any, Dict, List, Optional + +from dbgpt_hub_sql.data_process.data_utils import extract_sql_prompt_dataset +from dbgpt_hub_sql.llm_base.chat_model import ChatModel +from tqdm import tqdm + + +def prepare_dataset( + predict_file_path: Optional[str] = None, +) -> List[Dict]: + with open(predict_file_path, "r") as fp: + data = json.load(fp) + predict_data = [extract_sql_prompt_dataset(item) for item in data] + return predict_data + + +def inference(model: ChatModel, predict_data: List[Dict], **input_kwargs): + res = [] + # test + # for item in predict_data[:20]: + for item in tqdm(predict_data, desc="Inference Progress", unit="item"): + print(f"item[input] \n{item['input']}") + response, _ = model.chat(query=item["input"], history=[], **input_kwargs) + res.append(response) + return res + + +def predict(model: ChatModel): + args = model.data_args + ## predict file can be give by param --predicted_input_filename ,output_file can be gived by param predicted_out_filename + predict_data = prepare_dataset(args.predicted_input_filename) + result = inference(model, predict_data) + + with open(args.predicted_out_filename, "w") as f: + for p in result: + try: + f.write(p.replace("\n", " ") + "\n") + except: + f.write("Invalid Output!\n") + + +if __name__ == "__main__": + model = ChatModel() + predict(model) diff --git a/dbgpt_hub/predict/predict_api.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/predict_api.py similarity index 66% rename from dbgpt_hub/predict/predict_api.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/predict/predict_api.py index 11d916d0..f9a105cb 100644 --- a/dbgpt_hub/predict/predict_api.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/predict/predict_api.py @@ -1,6 +1,7 @@ import os -from dbgpt_hub.predict import predict -from typing import Optional, Dict, Any +from typing import Any, Dict, Optional + +from dbgpt_hub_sql.predict import predict def start_predict( @@ -15,9 +16,9 @@ def start_predict( "model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf", "template": "llama2", "finetuning_type": "lora", - "checkpoint_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora", - "predict_file_path": "dbgpt_hub/data/eval_data/dev_sql.json", - "predict_out_dir": "dbgpt_hub/output/", + "checkpoint_dir": "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora", + "predict_file_path": "dbgpt_hub_sql/data/eval_data/dev_sql.json", + "predict_out_dir": "dbgpt_hub_sql/output/", "predicted_out_filename": "pred_sql.sql", } else: diff --git a/dbgpt_hub/scripts/export_merge.sh b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/export_merge.sh similarity index 68% rename from dbgpt_hub/scripts/export_merge.sh rename to src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/export_merge.sh index 2bf4b4fa..37c1d0a7 100644 --- a/dbgpt_hub/scripts/export_merge.sh +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/export_merge.sh @@ -1,15 +1,15 @@ # llama2 series -python dbgpt_hub/train/export_model.py \ +python dbgpt_hub_sql/train/export_model.py \ --model_name_or_path /home/LLM/CodeLlama-13b-Instruct-hf \ --template llama2 \ --finetuning_type lora \ - --checkpoint_dir dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora \ - --output_dir dbgpt_hub/output/codellama-13b-sql-sft \ + --checkpoint_dir dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora \ + --output_dir dbgpt_hub_sql/output/codellama-13b-sql-sft \ --fp16 ## Baichuan2 -# python dbgpt_hub/train/export_model.py \ +# python dbgpt_hub_sql/train/export_model.py \ # --model_name_or_path Your_base_model_path_like_Baichuan2-13B-Chat \ # --template Your_template_like_baichuan2_eval \ # --finetuning_type lora \ diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/gen_train_eval_data.sh b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/gen_train_eval_data.sh new file mode 100644 index 00000000..a5600bdc --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/gen_train_eval_data.sh @@ -0,0 +1,2 @@ +# base spider dataset ,produce train and dev data +python dbgpt_hub_sql/data_process/sql_data_process.py \ No newline at end of file diff --git a/dbgpt_hub/scripts/predict_sft.sh b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/predict_sft.sh similarity index 58% rename from dbgpt_hub/scripts/predict_sft.sh rename to src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/predict_sft.sh index d4687da2..6f327a4a 100644 --- a/dbgpt_hub/scripts/predict_sft.sh +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/predict_sft.sh @@ -1,17 +1,17 @@ ## shijian llama2 test current_date=$(date +"%Y%m%d_%H%M") -pred_log="dbgpt_hub/output/logs/pred_test_${current_date}.log" +pred_log="dbgpt_hub_sql/output/logs/pred_test_${current_date}.log" start_time=$(date +%s) echo " Pred Start time: $(date -d @$start_time +'%Y-%m-%d %H:%M:%S')" >>${pred_log} -CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub/predict/predict.py \ +CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub_sql/predict/predict.py \ --model_name_or_path Your_download_CodeLlama-13b-Instruct-hf_path \ --template llama2 \ --finetuning_type lora \ - --predicted_input_filename dbgpt_hub/data/example_text2sql_dev.json \ - --checkpoint_dir dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora \ - --predicted_out_filename dbgpt_hub/output/pred/pred_codellama13b.sql >> ${pred_log} + --predicted_input_filename dbgpt_hub_sql/data/example_text2sql_dev.json \ + --checkpoint_dir dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora \ + --predicted_out_filename dbgpt_hub_sql/output/pred/pred_codellama13b.sql >> ${pred_log} echo "############pred end###############" >>${pred_log} echo "pred End time: $(date)" >>${pred_log} @@ -23,17 +23,17 @@ echo "Time elapsed: ${hour} hour $min min " >>${pred_log} # # wangzai baichua2_eval test -# CUDA_VISIBLE_DEVICES=0 python dbgpt_hub/predict/predict.py \ +# CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/predict/predict.py \ # --model_name_or_path /home/model/Baichuan2-13B-Chat \ # --template baichuan2_eval \ # --quantization_bit 4 \ # --finetuning_type lora \ -# --checkpoint_dir dbgpt_hub/output/adapter/baichuan2-13b-qlora +# --checkpoint_dir dbgpt_hub_sql/output/adapter/baichuan2-13b-qlora ## wangzai codellama2_pred test a100 -# CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub/predict/predict.py \ +# CUDA_VISIBLE_DEVICES=0,1 python dbgpt_hub_sql/predict/predict.py \ # --model_name_or_path /home/model_files/codellama/CodeLlama-7b-Instruct-hf \ # --template llama2 \ # --finetuning_type lora \ -# --checkpoint_dir dbgpt_hub/output/adapter/code_llama_7b-qlora \ No newline at end of file +# --checkpoint_dir dbgpt_hub_sql/output/adapter/code_llama_7b-qlora \ No newline at end of file diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/train_rm.sh b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/train_rm.sh new file mode 100644 index 00000000..39d28473 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/train_rm.sh @@ -0,0 +1,43 @@ +wandb offline # Close wandb +# a100 ,单卡 +current_date=$(date +"%Y%m%d_%H%M") +train_log="dbgpt_hub_sql/output/logs/train_sft_test_${current_date}.log" +start_time=$(date +%s) +echo " Train Start time: $(date -d @$start_time +'%Y-%m-%d %H:%M:%S')" >>${train_log} + +# the default param set could be run in a server with one a100(40G) gpu, if your server not support the set,you can set smaller param such as lora_rank and use qlora with quant 4 eg... +deepspeed --num_gpus 4 dbgpt_hub_sql/train/rm_train.py \ + --deepspeed dbgpt_hub_sql/configs/ds_config.json \ + --stage rm \ + --model_name_or_path /home/CPF/LLM/qwen-7b-chat \ + --do_train \ + --dataset example_rm_train \ + --max_source_length 1024 \ + --max_target_length 512 \ + --finetuning_type lora \ + --lora_target c_attn \ + --template chatml \ + --lora_rank 64 \ + --lora_alpha 32 \ + --output_dir dbgpt_hub_sql/output/adapter/qwen-7b-rm-test \ + --overwrite_cache \ + --overwrite_output_dir \ + --per_device_train_batch_size 1 \ + --gradient_accumulation_steps 2 \ + --lr_scheduler_type cosine_with_restarts \ + --logging_steps 50 \ + --save_steps 2000 \ + --learning_rate 1e-6 \ + --num_train_epochs 0.05 \ + --plot_loss True \ + --quantization_bit 4 >> ${train_log} + # --bf16 + # --bf16#v100不支持bf16 + +echo "############train end###############" >>${train_log} +echo "Train End time: $(date)" >>${train_log} +end_time=$(date +%s) +duration=$((end_time - start_time)) +hours=$((duration / 3600)) +min=$(( (duration % 3600) / 60)) +echo "Time elapsed: ${hour} hour $min min " >>${train_log} \ No newline at end of file diff --git a/dbgpt_hub/scripts/train_sft.sh b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/train_sft.sh similarity index 79% rename from dbgpt_hub/scripts/train_sft.sh rename to src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/train_sft.sh index 31b2da4e..05ae38a6 100644 --- a/dbgpt_hub/scripts/train_sft.sh +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/scripts/train_sft.sh @@ -1,7 +1,7 @@ wandb offline # Close wandb # a100 ,单卡 current_date=$(date +"%Y%m%d_%H%M") -train_log="dbgpt_hub/output/logs/train_sft_test_${current_date}.log" +train_log="dbgpt_hub_sql/output/logs/train_sft_test_${current_date}.log" start_time=$(date +%s) echo " Train Start time: $(date -d @$start_time +'%Y-%m-%d %H:%M:%S')" >>${train_log} @@ -15,11 +15,11 @@ dataset="example_text2sql_train" if [ "$num_shot" -eq 1 ]; then dataset="example_text2sql_train_one_shot" fi -model_name_or_path="Your_download_CodeLlama-13b-Instruct-hf_path" -output_dir="dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora" +model_name_or_path=${model_name_or_path-"codellama/CodeLlama-13b-Instruct-hf"} +output_dir="dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora" # the default param set could be run in a server with one a100(40G) gpu, if your server not support the set,you can set smaller param such as lora_rank and use qlora with quant 4 eg... -CUDA_VISIBLE_DEVICES=0 python dbgpt_hub/train/sft_train.py \ +CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/train/sft_train.py \ --model_name_or_path $model_name_or_path \ --do_train \ --dataset $dataset \ @@ -54,8 +54,8 @@ echo "Time elapsed: ${hour} hour $min min " >>${train_log} # 多卡,deepseed启动,A100 -# deepspeed --num_gpus 2 dbgpt_hub/train/sft_train.py \ -# --deepspeed dbgpt_hub/configs/stage2.json \ +# deepspeed --num_gpus 2 dbgpt_hub_sql/train/sft_train.py \ +# --deepspeed dbgpt_hub_sql/configs/stage2.json \ # --quantization_bit 4 \ # --model_name_or_path /home/model_files/Llama-2-13b-chat-hf \ # --do_train \ @@ -67,7 +67,7 @@ echo "Time elapsed: ${hour} hour $min min " >>${train_log} # --lora_rank 64 \ # --lora_alpha 32 \ # --lora_target q_proj,v_proj \ -# --output_dir dbgpt_hub/output/adapter/llama2-13b-qlora_1024_epoch1_debug1008_withDeepseed_mulitCard \ +# --output_dir dbgpt_hub_sql/output/adapter/llama2-13b-qlora_1024_epoch1_debug1008_withDeepseed_mulitCard \ # --overwrite_cache \ # --overwrite_output_dir \ # --per_device_train_batch_size 1 \ @@ -82,7 +82,7 @@ echo "Time elapsed: ${hour} hour $min min " >>${train_log} # 多卡,deepseed,全量微调 -# deepspeed --include localhost:4,5,6,7 dbgpt_hub/train/sft_train.py \ +# deepspeed --include localhost:4,5,6,7 dbgpt_hub_sql/train/sft_train.py \ # --dataset example_text2sql_train \ # --model_name_or_path CodeLlama-7b-Instruct-hf \ # --do_train \ @@ -90,7 +90,7 @@ echo "Time elapsed: ${hour} hour $min min " >>${train_log} # --max_source_length 2048 \ # --max_target_length 512 \ # --template llama2 \ -# --output_dir dbgpt_hub/output/adapter/code-llama-7b-2048_epoch4_full \ +# --output_dir dbgpt_hub_sql/output/adapter/code-llama-7b-2048_epoch4_full \ # --overwrite_cache \ # --overwrite_output_dir \ # --per_device_train_batch_size 4 \ @@ -101,4 +101,4 @@ echo "Time elapsed: ${hour} hour $min min " >>${train_log} # --num_train_epochs 4 \ # --plot_loss \ # --bf16 True\ -# --deepspeed dbgpt_hub/configs/stage3.json 2>&1 | tee ${train_log} +# --deepspeed dbgpt_hub_sql/configs/stage3.json 2>&1 | tee ${train_log} diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/train/__init__.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/__init__.py new file mode 100644 index 00000000..4b578153 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/__init__.py @@ -0,0 +1,8 @@ +""" +dbgpt_hub.train +============== +""" + +from .sft_train_api import start_sft + +__all__ = ["start_sft"] diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/train/export_model.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/export_model.py new file mode 100644 index 00000000..28b75c38 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/export_model.py @@ -0,0 +1,14 @@ +import os +import sys + +ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.append(ROOT_PATH) +from dbgpt_hub_sql.llm_base.model_trainer import export_model + + +def main(): + export_model() + + +if __name__ == "__main__": + main() diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/train/rm_train.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/rm_train.py new file mode 100644 index 00000000..f3aef8c3 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/rm_train.py @@ -0,0 +1,318 @@ +import json +import os +from dataclasses import dataclass +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union + +import numpy as np +import torch +from dbgpt_hub_sql.data_process.data_utils import ( + get_dataset, + preprocess_dataset, + split_dataset, +) +from dbgpt_hub_sql.llm_base.config_parser import get_train_args +from dbgpt_hub_sql.llm_base.load_tokenizer import load_model_and_tokenizer +from dbgpt_hub_sql.llm_base.loggings import LogCallback, get_logger +from dbgpt_hub_sql.llm_base.model_trainer import plot_loss +from transformers import ( + DataCollatorWithPadding, + Seq2SeqTrainingArguments, + Trainer, + TrainerCallback, + TrainerControl, + TrainerState, + TrainingArguments, +) +from transformers.modeling_utils import custom_object_save, unwrap_model +from transformers.trainer_utils import PREFIX_CHECKPOINT_DIR, has_length + +if TYPE_CHECKING: + from dbgpt_hub_sql.configs.data_args import DataArguments + from dbgpt_hub_sql.configs.model_args import ( + FinetuningArguments, + GeneratingArguments, + ModelArguments, + ) + from transformers.modeling_utils import PreTrainedModel + from transformers.trainer import PredictionOutput + from trl import AutoModelForCausalLMWithValueHead + +logger = get_logger(__name__) + + +@dataclass +class PairwiseDataCollatorWithPadding(DataCollatorWithPadding): + r""" + Data collator for pairwise data. + """ + + def __call__(self, features: Sequence[Dict[str, Any]]) -> Dict[str, torch.Tensor]: + r""" + Pads batched data to the longest sequence in the batch. + + We generate 2 * n examples where the first n examples represent chosen examples and + the last n examples represent rejected examples. + """ + features = [ + { + "input_ids": feature["prompt_ids"] + feature[key], + "attention_mask": [1] + * (len(feature["prompt_ids"]) + len(feature[key])), + } + for key in ("chosen_ids", "rejected_ids") + for feature in features + ] + return super().__call__(features) + + +class PairwiseTrainer(Trainer): + r""" + Inherits PeftTrainer to compute pairwise loss. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.can_return_loss = True # override property to return eval_loss + + def compute_loss( + self, + model: "PreTrainedModel", + inputs: Dict[str, torch.Tensor], + return_outputs: Optional[bool] = False, + ) -> Union[torch.Tensor, Tuple[torch.Tensor, List[torch.Tensor]]]: + r""" + Computes pairwise loss. The first n examples are chosen and the last n examples are rejected. + + Subclass and override to inject custom behavior. + + Note that the first element will be removed from the output tuple. + See: https://github.com/huggingface/transformers/blob/v4.30.2/src/transformers/trainer.py#L3509 + """ + # Compute rewards + _, _, values = model(**inputs, output_hidden_states=True, return_dict=True) + + unwrapped_model: "PreTrainedModel" = self.accelerator.unwrap_model(self.model) + if getattr(unwrapped_model.config, "model_type", None) == "chatglm": + values = torch.transpose(values, 0, 1) + + # Split the inputs and rewards into two parts, chosen and rejected + batch_size = inputs["input_ids"].size(0) // 2 + chosen_input_ids, rejected_input_ids = ( + inputs["input_ids"][:batch_size], + inputs["input_ids"][batch_size:], + ) + chosen_rewards, rejected_rewards = values[:batch_size], values[batch_size:] + chosen_scores, rejected_scores = [], [] + + # Compute pairwise loss. Only backprop on the different tokens before padding + # Inspired by: https://github.com/CarperAI/trlx/blob/main/examples/summarize_rlhf/reward_model/reward_model.py + loss = 0 + for i in range(batch_size): + chosen_length = ( + chosen_input_ids[i] != self.tokenizer.pad_token_id + ).nonzero()[-1] + 1 + rejected_length = ( + rejected_input_ids[i] != self.tokenizer.pad_token_id + ).nonzero()[-1] + 1 + check_divergence = (chosen_input_ids[i] != rejected_input_ids[i]).nonzero() + + if len(check_divergence) == 0: + end_index = chosen_length + div_index = end_index - 1 + else: + end_index = max(chosen_length, rejected_length) + div_index = check_divergence[0] + + assert div_index > 0 + chosen_trunc_rewards = chosen_rewards[i, div_index:end_index] + rejected_trunc_rewards = rejected_rewards[i, div_index:end_index] + if ( + return_outputs + ): # use the score on the last token except pad token for inference + chosen_scores.append(chosen_rewards[i, chosen_length - 1]) + rejected_scores.append(rejected_rewards[i, rejected_length - 1]) + loss += -torch.nn.functional.logsigmoid( + chosen_trunc_rewards - rejected_trunc_rewards + ).mean() + + loss = loss / batch_size + if return_outputs: + chosen_scores, rejected_scores = torch.stack(chosen_scores), torch.stack( + rejected_scores + ) + return loss, [loss, chosen_scores, rejected_scores] + + return loss + + def save_predictions(self, predict_results: "PredictionOutput") -> None: + r""" + Saves model predictions to `output_dir`. + + A custom behavior that not contained in Seq2SeqTrainer. + """ + if not self.is_world_process_zero(): + return + + output_prediction_file = os.path.join( + self.args.output_dir, "generated_predictions.jsonl" + ) + logger.info(f"Saving prediction results to {output_prediction_file}") + chosen_scores, rejected_scores = predict_results.predictions + + with open(output_prediction_file, "w", encoding="utf-8") as writer: + res: List[str] = [] + for c_score, r_score in zip(chosen_scores, rejected_scores): + res.append( + json.dumps( + { + "chosen": round(float(c_score), 2), + "rejected": round(float(r_score), 2), + } + ) + ) + writer.write("\n".join(res)) + + +class SavePeftModelCallback(TrainerCallback): + def _save_model_with_valuehead( + self, model: "AutoModelForCausalLMWithValueHead", output_dir: str + ) -> None: + model.pretrained_model.config.save_pretrained(output_dir) + if model.pretrained_model.can_generate(): + model.pretrained_model.generation_config.save_pretrained(output_dir) + if getattr(model, "is_peft_model", False): + model.pretrained_model.save_pretrained(output_dir) + elif getattr( + model.pretrained_model, "_auto_class", None + ): # must not a peft model + custom_object_save( + model.pretrained_model, output_dir, config=model.pretrained_model.config + ) + + def on_save( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs, + ): + r""" + Event called after a checkpoint save. + """ + if args.should_save: + self._save_model_with_valuehead( + model=unwrap_model(kwargs.pop("model")), + output_dir=os.path.join( + args.output_dir, + "{}-{}".format(PREFIX_CHECKPOINT_DIR, state.global_step), + ), + ) + + def on_train_end( + self, + args: "TrainingArguments", + state: "TrainerState", + control: "TrainerControl", + **kwargs, + ): + r""" + Event called at the end of training. + """ + + if args.should_save: + self._save_model_with_valuehead( + model=unwrap_model(kwargs.pop("model")), output_dir=args.output_dir + ) + + +def compute_accuracy( + eval_preds: Sequence[Union[np.ndarray, Tuple[np.ndarray]]] +) -> Dict[str, float]: + preds, _ = eval_preds + return {"accuracy": (preds[0] > preds[1]).sum() / len(preds[0])} + + +def run_rm( + model_args: "ModelArguments", + data_args: "DataArguments", + training_args: "Seq2SeqTrainingArguments", + finetuning_args: "FinetuningArguments", + callbacks: Optional[List["TrainerCallback"]] = None, +): + dataset = get_dataset(model_args, data_args) + model, tokenizer = load_model_and_tokenizer( + model_args, finetuning_args, training_args.do_train, add_valuehead=True + ) + dataset = preprocess_dataset( + dataset, tokenizer, data_args, training_args, stage="rm" + ) + data_collator = PairwiseDataCollatorWithPadding(tokenizer, pad_to_multiple_of=8) + + # Update arguments + training_args_dict = training_args.to_dict() + training_args_dict.update( + dict(remove_unused_columns=False) + ) # important for pairwise dataset + training_args = Seq2SeqTrainingArguments(**training_args_dict) + + # Initialize our Trainer + trainer = PairwiseTrainer( + model=model, + args=training_args, + tokenizer=tokenizer, + data_collator=data_collator, + callbacks=callbacks + [SavePeftModelCallback()], + compute_metrics=compute_accuracy, + **split_dataset(dataset, data_args, training_args), + ) + + # Training + if training_args.do_train: + train_result = trainer.train( + resume_from_checkpoint=training_args.resume_from_checkpoint + ) + trainer.save_model() + trainer.log_metrics("train", train_result.metrics) + trainer.save_metrics("train", train_result.metrics) + trainer.save_state() + if trainer.is_world_process_zero() and model_args.plot_loss: + plot_loss(training_args.output_dir, keys=["loss", "eval_loss"]) + + # Evaluation + if training_args.do_eval: + metrics = trainer.evaluate(metric_key_prefix="eval") + trainer.log_metrics("eval", metrics) + trainer.save_metrics("eval", metrics) + + # Predict + if training_args.do_predict: + predict_results = trainer.predict(dataset, metric_key_prefix="predict") + trainer.log_metrics("predict", predict_results.metrics) + trainer.save_metrics("predict", predict_results.metrics) + trainer.save_predictions(predict_results) + + +def train( + args: Optional[Dict[str, Any]] = None, + callbacks: Optional[List["TrainerCallback"]] = None, +): + ( + model_args, + data_args, + training_args, + finetuning_args, + generating_args, + ) = get_train_args(args) + callbacks = [LogCallback()] if callbacks is None else callbacks + + run_rm( + model_args, + data_args, + training_args, + finetuning_args, + callbacks, + ) + + +if __name__ == "__main__": + train() diff --git a/src/dbgpt-hub-sql/dbgpt_hub_sql/train/sft_train.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/sft_train.py new file mode 100644 index 00000000..1f5123b5 --- /dev/null +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/sft_train.py @@ -0,0 +1,164 @@ +import os +import sys + +ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.append(ROOT_PATH) +from typing import TYPE_CHECKING, Any, Dict, List, Optional + +from dbgpt_hub_sql.configs.config import IGNORE_INDEX +from dbgpt_hub_sql.data_process.data_utils import ( + get_dataset, + preprocess_dataset, + split_dataset, +) +from dbgpt_hub_sql.llm_base.config_parser import get_train_args +from dbgpt_hub_sql.llm_base.load_tokenizer import load_model_and_tokenizer +from dbgpt_hub_sql.llm_base.loggings import LogCallback, get_logger +from dbgpt_hub_sql.llm_base.model_trainer import ( + ComputeMetrics, + Seq2SeqPeftTrainer, + get_logits_processor, + plot_loss, +) +from transformers import DataCollatorForSeq2Seq, Seq2SeqTrainingArguments + +if TYPE_CHECKING: + from dbgpt_hub_sql.configs import ( + DataArguments, + FinetuningArguments, + GeneratingArguments, + ModelArguments, + ) + from transformers import TrainerCallback + + +logger = get_logger(__name__) + + +def run_sft( + model_args: "ModelArguments", + data_args: "DataArguments", + training_args: "Seq2SeqTrainingArguments", + finetuning_args: "FinetuningArguments", + generating_args: "GeneratingArguments", + callbacks: Optional[List["TrainerCallback"]] = None, +): + dataset = get_dataset(model_args, data_args) + model, tokenizer = load_model_and_tokenizer( + model_args, finetuning_args, training_args.do_train + ) + dataset = preprocess_dataset(dataset, tokenizer, data_args, training_args, "sft") + data_collator = DataCollatorForSeq2Seq( + tokenizer=tokenizer, + label_pad_token_id=IGNORE_INDEX + if data_args.ignore_pad_token_for_loss + else tokenizer.pad_token_id, + ) + + # Override the decoding parameters of Seq2SeqTrainer + training_args_dict = training_args.to_dict() + training_args_dict.update( + dict( + generation_max_length=training_args.generation_max_length + or data_args.max_target_length, + generation_num_beams=data_args.eval_num_beams + or training_args.generation_num_beams, + ) + ) + training_args = Seq2SeqTrainingArguments(**training_args_dict) + + # Initialize our Trainer + trainer = Seq2SeqPeftTrainer( + finetuning_args=finetuning_args, + model=model, + args=training_args, + tokenizer=tokenizer, + data_collator=data_collator, + callbacks=callbacks, + compute_metrics=ComputeMetrics(tokenizer) + if training_args.predict_with_generate + else None, + **split_dataset(dataset, data_args, training_args) + ) + + # Keyword arguments for `model.generate` + gen_kwargs = generating_args.to_dict() + gen_kwargs["eos_token_id"] = list( + set([tokenizer.eos_token_id] + tokenizer.additional_special_tokens_ids) + ) + gen_kwargs["pad_token_id"] = tokenizer.pad_token_id + gen_kwargs["logits_processor"] = get_logits_processor() + + # Training + if training_args.do_train: + train_result = trainer.train( + resume_from_checkpoint=training_args.resume_from_checkpoint + ) + trainer.log_metrics("train", train_result.metrics) + trainer.save_metrics("train", train_result.metrics) + trainer.save_state() + trainer.save_model() + if trainer.is_world_process_zero() and model_args.plot_loss: + plot_loss(training_args.output_dir, keys=["loss", "eval_loss"]) + + # Evaluation + if training_args.do_eval: + metrics = trainer.evaluate(metric_key_prefix="eval", **gen_kwargs) + if ( + training_args.predict_with_generate + ): # eval_loss will be wrong if predict_with_generate is enabled + metrics.pop("eval_loss", None) + trainer.log_metrics("eval", metrics) + trainer.save_metrics("eval", metrics) + + # Predict + if training_args.do_predict: + predict_results = trainer.predict( + dataset, metric_key_prefix="predict", **gen_kwargs + ) + if ( + training_args.predict_with_generate + ): # predict_loss will be wrong if predict_with_generate is enabled + predict_results.metrics.pop("predict_loss", None) + trainer.log_metrics("predict", predict_results.metrics) + trainer.save_metrics("predict", predict_results.metrics) + trainer.save_predictions(predict_results) + + +def train( + args: Optional[Dict[str, Any]] = None, + callbacks: Optional[List["TrainerCallback"]] = None, +): + ( + model_args, + data_args, + training_args, + finetuning_args, + generating_args, + ) = get_train_args(args) + callbacks = [LogCallback()] if callbacks is None else callbacks + + run_sft( + model_args, + data_args, + training_args, + finetuning_args, + generating_args, + callbacks, + ) + + +def export_model( + args: Optional[Dict[str, Any]] = None, max_shard_size: Optional[str] = "10GB" +): + model_args, _, training_args, finetuning_args, _ = get_train_args(args) + model, tokenizer = load_model_and_tokenizer(model_args, finetuning_args) + model.save_pretrained(training_args.output_dir, max_shard_size=max_shard_size) + try: + tokenizer.save_pretrained(training_args.output_dir) + except: + logger.warning("Cannot save tokenizer, please copy the files manually.") + + +if __name__ == "__main__": + train() diff --git a/dbgpt_hub/train/sft_train_api.py b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/sft_train_api.py similarity index 88% rename from dbgpt_hub/train/sft_train_api.py rename to src/dbgpt-hub-sql/dbgpt_hub_sql/train/sft_train_api.py index 39e207b6..c7c8d493 100644 --- a/dbgpt_hub/train/sft_train_api.py +++ b/src/dbgpt-hub-sql/dbgpt_hub_sql/train/sft_train_api.py @@ -1,7 +1,7 @@ import os +from typing import Any, Dict, Optional -from typing import Optional, Dict, Any -from dbgpt_hub.train import sft_train +from dbgpt_hub_sql.train import sft_train def start_sft( @@ -23,7 +23,7 @@ def start_sft( "template": "llama2", "lora_rank": 64, "lora_alpha": 32, - "output_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora", + "output_dir": "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora", "overwrite_cache": True, "overwrite_output_dir": True, "per_device_train_batch_size": 1, diff --git a/src/dbgpt-hub-sql/setup.py b/src/dbgpt-hub-sql/setup.py new file mode 100644 index 00000000..6d49c8a4 --- /dev/null +++ b/src/dbgpt-hub-sql/setup.py @@ -0,0 +1,61 @@ +from typing import List + +from setuptools import find_packages, setup + + +class SetupSpec: + def __init__(self) -> None: + self.extras: dict = {} + self.install_requires: List[str] = [] + + @property + def unique_extras(self) -> dict[str, list[str]]: + unique_extras = {} + for k, v in self.extras.items(): + unique_extras[k] = list(set(v)) + return unique_extras + + +setup_spec = SetupSpec() + + +def core_dependencies(): + setup_spec.extras["core"] = [ + "transformers>=4.41.2", + "datasets>=2.14.6", + "tiktoken>=0.7.0", + "torch>=2.2.1", + "peft>=0.4.0", + "trl>=0.5.0", + "prettytable", + "func-timeout", + "sqlparse", + "jsonlines", + "rouge-chinese>=1.0.3", + "jieba>=0.42.1", + "nltk>=3.8.1", + "matplotlib>=3.8.1", + "bitsandbytes>=0.39.0", + "accelerate", + ] + + +def init_install_requires(): + setup_spec.install_requires += setup_spec.extras["core"] + print(f"Install requires: \n{','.join(setup_spec.install_requires)}") + + +core_dependencies() +init_install_requires() + +excluded_packages = ["tests", "*.tests", "*.tests.*", "examples"] + +setup( + name="dbgpt-hub-sql", + version="0.3.1", + description="DB-GPT-Hub: Text-to-SQL parsing with LLMs", + packages=find_packages(exclude=excluded_packages), + install_requires=setup_spec.install_requires, + extras_require=setup_spec.unique_extras, + python_requires=">=3.10", +)