From 6d62491317d521fd8f40a5be78ad79253dfd1506 Mon Sep 17 00:00:00 2001
From: Amit Parekh <7276308+amitkparekh@users.noreply.github.com>
Date: Tue, 5 Dec 2023 09:29:38 +0800
Subject: [PATCH] chore: squash commits for release
---
.editorconfig | 20 +
.flake8 | 121 +
.../new_downstream_dataset.md | 35 +
.github/labels.yml | 90 +
.github/workflows/continuous_integration.yml | 169 +
.github/workflows/pr-lint.yml | 42 +
.github/workflows/release.yml | 29 +
.github/workflows/tests.yml | 73 +
.gitignore | 362 +
.kodiak.toml | 15 +
.mypy.ini | 39 +
.pre-commit-config.yaml | 146 +
.releaserc.js | 70 +
.vscode/extensions.json | 28 +
.vscode/launch.json | 36 +
.vscode/recommended-settings.json | 81 +
CHANGELOG.md | 384 +
LICENSE | 21 +
README.md | 71 +
docs/downloading-raw-data.md | 59 +
docs/how-to-add-a-new-downstream-dataset.md | 127 +
docs/how-to-add-a-new-pretraining-dataset.md | 157 +
docs/how-to-use-the-dataset-db.md | 148 +
logs/.gitkeep | 0
notebooks/.gitkeep | 0
poetry.lock | 6554 +++
pyproject.toml | 90 +
pytest.ini | 12 +
scripts/.gitkeep | 0
src/emma_datasets/__init__.py | 1 +
src/emma_datasets/__main__.py | 22 +
src/emma_datasets/_version.py | 7 +
src/emma_datasets/augmentations/__init__.py | 0
.../simbot_augmentators/__init__.py | 12 +
.../simbot_augmentators/action_creators.py | 238 +
.../simbot_augmentators/base_augmentator.py | 315 +
.../simbot_augmentators/break_augmentator.py | 128 +
.../simbot_augmentators/clean_augmentator.py | 138 +
.../clip_image_diversity.py | 264 +
.../simbot_augmentators/fill_augmentator.py | 153 +
.../simbot_augmentators/goto_augmentator.py | 124 +
.../open_close_augmentator.py | 131 +
.../simbot_augmentators/pickup_augmentator.py | 123 +
.../simbot_augmentators/place_augmentator.py | 137 +
.../simbot_augmentators/scan_augmentator.py | 123 +
.../simbot_augmentators/search_augmentator.py | 278 +
.../simbot_augmentators/toggle_augmentator.py | 123 +
src/emma_datasets/commands/__init__.py | 0
.../commands/create_downstream_dbs.py | 493 +
.../commands/create_pretraining_instances.py | 44 +
...e_simbot_augmentations_from_vision_data.py | 541 +
...te_simbot_instructions_from_annotations.py | 245 +
...eate_simbot_trajectories_from_dynamo_db.py | 798 +
.../decode_highlevel_key_and_generate.py | 33 +
.../commands/download_datasets.py | 64 +
.../commands/extract_annotations.py | 225 +
.../commands/organise_all_datasets.py | 334 +
src/emma_datasets/common/__init__.py | 9 +
src/emma_datasets/common/downloader.py | 375 +
src/emma_datasets/common/helpers/__init__.py | 1 +
.../common/helpers/object_manipulation.py | 19 +
src/emma_datasets/common/logger.py | 20 +
src/emma_datasets/common/progress.py | 52 +
src/emma_datasets/common/settings.py | 120 +
src/emma_datasets/constants/__init__.py | 4 +
.../constants/dataset_downloads.csv | 740 +
.../constants/simbot/ObjectManifest.json | 7905 ++++
.../constants/simbot/arena_definitions.json | 679 +
.../constants/simbot/asset_synonyms.json | 824 +
.../simbot/asset_synonyms_emnlp.json | 729 +
.../constants/simbot/augmentations.json | 156 +
.../simbot/augmentations_emnlp_train.json | 422 +
.../simbot/augmentations_emnlp_valid.json | 422 +
.../simbot/augmentations_full_train.json | 472 +
.../simbot/augmentations_full_valid.json | 472 +
.../constants/simbot/class_thresholds2.json | 134 +
.../constants/simbot/high_level_templates.py | 763 +
.../simbot/low_level_actions_templates.json | 171 +
.../constants/simbot/object_id_to_class2.json | 359 +
src/emma_datasets/constants/simbot/simbot.py | 76 +
.../teach/action_idx_to_action_name.json | 38 +
.../constants/teach/action_to_action_idx.json | 38 +
.../constants/teach/default_definitions.json | 259 +
.../constants/vqa_v2_ans2label.json | 3131 ++
src/emma_datasets/datamodels/__init__.py | 21 +
src/emma_datasets/datamodels/annotations.py | 183 +
src/emma_datasets/datamodels/base_model.py | 36 +
src/emma_datasets/datamodels/common.py | 15 +
src/emma_datasets/datamodels/constants.py | 137 +
.../datamodels/dataset_metadata.py | 42 +
.../datamodels/datasets/__init__.py | 35 +
.../datamodels/datasets/alfred.py | 145 +
src/emma_datasets/datamodels/datasets/coco.py | 74 +
.../datasets/conceptual_captions.py | 15 +
.../datamodels/datasets/ego4d.py | 171 +
.../datamodels/datasets/epic_kitchens.py | 94 +
src/emma_datasets/datamodels/datasets/gqa.py | 53 +
src/emma_datasets/datamodels/datasets/nlvr.py | 64 +
.../datamodels/datasets/refcoco.py | 191 +
.../datamodels/datasets/simbot.py | 443 +
.../datamodels/datasets/teach.py | 299 +
.../datasets/utils/simbot_utils/__init__.py | 0
.../utils/simbot_utils/ambiguous_data.py | 431 +
.../utils/simbot_utils/data_augmentations.py | 56 +
.../simbot_utils/high_level_key_processor.py | 297 +
.../simbot_utils/instruction_processing.py | 271 +
.../datasets/utils/simbot_utils/masks.py | 73 +
.../object_features_processing.py | 158 +
.../utils/simbot_utils/paraphrasers.py | 879 +
.../utils/simbot_utils/preprocessing.py | 272 +
.../utils/simbot_utils/simbot_datamodels.py | 257 +
.../datamodels/datasets/utils/vqa_v2_utils.py | 208 +
.../datamodels/datasets/visual_genome.py | 36 +
.../datamodels/datasets/vqa_v2.py | 229 +
.../datamodels/datasets/winoground.py | 32 +
src/emma_datasets/datamodels/generics.py | 14 +
src/emma_datasets/datamodels/instance.py | 103 +
src/emma_datasets/db/__init__.py | 2 +
src/emma_datasets/db/dataset_db.py | 261 +
src/emma_datasets/db/storage.py | 101 +
src/emma_datasets/io/__init__.py | 6 +
src/emma_datasets/io/archive.py | 208 +
src/emma_datasets/io/csv.py | 17 +
src/emma_datasets/io/json.py | 28 +
src/emma_datasets/io/parquet.py | 10 +
src/emma_datasets/io/paths.py | 53 +
src/emma_datasets/io/txt.py | 10 +
src/emma_datasets/parsers/__init__.py | 0
.../parsers/align_multiple_datasets.py | 175 +
.../parsers/annotation_extractors/__init__.py | 19 +
.../annotation_extractors/alfred_captions.py | 91 +
.../alfred_task_descriptions.py | 55 +
.../alfred_trajectories.py | 135 +
.../annotation_extractor.py | 209 +
.../annotation_extractors/coco_caption.py | 49 +
.../conceptual_captions.py | 82 +
.../epic_kitchens_captions.py | 39 +
.../annotation_extractors/gqa_qa_pairs.py | 52 +
.../annotation_extractors/gqa_scene_graphs.py | 39 +
.../annotation_extractors/vg_regions.py | 46 +
.../annotation_extractors/vqa_v2_qa_pairs.py | 82 +
src/emma_datasets/parsers/dataset_aligner.py | 246 +
.../parsers/dataset_metadata/__init__.py | 12 +
.../parsers/dataset_metadata/alfred.py | 181 +
.../parsers/dataset_metadata/coco.py | 74 +
.../dataset_metadata/conceptual_captions.py | 72 +
.../parsers/dataset_metadata/epic_kitchens.py | 100 +
.../parsers/dataset_metadata/gqa.py | 77 +
.../dataset_metadata/metadata_parser.py | 115 +
.../parsers/dataset_metadata/vg.py | 51 +
.../parsers/instance_creators/__init__.py | 3 +
.../parsers/instance_creators/downstream.py | 51 +
.../parsers/instance_creators/generic.py | 74 +
.../parsers/instance_creators/pretrain.py | 154 +
src/emma_datasets/pipeline/__init__.py | 2 +
.../pipeline/downstream_db_creator.py | 298 +
src/emma_datasets/pipeline/metadata_parser.py | 183 +
storage/.gitkeep | 0
storage/fixtures/EPIC_100_video_info.csv | 701 +
.../traj_data.json | 3464 ++
.../traj_data.json | 3865 ++
.../traj_data.json | 4362 ++
.../traj_data.json | 4584 ++
.../traj_data.json | 4912 ++
.../traj_data.json | 4857 ++
.../traj_data.json | 3840 ++
.../traj_data.json | 4351 ++
.../traj_data.json | 5149 +++
storage/fixtures/coco/coco_captions_tiny.json | 336 +
.../fixtures/coco/coco_dev_image_ids_tiny.npy | Bin 0 -> 144 bytes
.../coco/coco_restval_image_ids_tiny.npy | Bin 0 -> 144 bytes
.../coco/coco_test_image_ids_tiny.npy | Bin 0 -> 144 bytes
.../coco/coco_train_image_ids_tiny.npy | Bin 0 -> 144 bytes
storage/fixtures/coco_captions_train.json | 371 +
storage/fixtures/coco_captions_valid.json | 51 +
storage/fixtures/db/instances.db | Bin 0 -> 1433600 bytes
storage/fixtures/ego4d/moments_val.json | 563 +
storage/fixtures/ego4d/nlq_val.json | 1102 +
storage/fixtures/ego4d/vq_val.json | 8588 ++++
storage/fixtures/epic_kitchens.csv | 20 +
storage/fixtures/gqa_questions.json | 254 +
storage/fixtures/gqa_scene_graph.json | 658 +
storage/fixtures/nlvr.jsonl | 13 +
storage/fixtures/refcoco/instances.json | 2213 +
storage/fixtures/refcoco/refs(umd).p | Bin 0 -> 6409 bytes
storage/fixtures/simbot/simbot.json | 6580 +++
.../simbot/simbot_augmentation_images.json | 66 +
.../fixtures/teach_edh/divided_test_seen.txt | 6 +
.../teach_edh/divided_test_unseen.txt | 4 +
.../fixtures/teach_edh/divided_val_seen.txt | 9 +
.../fixtures/teach_edh/divided_val_unseen.txt | 7 +
.../train/0a57fe74bb28dca3_c887.edh0.json | 1591 +
.../train/0a733338db1ad019_b1cf.edh4.json | 5096 +++
.../train/0b2e762fcbe2b1ce_ac58.edh13.json | 5625 +++
.../train/0b8ded42ab9d39d1_8fef.edh3.json | 4457 ++
.../train/0bdf5b6f19e8f7d8_b836.edh0.json | 1631 +
.../train/0e137379e033a29e_5b37.edh0.json | 2019 +
.../train/0f15eb3a8cc916d1_8c57.edh1.json | 1436 +
.../train/1a48f0dbfcef62b0_e86a.edh1.json | 1068 +
.../train/1ad6faa0ffe15318_36af.edh1.json | 2157 +
.../train/1c70e34df85e61c8_6282.edh1.json | 1629 +
.../train/1e31c0c98ac6bad3_0dec.edh3.json | 2207 +
.../train/1e647508c2aa4edd_2745.edh1.json | 5190 +++
.../train/1f8c330151185aab_20a0.edh1.json | 2768 ++
.../train/2e0921fb56f5d875_a9e0.edh8.json | 6030 +++
.../train/2ede20d029522a7c_0781.edh2.json | 11406 +++++
.../train/4de84f3acfac78cf_c9bf.edh17.json | 8209 ++++
.../train/4e751ee7c37c15bf_81d0.edh0.json | 855 +
.../train/4f9bbffda18a2ac1_06cf.edh3.json | 4666 ++
.../0ad40b7b0e0cc45d_3a73.edh2.json | 847 +
.../1c2df1e8ff105c52_6ac7.edh12.json | 12089 +++++
.../1f87012fd210e31b_2bed.edh0.json | 707 +
.../1f87012fd210e31b_2bed.edh7.json | 9027 ++++
.../3a45b72592fe5714_365c.edh2.json | 2591 ++
.../3b305710ae4ff2c1_d082.edh4.json | 3133 ++
.../3f117593619d88bd_94db.edh2.json | 3673 ++
.../4ba5604e5d3a4ecb_7550.edh5.json | 5721 +++
.../6bc2c5375cc2f60f_e616.edh6.json | 9835 ++++
.../738a96bcdfe603a1_dcb1.edh16.json | 8393 ++++
.../738a96bcdfe603a1_dcb1.edh2.json | 4485 ++
.../7f5bf828ea7530fc_dc63.edh0.json | 610 +
.../7f8000bdc9a6df46_e4c4.edh2.json | 2117 +
.../8cff3a0ff48c0980_9f15.edh8.json | 7043 +++
.../8f059a8aa3b90765_1100.edh3.json | 6351 +++
.../0ad91909295bf186_134b.edh0.json | 3219 ++
.../0b161c6f709cde89_4c30.edh2.json | 5030 +++
.../0b42b1e6a5ad92ee_8867.edh5.json | 3496 ++
.../0d1a67f82b3b5854_d74d.edh3.json | 3875 ++
.../0d49a886a3c99bab_4ed0.edh1.json | 3503 ++
.../0d49a886a3c99bab_4ed0.edh5.json | 7341 +++
.../0d600126a7947365_cac4.edh4.json | 4391 ++
.../0fc859faf40296d7_c87e.edh6.json | 4424 ++
.../1a8b00c643110183_ebc6.edh2.json | 1473 +
.../1e8fb21f2b41b0b0_bc36.edh1.json | 2999 ++
.../1e8fb21f2b41b0b0_db8b.edh4.json | 5104 +++
storage/fixtures/vg_image_data.json | 210 +
storage/fixtures/vg_regions.json | 37586 ++++++++++++++++
...enEnded_mscoco_test-dev2015_questions.json | 44 +
...2_OpenEnded_mscoco_test2015_questions.json | 44 +
..._OpenEnded_mscoco_train2014_questions.json | 280 +
...v2_OpenEnded_mscoco_val2014_questions.json | 34 +
.../v2_mscoco_train2014_annotations.json | 1169 +
.../vqa_v2/v2_mscoco_val2014_annotations.json | 99 +
tests/__init__.py | 6 +
tests/commands/test_create_downstream_dbs.py | 125 +
tests/conftest.py | 30 +
tests/datamodels/test_coco_datamodels.py | 32 +
tests/datamodels/test_constants.py | 32 +
tests/datamodels/test_ego4d_datamodels.py | 61 +
tests/datamodels/test_nlvr_datamodels.py | 19 +
tests/datamodels/test_refcoco_datamodels.py | 60 +
tests/datamodels/test_simbot_datamodels.py | 40 +
tests/datamodels/test_teach_datamodels.py | 103 +
tests/datamodels/test_vqa_v2_datamodels.py | 50 +
tests/fixtures/__init__.py | 0
tests/fixtures/annotation_extrators.py | 175 +
tests/fixtures/dataset_aligners.py | 46 +
tests/fixtures/grouped_metadata.py | 66 +
tests/fixtures/instances_db.py | 59 +
tests/fixtures/metadata_parsers.py | 138 +
tests/fixtures/paths.py | 272 +
tests/test_annotation_extractors.py | 120 +
tests/test_dataset_aligner.py | 54 +
tests/test_downstream_db_creator.py | 97 +
tests/test_instance_creator.py | 62 +
tests/test_instances_db.py | 91 +
tests/test_metadata_parsers.py | 33 +
267 files changed, 332939 insertions(+)
create mode 100644 .editorconfig
create mode 100644 .flake8
create mode 100644 .github/PULL_REQUEST_TEMPLATE/new_downstream_dataset.md
create mode 100644 .github/labels.yml
create mode 100644 .github/workflows/continuous_integration.yml
create mode 100644 .github/workflows/pr-lint.yml
create mode 100644 .github/workflows/release.yml
create mode 100644 .github/workflows/tests.yml
create mode 100644 .gitignore
create mode 100644 .kodiak.toml
create mode 100644 .mypy.ini
create mode 100644 .pre-commit-config.yaml
create mode 100644 .releaserc.js
create mode 100644 .vscode/extensions.json
create mode 100644 .vscode/launch.json
create mode 100644 .vscode/recommended-settings.json
create mode 100644 CHANGELOG.md
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 docs/downloading-raw-data.md
create mode 100644 docs/how-to-add-a-new-downstream-dataset.md
create mode 100644 docs/how-to-add-a-new-pretraining-dataset.md
create mode 100644 docs/how-to-use-the-dataset-db.md
create mode 100644 logs/.gitkeep
create mode 100644 notebooks/.gitkeep
create mode 100644 poetry.lock
create mode 100644 pyproject.toml
create mode 100644 pytest.ini
create mode 100644 scripts/.gitkeep
create mode 100644 src/emma_datasets/__init__.py
create mode 100644 src/emma_datasets/__main__.py
create mode 100644 src/emma_datasets/_version.py
create mode 100644 src/emma_datasets/augmentations/__init__.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/__init__.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/action_creators.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/base_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/break_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/clean_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/clip_image_diversity.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/fill_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/goto_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/open_close_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/pickup_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/place_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/scan_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/search_augmentator.py
create mode 100644 src/emma_datasets/augmentations/simbot_augmentators/toggle_augmentator.py
create mode 100644 src/emma_datasets/commands/__init__.py
create mode 100644 src/emma_datasets/commands/create_downstream_dbs.py
create mode 100644 src/emma_datasets/commands/create_pretraining_instances.py
create mode 100644 src/emma_datasets/commands/create_simbot_augmentations_from_vision_data.py
create mode 100644 src/emma_datasets/commands/create_simbot_instructions_from_annotations.py
create mode 100644 src/emma_datasets/commands/create_simbot_trajectories_from_dynamo_db.py
create mode 100644 src/emma_datasets/commands/decode_highlevel_key_and_generate.py
create mode 100644 src/emma_datasets/commands/download_datasets.py
create mode 100644 src/emma_datasets/commands/extract_annotations.py
create mode 100644 src/emma_datasets/commands/organise_all_datasets.py
create mode 100644 src/emma_datasets/common/__init__.py
create mode 100644 src/emma_datasets/common/downloader.py
create mode 100644 src/emma_datasets/common/helpers/__init__.py
create mode 100644 src/emma_datasets/common/helpers/object_manipulation.py
create mode 100644 src/emma_datasets/common/logger.py
create mode 100644 src/emma_datasets/common/progress.py
create mode 100644 src/emma_datasets/common/settings.py
create mode 100644 src/emma_datasets/constants/__init__.py
create mode 100644 src/emma_datasets/constants/dataset_downloads.csv
create mode 100644 src/emma_datasets/constants/simbot/ObjectManifest.json
create mode 100644 src/emma_datasets/constants/simbot/arena_definitions.json
create mode 100644 src/emma_datasets/constants/simbot/asset_synonyms.json
create mode 100644 src/emma_datasets/constants/simbot/asset_synonyms_emnlp.json
create mode 100644 src/emma_datasets/constants/simbot/augmentations.json
create mode 100644 src/emma_datasets/constants/simbot/augmentations_emnlp_train.json
create mode 100644 src/emma_datasets/constants/simbot/augmentations_emnlp_valid.json
create mode 100644 src/emma_datasets/constants/simbot/augmentations_full_train.json
create mode 100644 src/emma_datasets/constants/simbot/augmentations_full_valid.json
create mode 100644 src/emma_datasets/constants/simbot/class_thresholds2.json
create mode 100644 src/emma_datasets/constants/simbot/high_level_templates.py
create mode 100644 src/emma_datasets/constants/simbot/low_level_actions_templates.json
create mode 100644 src/emma_datasets/constants/simbot/object_id_to_class2.json
create mode 100644 src/emma_datasets/constants/simbot/simbot.py
create mode 100644 src/emma_datasets/constants/teach/action_idx_to_action_name.json
create mode 100644 src/emma_datasets/constants/teach/action_to_action_idx.json
create mode 100644 src/emma_datasets/constants/teach/default_definitions.json
create mode 100644 src/emma_datasets/constants/vqa_v2_ans2label.json
create mode 100644 src/emma_datasets/datamodels/__init__.py
create mode 100644 src/emma_datasets/datamodels/annotations.py
create mode 100644 src/emma_datasets/datamodels/base_model.py
create mode 100644 src/emma_datasets/datamodels/common.py
create mode 100644 src/emma_datasets/datamodels/constants.py
create mode 100644 src/emma_datasets/datamodels/dataset_metadata.py
create mode 100644 src/emma_datasets/datamodels/datasets/__init__.py
create mode 100644 src/emma_datasets/datamodels/datasets/alfred.py
create mode 100644 src/emma_datasets/datamodels/datasets/coco.py
create mode 100644 src/emma_datasets/datamodels/datasets/conceptual_captions.py
create mode 100644 src/emma_datasets/datamodels/datasets/ego4d.py
create mode 100644 src/emma_datasets/datamodels/datasets/epic_kitchens.py
create mode 100644 src/emma_datasets/datamodels/datasets/gqa.py
create mode 100644 src/emma_datasets/datamodels/datasets/nlvr.py
create mode 100644 src/emma_datasets/datamodels/datasets/refcoco.py
create mode 100644 src/emma_datasets/datamodels/datasets/simbot.py
create mode 100644 src/emma_datasets/datamodels/datasets/teach.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/__init__.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/ambiguous_data.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/data_augmentations.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/high_level_key_processor.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/instruction_processing.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/masks.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/object_features_processing.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/paraphrasers.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/preprocessing.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/simbot_utils/simbot_datamodels.py
create mode 100644 src/emma_datasets/datamodels/datasets/utils/vqa_v2_utils.py
create mode 100644 src/emma_datasets/datamodels/datasets/visual_genome.py
create mode 100644 src/emma_datasets/datamodels/datasets/vqa_v2.py
create mode 100644 src/emma_datasets/datamodels/datasets/winoground.py
create mode 100644 src/emma_datasets/datamodels/generics.py
create mode 100644 src/emma_datasets/datamodels/instance.py
create mode 100644 src/emma_datasets/db/__init__.py
create mode 100644 src/emma_datasets/db/dataset_db.py
create mode 100644 src/emma_datasets/db/storage.py
create mode 100644 src/emma_datasets/io/__init__.py
create mode 100644 src/emma_datasets/io/archive.py
create mode 100644 src/emma_datasets/io/csv.py
create mode 100644 src/emma_datasets/io/json.py
create mode 100644 src/emma_datasets/io/parquet.py
create mode 100644 src/emma_datasets/io/paths.py
create mode 100644 src/emma_datasets/io/txt.py
create mode 100644 src/emma_datasets/parsers/__init__.py
create mode 100644 src/emma_datasets/parsers/align_multiple_datasets.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/__init__.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/alfred_captions.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/alfred_task_descriptions.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/alfred_trajectories.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/annotation_extractor.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/coco_caption.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/conceptual_captions.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/epic_kitchens_captions.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/gqa_qa_pairs.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/gqa_scene_graphs.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/vg_regions.py
create mode 100644 src/emma_datasets/parsers/annotation_extractors/vqa_v2_qa_pairs.py
create mode 100644 src/emma_datasets/parsers/dataset_aligner.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/__init__.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/alfred.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/coco.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/conceptual_captions.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/epic_kitchens.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/gqa.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/metadata_parser.py
create mode 100644 src/emma_datasets/parsers/dataset_metadata/vg.py
create mode 100644 src/emma_datasets/parsers/instance_creators/__init__.py
create mode 100644 src/emma_datasets/parsers/instance_creators/downstream.py
create mode 100644 src/emma_datasets/parsers/instance_creators/generic.py
create mode 100644 src/emma_datasets/parsers/instance_creators/pretrain.py
create mode 100644 src/emma_datasets/pipeline/__init__.py
create mode 100644 src/emma_datasets/pipeline/downstream_db_creator.py
create mode 100644 src/emma_datasets/pipeline/metadata_parser.py
create mode 100644 storage/.gitkeep
create mode 100644 storage/fixtures/EPIC_100_video_info.csv
create mode 100644 storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014040_145528/traj_data.json
create mode 100644 storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014123_556566/traj_data.json
create mode 100644 storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074653_538268/traj_data.json
create mode 100644 storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074805_916625/traj_data.json
create mode 100644 storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200307_446636/traj_data.json
create mode 100644 storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200415_535998/traj_data.json
create mode 100644 storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-ToiletPaper-None-Toilet-408/trial_T20190909_080302_174780/traj_data.json
create mode 100644 storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Vase-None-Desk-204/trial_T20190906_181531_703961/traj_data.json
create mode 100644 storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Watch-None-Dresser-205/trial_T20190907_182211_592010/traj_data.json
create mode 100644 storage/fixtures/coco/coco_captions_tiny.json
create mode 100644 storage/fixtures/coco/coco_dev_image_ids_tiny.npy
create mode 100644 storage/fixtures/coco/coco_restval_image_ids_tiny.npy
create mode 100644 storage/fixtures/coco/coco_test_image_ids_tiny.npy
create mode 100644 storage/fixtures/coco/coco_train_image_ids_tiny.npy
create mode 100644 storage/fixtures/coco_captions_train.json
create mode 100644 storage/fixtures/coco_captions_valid.json
create mode 100644 storage/fixtures/db/instances.db
create mode 100644 storage/fixtures/ego4d/moments_val.json
create mode 100644 storage/fixtures/ego4d/nlq_val.json
create mode 100644 storage/fixtures/ego4d/vq_val.json
create mode 100644 storage/fixtures/epic_kitchens.csv
create mode 100644 storage/fixtures/gqa_questions.json
create mode 100644 storage/fixtures/gqa_scene_graph.json
create mode 100644 storage/fixtures/nlvr.jsonl
create mode 100644 storage/fixtures/refcoco/instances.json
create mode 100644 storage/fixtures/refcoco/refs(umd).p
create mode 100644 storage/fixtures/simbot/simbot.json
create mode 100644 storage/fixtures/simbot/simbot_augmentation_images.json
create mode 100644 storage/fixtures/teach_edh/divided_test_seen.txt
create mode 100644 storage/fixtures/teach_edh/divided_test_unseen.txt
create mode 100644 storage/fixtures/teach_edh/divided_val_seen.txt
create mode 100644 storage/fixtures/teach_edh/divided_val_unseen.txt
create mode 100644 storage/fixtures/teach_edh/train/0a57fe74bb28dca3_c887.edh0.json
create mode 100644 storage/fixtures/teach_edh/train/0a733338db1ad019_b1cf.edh4.json
create mode 100644 storage/fixtures/teach_edh/train/0b2e762fcbe2b1ce_ac58.edh13.json
create mode 100644 storage/fixtures/teach_edh/train/0b8ded42ab9d39d1_8fef.edh3.json
create mode 100644 storage/fixtures/teach_edh/train/0bdf5b6f19e8f7d8_b836.edh0.json
create mode 100644 storage/fixtures/teach_edh/train/0e137379e033a29e_5b37.edh0.json
create mode 100644 storage/fixtures/teach_edh/train/0f15eb3a8cc916d1_8c57.edh1.json
create mode 100644 storage/fixtures/teach_edh/train/1a48f0dbfcef62b0_e86a.edh1.json
create mode 100644 storage/fixtures/teach_edh/train/1ad6faa0ffe15318_36af.edh1.json
create mode 100644 storage/fixtures/teach_edh/train/1c70e34df85e61c8_6282.edh1.json
create mode 100644 storage/fixtures/teach_edh/train/1e31c0c98ac6bad3_0dec.edh3.json
create mode 100644 storage/fixtures/teach_edh/train/1e647508c2aa4edd_2745.edh1.json
create mode 100644 storage/fixtures/teach_edh/train/1f8c330151185aab_20a0.edh1.json
create mode 100644 storage/fixtures/teach_edh/train/2e0921fb56f5d875_a9e0.edh8.json
create mode 100644 storage/fixtures/teach_edh/train/2ede20d029522a7c_0781.edh2.json
create mode 100644 storage/fixtures/teach_edh/train/4de84f3acfac78cf_c9bf.edh17.json
create mode 100644 storage/fixtures/teach_edh/train/4e751ee7c37c15bf_81d0.edh0.json
create mode 100644 storage/fixtures/teach_edh/train/4f9bbffda18a2ac1_06cf.edh3.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/0ad40b7b0e0cc45d_3a73.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/1c2df1e8ff105c52_6ac7.edh12.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/1f87012fd210e31b_2bed.edh0.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/1f87012fd210e31b_2bed.edh7.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/3a45b72592fe5714_365c.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/3b305710ae4ff2c1_d082.edh4.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/3f117593619d88bd_94db.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/4ba5604e5d3a4ecb_7550.edh5.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/6bc2c5375cc2f60f_e616.edh6.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/738a96bcdfe603a1_dcb1.edh16.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/738a96bcdfe603a1_dcb1.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/7f5bf828ea7530fc_dc63.edh0.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/7f8000bdc9a6df46_e4c4.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/8cff3a0ff48c0980_9f15.edh8.json
create mode 100644 storage/fixtures/teach_edh/valid_seen/8f059a8aa3b90765_1100.edh3.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0ad91909295bf186_134b.edh0.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0b161c6f709cde89_4c30.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0b42b1e6a5ad92ee_8867.edh5.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0d1a67f82b3b5854_d74d.edh3.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0d49a886a3c99bab_4ed0.edh1.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0d49a886a3c99bab_4ed0.edh5.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0d600126a7947365_cac4.edh4.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/0fc859faf40296d7_c87e.edh6.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/1a8b00c643110183_ebc6.edh2.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/1e8fb21f2b41b0b0_bc36.edh1.json
create mode 100644 storage/fixtures/teach_edh/valid_unseen/1e8fb21f2b41b0b0_db8b.edh4.json
create mode 100644 storage/fixtures/vg_image_data.json
create mode 100644 storage/fixtures/vg_regions.json
create mode 100644 storage/fixtures/vqa_v2/v2_OpenEnded_mscoco_test-dev2015_questions.json
create mode 100644 storage/fixtures/vqa_v2/v2_OpenEnded_mscoco_test2015_questions.json
create mode 100644 storage/fixtures/vqa_v2/v2_OpenEnded_mscoco_train2014_questions.json
create mode 100644 storage/fixtures/vqa_v2/v2_OpenEnded_mscoco_val2014_questions.json
create mode 100644 storage/fixtures/vqa_v2/v2_mscoco_train2014_annotations.json
create mode 100644 storage/fixtures/vqa_v2/v2_mscoco_val2014_annotations.json
create mode 100644 tests/__init__.py
create mode 100644 tests/commands/test_create_downstream_dbs.py
create mode 100644 tests/conftest.py
create mode 100644 tests/datamodels/test_coco_datamodels.py
create mode 100644 tests/datamodels/test_constants.py
create mode 100644 tests/datamodels/test_ego4d_datamodels.py
create mode 100644 tests/datamodels/test_nlvr_datamodels.py
create mode 100644 tests/datamodels/test_refcoco_datamodels.py
create mode 100644 tests/datamodels/test_simbot_datamodels.py
create mode 100644 tests/datamodels/test_teach_datamodels.py
create mode 100644 tests/datamodels/test_vqa_v2_datamodels.py
create mode 100644 tests/fixtures/__init__.py
create mode 100644 tests/fixtures/annotation_extrators.py
create mode 100644 tests/fixtures/dataset_aligners.py
create mode 100644 tests/fixtures/grouped_metadata.py
create mode 100644 tests/fixtures/instances_db.py
create mode 100644 tests/fixtures/metadata_parsers.py
create mode 100644 tests/fixtures/paths.py
create mode 100644 tests/test_annotation_extractors.py
create mode 100644 tests/test_dataset_aligner.py
create mode 100644 tests/test_downstream_db_creator.py
create mode 100644 tests/test_instance_creator.py
create mode 100644 tests/test_instances_db.py
create mode 100644 tests/test_metadata_parsers.py
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..d376de2
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+charset = utf-8
+indent_style = tab
+indent_size = 2
+
+# YAML doesn't support hard tabs
+# Templates that will be weird with hard tabs in the website editor
+[*.{yml,yaml,md}]
+indent_style = space
+indent_size = 2
+
+# Force python as python demands
+[*.{py,ipynb}]
+indent_size = 4
+indent_style = space
diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000..b5c14ed
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,121 @@
+[flake8]
+extend-ignore =
+ # Allow function call as argument default
+ B008,
+ # Do not enforce trailing comma (lets Black decide what is best)
+ C812,C813,C814,C815,C816,C818,C819,
+ # Don't ask for docstring at top of module --- put it in the functions/classes
+ D100,
+ # Do not check for docstring within __init__ method
+ D107,
+ # Ignore whitespace before ';'
+ E203,
+ # Don't ask about line length, Black recommends using bugbear B950 instead
+ E501,
+ # Stop finding commented out code because it's mistaking shape annotations for code
+ E800,
+ # Just let the formatter complain about isort
+ I,
+ # Stop complaining about using functions from random
+ S311,
+ # Ignore errors for internal mypy traceback, stderr output, or an unmatched line.
+ T499,
+ # Do not complain about line-break before binary operator (caused by Black)
+ W503,
+ # Do not warn on too many imports.
+ WPS201,
+ # Do not warn on too many module members
+ WPS202,
+ # Do not warn when too many arguments in functions
+ WPS211,
+ # Do not warn on too many methods
+ WPS214,
+ # Allow lots of importing from the same module --- it can happen and thats okay!
+ WPS235,
+ # Do not warn on complex f-string
+ WPS237,
+ # Allow relative module references
+ WPS300,
+ # Allow f-strings
+ WPS305,
+ # Do not force base classes to inherit object
+ WPS306,
+ # Allow return statement that simply returns a prior statement
+ WPS331,
+ # Allow new lines to start with a dot (caused by Black)
+ WPS348,
+ # Allow logic in __init__ modules
+ WPS412,
+ # Google Python style is not RST until after processed by Napoleon
+ # See https://github.com/peterjc/flake8-rst-docstrings/issues/17
+ RST201,RST203,RST301,
+extend-select =
+ # Should raise AssertionError instead of assert False
+ B011,
+ # Use of break, continue or return in finally blocks will silence exceptions.
+ B012,
+ # Redundant exception types in except
+ B014,
+ # Pointless comparisons
+ B015,
+ # Cannot raise a literal
+ B016,
+ # Do not use `self.assertRaises(Exception)`
+ B017,
+ # Find useless expressions
+ B018,
+ # Use namedtuple instead of dataclass when only `__init__` attributes are set
+ B903,
+ # Within an except clause, raise exceptions with `raise ... from err` or `raise ...
+ # from None` to distinguish them from errors in exception handling
+ B904,
+ # Counterpart to W503, enforce having the operator at the start of a new line.
+ W504,
+
+max-line-length = 99
+max-complexity = 18
+max-methods = 10
+max-line-complexity = 18
+max-local-variables = 20
+max-expressions = 20
+max-function-expressions = 10
+max-module-expressions = 20
+max-string-usages = 10
+max-annotation-complexity = 4
+min-name-length = 1
+max-try-body-length = 2
+format = wemake
+
+# Black enforces double quotes.
+inline-quotes = double
+
+docstring-convention = google
+
+# Darglint
+docstring_style = google
+strictness = long
+
+nested-classes-whitelist =
+ Meta
+ Params
+ Config
+
+allowed-domain-names =
+ data
+ utils
+ util
+ params
+
+per-file-ignores =
+ src/*/_version.py:WPS410
+ src/**/__init__.py:D,F401,WPS436
+ tests/*:D,F401,WPS118,WPS202,WPS204,WPS214,WPS218,WPS226,WPS231,WPS232,WPS235,WPS301,WPS432,WPS437,WPS442,S101
+ scripts/update_torch_cuda.py:S404,S603,S607,WPS323,WPS333,WPS432,WPS433,WPS459
+
+extend-exclude=
+ .venv/,
+ *_cache/,
+ .cache/,
+ logs/,
+ storage/,
+ docs/
diff --git a/.github/PULL_REQUEST_TEMPLATE/new_downstream_dataset.md b/.github/PULL_REQUEST_TEMPLATE/new_downstream_dataset.md
new file mode 100644
index 0000000..8a2ad48
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/new_downstream_dataset.md
@@ -0,0 +1,35 @@
+
+
+## Description
+
+
+
+## Checklist
+
+- [ ] I have read the ["How to add a new downstream dataset" instructions](docs/how-to-add-a-new-downstream-dataset.md)
+- [ ] A subset of the raw data has been added for testing the new dataset
+- [ ] This PRs metadata is complete
+
+### Adding a new dataset
+
+- [ ] The dataset name has been added to the `DatasetName` enum
+- [ ] The value for the new option in `DatasetName` is formatted like the public dataset name
+- [ ] The dataset name has been added to the `DatasetModalityMap`
+- [ ] The dataset name has been included in the `AnnotationDatasetMap`
+
+### Creating the instance
+
+- [ ] A new instance exists for the dataset, and it inherits from `BaseInstance`
+- [ ] The new instance model for the dataset has tests (in `tests/datamodels/`)
+- [ ] The new instance has been included in `emma_datasets/datamodels/datasets/__init__.py`
+- [ ] The class name for the instance is in pascal case
+- [ ] The instance is well-documented to ensure others can easily know what is happening and why
+
+### Adding the dataset to the `downstream` command
+
+- [ ] There is a new command to process the downstream dataset
+- [ ] The name of the command is consistent with other commands
+- [ ] The function has a docstring for the help of the command
+- [ ] The function is listed as a command
+- [ ] There are tests for the new dataset with the `DownstreamDbCreator` (in `tests/test_downstream_db_creator.py`)
+- [ ] There are tests for the new command (in `tests/commands/test_create_downstream_dbs.py`)
diff --git a/.github/labels.yml b/.github/labels.yml
new file mode 100644
index 0000000..43c77b3
--- /dev/null
+++ b/.github/labels.yml
@@ -0,0 +1,90 @@
+---
+# Labels names are important as they are used by Release Drafter to decide
+# regarding where to record them in changelog or if to skip them.
+#
+# The repository labels will be automatically configured using this file and
+# the GitHub Action https://github.com/marketplace/actions/github-labeler.
+## more info https://github.com/crazy-max/ghaction-github-labeler
+
+# ------------------------- Conventional Commit types ------------------------ #
+# From https://github.com/commitizen/conventional-commit-types/blob/master/index.json
+
+- name: feature
+ description: A new enhancement or feature
+ color: 0A8844
+ from_name: "enhancement"
+
+- name: fix
+ description: A bug fix
+ color: d23832
+ from_name: "bug"
+
+- name: documentation
+ description: Documentation changes only
+ color: 8AD9F5
+
+- name: style
+ description: Changes that do not affect meaning of code (formatting, etc.)
+ color: F9CD8E
+
+- name: refactor
+ description: Code change that neither fixes a bug nor adds a feature
+ color: FBCA0C
+ from_name: refactoring
+
+- name: performance
+ description: Code change that improves performance
+ color: F2A33C
+
+- name: test
+ description: Adding missing tests or correcting existing tests
+ color: 34FFB3
+
+- name: build
+ description: Changes that affect the build system or external dependencies
+ color: 8F4FBB
+
+- name: continuous integration
+ description: Changes to CI configuration and scripts
+ color: FCBFE3
+
+- name: chore
+ description: Other changes that don't modify src or test files
+ color: d3d3d3
+
+- name: revert
+ description: Revert a previous commit
+ color: 1e1e1e
+
+- name: backwards incompatible
+ description: incompatible changes to how the application works
+ color: AB2232
+
+- name: question
+ description: Further information is requested
+ color: EE328E
+
+# ------------------------------- Dependencies ------------------------------- #
+- name: dependencies
+ description: Pull requests that update dependencies
+ color: 0366d6
+
+# ------------------------------ Utility labels ------------------------------ #
+- name: automerge
+ color: "ffffff"
+ description: "Automerge this PR"
+
+- name: "stale"
+ color: "ffffff"
+ description: ""
+# - name: duplicate
+# description: This issue or pull request already exists
+# color: ffffff
+
+# - name: invalid
+# description: This doesn't seem right
+# color: ffffff
+
+# - name: wontfix
+# description: This will not be worked on
+# color: ffffff
diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml
new file mode 100644
index 0000000..67bd6ff
--- /dev/null
+++ b/.github/workflows/continuous_integration.yml
@@ -0,0 +1,169 @@
+name: Continuous Integration
+
+on:
+ workflow_dispatch:
+ workflow_call:
+ pull_request:
+ types: [opened, reopened, synchronize, ready_for_review]
+ branches: [main]
+
+env:
+ PYTHON_VERSION: 3.9
+
+jobs:
+ changes:
+ name: Check for Python file changes
+ runs-on: ubuntu-latest
+ if: ${{ !github.event.pull_request.draft }}
+ outputs:
+ python: ${{steps.filter.outputs.python}}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - uses: dorny/paths-filter@v2
+ id: filter
+ with:
+ filters: |
+ python:
+ - '**/*.py'
+ - 'pyproject.toml'
+ - 'poetry.lock'
+ - '.github/workflows/continuous_integration.yml'
+ - '.mypy.ini'
+ - '.flake8'
+
+ typecheck:
+ name: Type check Python
+ needs: [changes]
+ if: ${{needs.changes.outputs.python == 'true' && !github.event.pull_request.draft }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v4
+
+ - name: Setup reviewdog
+ uses: reviewdog/action-setup@v1
+
+ - name: Install Poetry
+ run: pipx install poetry
+
+ - name: Set up Python ${{ env.PYTHON_VERSION }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ cache: "poetry"
+
+ - name: Install dependencies
+ run: poetry install
+
+ - name: Load mypy cache
+ uses: actions/cache@v3
+ id: mypy-cache
+ with:
+ path: .mypy_cache
+ key: ${{ runner.os }}-mypy-cache-${{ hashFiles('poetry.lock') }}-${{hashFiles('pyproject.toml') }}
+ restore-keys: |
+ ${{ runner.os }}-mypy-cache-${{ hashFiles('poetry.lock') }}-${{hashFiles('pyproject.toml') }}
+ ${{ runner.os }}-mypy-cache-
+
+ - name: Run mypy with reviewdog
+ env:
+ REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_EVENT_NAME: ${{ github.event_name }}
+ run: |
+ exit_val="0"
+ [[ $GITHUB_EVENT_NAME == "pull_request" ]] && reporter="github-pr-review" || reporter="github-check"
+ poetry run mypy \
+ --show-column-numbers \
+ --show-absolute-path \
+ --no-error-summary . 2>&1 | reviewdog \
+ -efm="%f:%l:%c: %t%*[^:]: %m" \
+ -name="mypy" \
+ -filter-mode=nofilter \
+ -fail-on-error \
+ -reporter="${reporter}" || exit_val="$?"
+ if [[ "${exit_val}" -ne '0' ]]; then
+ exit 1
+ fi
+
+ lint:
+ name: Lint Python
+ needs: [changes]
+ if: ${{needs.changes.outputs.python == 'true' && !github.event.pull_request.draft }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Setup reviewdog
+ uses: reviewdog/action-setup@v1
+
+ - name: Install Poetry
+ run: pipx install poetry
+
+ - name: Set up Python ${{ env.PYTHON_VERSION }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ cache: "poetry"
+
+ - name: Install dependencies
+ run: poetry install
+
+ - name: Run flake8
+ env:
+ REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_EVENT_NAME: ${{ github.event_name }}
+ run: |
+ exit_val="0"
+ [[ $GITHUB_EVENT_NAME == "pull_request" ]] && reporter="github-pr-review" || reporter="github-check"
+ poetry run flake8 \
+ --format=default . 2>&1 | reviewdog \
+ -f=pep8 \
+ -name="flake8" \
+ -fail-on-error \
+ -filter-mode=file \
+ -reporter="${reporter}" || exit_val="$?"
+ if [[ "${exit_val}" -ne '0' ]]; then
+ exit 1
+ fi
+
+ format:
+ name: Format
+ runs-on: ubuntu-latest
+ if: ${{ !github.event.pull_request.draft }}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python ${{ env.PYTHON_VERSION }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ cache: "pip"
+
+ - name: Install pre-commit
+ run: |
+ pip install pre-commit
+
+ - name: Load cached pre-commit environment
+ uses: actions/cache@v3
+ id: pre-commit-cache
+ with:
+ path: ~/.cache/pre-commit
+ key: ${{ runner.os }}-pre-commit-${{ hashFiles('**/.pre-commit-config.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pre-commit-
+
+ - name: Run pre-commit hook
+ id: run-pre-commit-hooks
+ run: |
+ git add .pre-commit-config.yaml
+ pre-commit run --color=always --all-files
+
+ - name: Annotate any changes using reviewdog
+ if: ${{ failure() }}
+ id: reviewdog-suggester
+ uses: reviewdog/action-suggester@v1
+ with:
+ tool_name: pre-commit
diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml
new file mode 100644
index 0000000..2c917a9
--- /dev/null
+++ b/.github/workflows/pr-lint.yml
@@ -0,0 +1,42 @@
+name: "Lint PR"
+
+on:
+ pull_request_target:
+ types:
+ - opened
+ - edited
+ - synchronize
+
+jobs:
+ main:
+ name: Validate PR title
+ runs-on: ubuntu-latest
+ steps:
+ - name: Validate PR title
+ uses: amannn/action-semantic-pull-request@v5
+ id: lint_pr_title
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ # When the previous steps fails, the workflow would stop. By adding this
+ # condition you can continue the execution with the populated error message.
+ - name: Create error message if validation fails
+ uses: marocchino/sticky-pull-request-comment@v2
+ if: always() && (steps.lint_pr_title.outputs.error_message != null)
+ with:
+ header: pr-title-lint-error
+ message: |
+ Hey there and thank you for opening this pull request! 👋🏼
+ We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted.
+
+ Details:
+ ```
+ ${{ steps.lint_pr_title.outputs.error_message }}
+ ```
+
+ - name: Delete previous comment when issue is resolved
+ if: ${{ steps.lint_pr_title.outputs.error_message == null }}
+ uses: marocchino/sticky-pull-request-comment@v2
+ with:
+ header: pr-title-lint-error
+ delete: true
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..461c709
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,29 @@
+name: Releases
+
+on:
+ push:
+ branches: [main]
+
+env:
+ PYTHON_VERSION: 3.9
+
+jobs:
+ labeler:
+ name: Update labels
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out the repository
+ uses: actions/checkout@v4
+
+ - name: Run Labeler
+ uses: crazy-max/ghaction-github-labeler@v4.1.0
+
+ continuous-integration:
+ name: Continuous Integration
+ uses: "./.github/workflows/continuous_integration.yml"
+ secrets: inherit
+
+ tests:
+ name: Tests
+ uses: "./.github/workflows/tests.yml"
+ secrets: inherit
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000..76d5b5b
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,73 @@
+name: Tests
+
+on:
+ workflow_dispatch:
+ workflow_call:
+ pull_request:
+ branches: [main]
+ paths-ignore: ["**/*.md", "**/*.rst"]
+
+env:
+ PYTHON_VERSION: 3.9
+ # Disable tokenizers parallelism because this doesn't help, and can cause issues in distributed tests.
+ TOKENIZERS_PARALLELISM: "false"
+ # Disable multithreading with OMP because this can lead to dead-locks in distributed tests.
+ OMP_NUM_THREADS: "1"
+ # See https://github.com/pytorch/pytorch/issues/37377#issuecomment-677851112.
+ MKL_THREADING_LAYER: "GNU"
+
+jobs:
+ changes:
+ name: Check for Python file changes
+ runs-on: ubuntu-latest
+ if: ${{ !github.event.pull_request.draft }}
+ outputs:
+ python: ${{steps.filter.outputs.python}}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - uses: dorny/paths-filter@v2
+ id: filter
+ with:
+ filters: |
+ python:
+ - '**/*.py'
+ - 'storage/fixtures/**/*'
+ - 'pyproject.toml'
+ - 'poetry.lock'
+ - '.github/workflows/tests.yml'
+
+ python:
+ name: Run Python test suite
+ defaults:
+ run:
+ shell: bash
+
+ runs-on: ubuntu-latest
+ needs: [changes]
+ if: ${{needs.changes.outputs.python == 'true' && !github.event.pull_request.draft }}
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v4
+
+ - name: Install Poetry
+ run: pipx install poetry
+
+ - name: Set up Python ${{ env.PYTHON_VERSION }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ cache: "poetry"
+
+ - name: Install dependencies
+ run: poetry install
+
+ - name: Run test suite
+ run: poetry run poe test-everything | tee pytest-coverage.txt
+
+ - name: Comment the coverage
+ if: ${{ always() && github.event_name == 'pull_request' && github.actor != 'dependabot[bot]' }}
+ uses: MishaKav/pytest-coverage-comment@main
+ with:
+ pytest-coverage-path: ./pytest-coverage.txt
+ junitxml-path: ./pytest.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..87e11df
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,362 @@
+# Created by https://www.toptal.com/developers/gitignore/api/vscode,python,intellij+all
+# Edit at https://www.toptal.com/developers/gitignore?templates=vscode,python,intellij+all
+
+.rtx.toml
+
+### Intellij+all ###
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+slurm-*
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+.idea/artifacts
+.idea/compiler.xml
+.idea/jarRepositories.xml
+.idea/modules.xml
+.idea/*.iml
+.idea/modules
+*.iml
+*.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Intellij+all Patch ###
+# Ignores the whole .idea folder and all .iml files
+# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360
+
+.idea/
+
+# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
+
+*.iml
+modules.xml
+.idea/misc.xml
+*.ipr
+
+# Sonarlint plugin
+.idea/sonarlint
+
+### Python ###
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+parts/
+sdist/
+var/
+wheels/
+pip-wheel-metadata/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+pytestdebug.log
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+doc/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+.python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.env/
+.venv/
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+pythonenv*
+.autoenv
+.envrc
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# operating system-related files
+# file properties cache/storage on macOS
+*.DS_Store
+# thumbnail cache on Windows
+Thumbs.db
+
+# profiling data
+.prof
+
+### vscode ###
+.vscode/*
+!.vscode/recommended-settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+*.code-workspace
+
+# Lightning-Hydra-Template
+logs/
+
+# End of https://www.toptal.com/developers/gitignore/api/vscode,python,intellij+all
+
+# Created by https://www.toptal.com/developers/gitignore/api/data,images,video
+# Edit at https://www.toptal.com/developers/gitignore?templates=data,images,video
+
+### Data ###
+# *.csv
+*.dat
+*.efx
+*.gbr
+*.key
+*.pps
+*.ppt
+*.pptx
+*.sdf
+*.tax2010
+*.vcf
+*.xml
+
+### Images ###
+# JPEG
+*.jpg
+*.jpeg
+*.jpe
+*.jif
+*.jfif
+*.jfi
+
+# JPEG 2000
+*.jp2
+*.j2k
+*.jpf
+*.jpx
+*.jpm
+*.mj2
+
+# JPEG XR
+*.jxr
+*.hdp
+*.wdp
+
+# Graphics Interchange Format
+*.gif
+
+# RAW
+*.raw
+
+# Web P
+*.webp
+
+# Portable Network Graphics
+*.png
+
+# Animated Portable Network Graphics
+*.apng
+
+# Multiple-image Network Graphics
+*.mng
+
+# Tagged Image File Format
+*.tiff
+*.tif
+
+# Scalable Vector Graphics
+*.svg
+*.svgz
+
+# Portable Document Format
+*.pdf
+
+# X BitMap
+*.xbm
+
+# BMP
+*.bmp
+*.dib
+
+# ICO
+*.ico
+
+# 3D Images
+*.3dm
+*.max
+
+### Video ###
+*.3g2
+*.3gp
+*.asf
+*.asx
+*.avi
+*.flv
+*.mkv
+*.mov
+*.mp4
+*.mpg
+*.ogv
+*.rm
+*.swf
+*.vob
+*.wmv
+*.webm
+
+# Ignoring storage folder
+storage/*
+!storage/fixtures/
+!storage/constants/
+
+# End of https://www.toptal.com/developers/gitignore/api/data,images,video
diff --git a/.kodiak.toml b/.kodiak.toml
new file mode 100644
index 0000000..de128d4
--- /dev/null
+++ b/.kodiak.toml
@@ -0,0 +1,15 @@
+version = 1
+
+[merge.automerge_dependencies]
+# only auto merge "minor" and "patch" version upgrades.
+# do not automerge "major" version upgrades.
+versions = ["minor", "patch"]
+usernames = ["dependabot"]
+
+# allow dependabot to update and close stale dependency upgrades.
+[update]
+ignored_usernames = ["dependabot"]
+
+# Automatically approve when using automerge label
+[approve]
+auto_approve_usernames = ["dependabot"]
diff --git a/.mypy.ini b/.mypy.ini
new file mode 100644
index 0000000..c7f4e19
--- /dev/null
+++ b/.mypy.ini
@@ -0,0 +1,39 @@
+[mypy]
+
+python_version = 3.9
+exclude = (?x)(configs | storage | logs | docs)
+
+# Import discovery
+ignore_missing_imports = true
+
+# Untyped definitions and calls
+disallow_untyped_defs = true
+disallow_incomplete_defs = true
+check_untyped_defs = true
+disallow_any_generics = true
+disallow_subclassing_any = true
+disallow_untyped_decorators = false
+
+# None and Optional handling
+no_implicit_optional = true
+
+# Warnings
+warn_redundant_casts = true
+warn_unused_ignores = true
+warn_unused_configs = true
+warn_unreachable = true
+
+# Config error messages
+show_error_context = false
+show_column_numbers = true
+show_error_codes = true
+pretty = false
+
+plugins = pydantic.mypy
+
+[mypy-tests.*]
+disallow_untyped_defs = false
+
+[pydantic-mypy]
+init_typed = true
+warn_untyped_fields = true
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..d345639
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,146 @@
+repos:
+ # -------------------------- Version control checks -------------------------- #
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.5.0
+ hooks:
+ - id: check-merge-conflict
+ name: Check for merge conflicts
+ - id: check-vcs-permalinks
+ name: Ensure links to VCS websites are permalinks
+ - id: detect-private-key
+ name: Detect private key
+ - id: check-case-conflict
+ name: Check issues with file name casing
+ - id: check-symlinks
+ name: Check for symlinks which point to nothing
+ - id: destroyed-symlinks
+ name: Check for destroyed symlinks
+
+ - repo: https://github.com/sirosen/check-jsonschema
+ rev: 0.27.2
+ hooks:
+ - id: check-github-workflows
+ name: Validate GitHub workflows
+ types: [yaml]
+
+ # ----------------------------- Check file issues ---------------------------- #
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.5.0
+ hooks:
+ - id: check-toml
+ name: Check TOML
+ types: [toml]
+ - id: check-yaml
+ name: Check YAML
+ args: [--allow-multiple-documents]
+ types: [yaml]
+ - id: end-of-file-fixer
+ name: Fix end of files
+ types: [text]
+ - id: trailing-whitespace
+ name: Trim trailing whitespace
+ args: [--markdown-linebreak-ext=md]
+ types: [text]
+ - id: mixed-line-ending
+ name: Check line endings
+ - id: fix-encoding-pragma
+ name: Remove any encoding pragma
+ args: [--remove]
+
+ # ------------------------------ Python checking ----------------------------- #
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.5.0
+ hooks:
+ - id: debug-statements
+ name: Check for debugger statements
+ types: [python]
+
+ - repo: https://github.com/pre-commit/pygrep-hooks
+ rev: v1.10.0
+ hooks:
+ - id: python-use-type-annotations
+ name: Using type annotations over comments
+ types: [python]
+ - id: python-check-blanket-noqa
+ name: Check for blanket `# noqa`
+ types: [python]
+ - id: python-check-blanket-type-ignore
+ name: "Check for blanket `# type: ignore`"
+ types: [python]
+ - id: python-no-log-warn
+ name: Check for deprecated `.warn()` method of python loggers
+ types: [python]
+
+ # ----------------------------- Automatic linters ---------------------------- #
+ - repo: https://github.com/asottile/pyupgrade
+ rev: v3.15.0
+ hooks:
+ - id: pyupgrade
+ name: Update syntax for newer Python
+ types: [python]
+ args: ["--py39-plus"]
+ - repo: https://github.com/sirosen/texthooks
+ rev: 0.6.3
+ hooks:
+ - id: fix-smartquotes
+ name: Fix Smart Quotes
+ - repo: https://github.com/asottile/yesqa
+ rev: v1.5.0
+ hooks:
+ - id: yesqa
+ name: Remove unnecessary `# noqa` comments
+ types: [python]
+ additional_dependencies: [wemake-python-styleguide]
+
+ # ------------------------------ Python imports ------------------------------ #
+ - repo: https://github.com/hakancelik96/unimport
+ rev: 1.1.0
+ hooks:
+ - id: unimport
+ name: Remove any unused imports
+ types: [python]
+ args:
+ [
+ --remove,
+ --exclude,
+ '^.*/?__init__\.py$',
+ --include-star-import,
+ --gitignore,
+ ]
+ - repo: https://github.com/MarcoGorelli/absolufy-imports
+ rev: v0.3.1
+ hooks:
+ - id: absolufy-imports
+ types: [python]
+ name: Convert relative imports to absolute
+ - repo: https://github.com/pycqa/isort
+ rev: 5.12.0
+ hooks:
+ - id: isort
+ name: Format imports
+ additional_dependencies: [toml]
+ types: [python]
+ exclude: ^.*/?setup\.py$
+ args: [--show-config]
+ verbose: true
+
+ # -------------------------------- Formatting -------------------------------- #
+ - repo: https://github.com/pre-commit/mirrors-prettier
+ rev: v3.1.0
+ hooks:
+ - id: prettier
+ name: Prettier
+ exclude: ^.*/?CHANGELOG\.md$
+ - repo: https://github.com/myint/docformatter
+ rev: v1.7.5
+ hooks:
+ - id: docformatter
+ name: Format docstrings
+ types: [python]
+ args: [--in-place, --wrap-summaries=99, --wrap-descriptions=99]
+ - repo: https://github.com/psf/black
+ rev: 23.11.0
+ hooks:
+ - id: black-jupyter
+ types: [python]
+ name: Format code
diff --git a/.releaserc.js b/.releaserc.js
new file mode 100644
index 0000000..2dc9cc2
--- /dev/null
+++ b/.releaserc.js
@@ -0,0 +1,70 @@
+const RELEASE_BRANCH = process.env.RELEASE_BRANCH || "main";
+const CHANGELOG_FILE = process.env.CHANGELOG_FILE || "CHANGELOG.md";
+const VERSION_FILE = process.env.VERSION_FILE || "src/*/_version.py";
+
+const config = {
+ branches: [RELEASE_BRANCH],
+ plugins: [
+ [
+ "@semantic-release/commit-analyzer",
+ {
+ preset: "conventionalcommits",
+ },
+ ],
+ [
+ "@semantic-release/release-notes-generator",
+ {
+ preset: "conventionalcommits",
+ },
+ ],
+ [
+ "@semantic-release/changelog",
+ {
+ changelogFile: CHANGELOG_FILE,
+ changelogTitle:
+ "# Changelog\n\nAll notable changes to this project will be documented in this file. See\n[Conventional Commits](https://conventionalcommits.org) for commit guidelines.",
+ },
+ ],
+ [
+ "@semantic-release/exec",
+ {
+ prepareCmd: "poetry version ${nextRelease.version}",
+ },
+ ],
+ [
+ "@google/semantic-release-replace-plugin",
+ {
+ replacements: [
+ {
+ files: [VERSION_FILE],
+ ignore: ["test/*", "tests/*"],
+ from: "__version__ = [\"'].*[\"']",
+ to: '__version__ = "${nextRelease.version}"',
+ },
+ ],
+ },
+ ],
+ [
+ "@semantic-release/github",
+ {
+ assets: [
+ { path: "dist/*.tar.gz", label: "sdist" },
+ { path: "dist/*.whl", label: "wheel" },
+ ],
+ successComment: false,
+ failComment: false,
+ releasedLabels: false,
+ failTitle: false,
+ labels: false,
+ },
+ ],
+ [
+ "@semantic-release/git",
+ {
+ assets: ["pyproject.toml", VERSION_FILE, CHANGELOG_FILE],
+ },
+ ],
+ ],
+};
+
+module.exports = config;
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..978576d
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,28 @@
+{
+ "recommendations": [
+ "mikestead.dotenv",
+ "editorconfig.editorconfig",
+ "tamasfe.even-better-toml",
+ "redvanworkshop.explorer-exclude-vscode-extension",
+ "eamodio.gitlens",
+ "nhoizey.gremlins",
+ "ms-toolsai.jupyter",
+ "ms-toolsai.jupyter-keymap",
+ "ms-toolsai.jupyter-renderers",
+ "yzhang.markdown-all-in-one",
+ "christian-kohler.path-intellisense",
+ "ms-python.vscode-pylance",
+ "ms-python.python",
+ "njpwerner.autodocstring",
+ "ms-vscode-remote.remote-containers",
+ "ms-vscode-remote.remote-ssh",
+ "ms-vscode-remote.remote-ssh-edit",
+ "ms-vscode-remote.vscode-remote-extensionpack",
+ "stkb.rewrap",
+ "visualstudioexptteam.vscodeintellicode",
+ "kevinkyang.auto-comment-blocks",
+ "redhat.vscode-yaml",
+ "esbenp.prettier-vscode",
+ "foxundermoon.shell-format"
+ ]
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..ecc4587
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,36 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Current file",
+ "type": "python",
+ "request": "launch",
+ "program": "${file}",
+ "console": "integratedTerminal",
+ "justMyCode": false,
+ "subProcess": true
+ },
+ {
+ "name": "Debug Run",
+ "type": "python",
+ "request": "launch",
+ "program": "${workspaceFolder}/run.py",
+ "console": "integratedTerminal",
+ "justMyCode": false,
+ "subProcess": true
+ },
+ {
+ "name": "Debug Tests",
+ "type": "python",
+ "request": "launch",
+ "justMyCode": false,
+ "purpose": ["debug-test"],
+ "env": {
+ "_PYTEST_RAISE": "1"
+ }
+ }
+ ]
+}
diff --git a/.vscode/recommended-settings.json b/.vscode/recommended-settings.json
new file mode 100644
index 0000000..4a43f74
--- /dev/null
+++ b/.vscode/recommended-settings.json
@@ -0,0 +1,81 @@
+{
+ "files.exclude": {
+ "**/.git": true,
+ "**/.svn": true,
+ "**/.hg": true,
+ "**/CVS": true,
+ "**/.DS_Store": true,
+ "**/Thumbs.db": true,
+ "**/.idea": true,
+ "**/LICENSE": true,
+ "**/.rsync-filter": true,
+ "**/.coverage*": true,
+ "**/.hypothesis": true,
+ "**/{*.egg-info,*cache*,.venv,*.lock}": true,
+ "**/{.python-version,py.typed}": true,
+ "**/.gitkeep": true,
+ "**/.gitignore": true,
+ "**/.gitattributes": true,
+ ".editorconfig": true,
+ ".pre-commit-config.yaml": true,
+ ".flake8": true,
+ ".dockerignore": true,
+ "Dockerfile": true,
+ "docker-compose.yaml": true,
+ "docker/": true,
+ "Makefile": true,
+ "pyproject.toml": true,
+ ".env*": true,
+ ".github/": true,
+ "*.md": true,
+ ".vscode/": false,
+ "logs/": true,
+ "data": true,
+ "notebooks": true,
+ "scripts": true
+ },
+ "explorerExclude.backup": null,
+ "editor.wordWrapColumn": 99,
+ "editor.rulers": [99],
+ "python.envFile": "${workspaceFolder}/.env",
+ "terminal.integrated.env.linux": {
+ "PYTHONPATH": "${workspaceFolder}"
+ },
+ "git.ignoreLimitWarning": true,
+ "[json,yaml]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "editor.formatOnSave": true
+ },
+ "[python]": {
+ "editor.defaultFormatter": "ms-python.python",
+ "editor.formatOnPaste": false,
+ "editor.formatOnSave": true,
+ "editor.codeActionsOnSave": {
+ "source.organizeImports": true,
+ "source.fixAll": true
+ }
+ },
+ "python.formatting.provider": "black",
+ "python.sortImports.args": ["--atomic"],
+ "python.linting.enabled": true,
+ "python.linting.lintOnSave": true,
+ "python.linting.pylintEnabled": false,
+ "python.linting.mypyEnabled": true,
+ "python.linting.flake8Enabled": true,
+ "python.linting.pydocstyleEnabled": false,
+ "python.testing.pytestEnabled": true,
+ "python.linting.mypyArgs": ["--show-column-numbers", "--show-error-codes"],
+ "jupyter.jupyterServerType": "local",
+ "jupyter.notebookFileRoot": "${workspaceFolder}",
+ "python.pythonPath": ".venv/bin/python3",
+ "python.testing.unittestEnabled": false,
+ "shellformat.useEditorConfig": true,
+ "python.testing.cwd": "${workspaceFolder}",
+ "cSpell.enabled": true,
+ "rewrap.autoWrap.enabled": true,
+ "editor.insertSpaces": false,
+ "autoDocstring.docstringFormat": "google",
+ "python.testing.pytestArgs": ["tests", "-x"],
+ "editor.bracketPairColorization.enabled": true,
+ "editor.guides.bracketPairs": "active"
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..bdf2955
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,384 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See
+[Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## [1.35.0](https://github.com/emma-simbot/datasets/compare/v1.34.5...v1.35.0) (2023-05-22)
+
+
+### Features
+
+* paper-customised augmentations ([#681](https://github.com/emma-simbot/datasets/issues/681)) ([f7eb951](https://github.com/emma-simbot/datasets/commit/f7eb9511e7398b24c2f4e6513f60b3d181df32fd))
+
+## [1.34.5](https://github.com/emma-simbot/datasets/compare/v1.34.4...v1.34.5) (2023-04-26)
+
+
+### Bug Fixes
+
+* Cereal was not an inventory for pour ([#670](https://github.com/emma-simbot/datasets/issues/670)) ([1e3df25](https://github.com/emma-simbot/datasets/commit/1e3df25f2b1e3c85c44bf732aa65d62912888ef3))
+
+## [1.34.4](https://github.com/emma-simbot/datasets/compare/v1.34.3...v1.34.4) (2023-04-25)
+
+
+### Bug Fixes
+
+* Put down paraphrases for place ([#668](https://github.com/emma-simbot/datasets/issues/668)) ([42095b7](https://github.com/emma-simbot/datasets/commit/42095b76ec8eb66968b5327f7a1d9c099f269a24))
+
+## [1.34.3](https://github.com/emma-simbot/datasets/compare/v1.34.2...v1.34.3) (2023-04-25)
+
+
+### Bug Fixes
+
+* Comma missing in templates ([#667](https://github.com/emma-simbot/datasets/issues/667)) ([428b9f5](https://github.com/emma-simbot/datasets/commit/428b9f5eb522cfd3d60c5b35fef1aa78f3b76c09))
+
+## [1.34.2](https://github.com/emma-simbot/datasets/compare/v1.34.1...v1.34.2) (2023-04-24)
+
+
+### Bug Fixes
+
+* cdf generation ([#664](https://github.com/emma-simbot/datasets/issues/664)) ([661b21f](https://github.com/emma-simbot/datasets/commit/661b21fed3f6a720b94dfdeb64e1bc823c1f2427))
+
+## [1.34.1](https://github.com/emma-simbot/datasets/compare/v1.34.0...v1.34.1) (2023-04-20)
+
+
+### Bug Fixes
+
+* inventory from cdfs and manual annotations for NLU ([#660](https://github.com/emma-simbot/datasets/issues/660)) ([f8c2b3d](https://github.com/emma-simbot/datasets/commit/f8c2b3dfb5fa25fb974856f111b9440c09fba130))
+
+## [1.34.0](https://github.com/emma-simbot/datasets/compare/v1.33.0...v1.34.0) (2023-04-20)
+
+
+### Features
+
+* Add paraphrases for more cdf missions ([#661](https://github.com/emma-simbot/datasets/issues/661)) ([a4591d7](https://github.com/emma-simbot/datasets/commit/a4591d767f9ebc14262716250127825e6d8d16dc))
+
+## [1.33.0](https://github.com/emma-simbot/datasets/compare/v1.32.0...v1.33.0) (2023-04-20)
+
+
+### Features
+
+* add synonyms for generator ([#658](https://github.com/emma-simbot/datasets/issues/658)) ([913f23d](https://github.com/emma-simbot/datasets/commit/913f23dcf362b5a47701c24f07ecacc013dd2a8e))
+
+## [1.32.0](https://github.com/emma-simbot/datasets/compare/v1.31.0...v1.32.0) (2023-04-20)
+
+
+### Features
+
+* add spawnable objects as synonyms ([#657](https://github.com/emma-simbot/datasets/issues/657)) ([89d072a](https://github.com/emma-simbot/datasets/commit/89d072a406a18ea432043912d2fccad60eac75a0))
+
+## [1.31.0](https://github.com/emma-simbot/datasets/compare/v1.30.0...v1.31.0) (2023-04-18)
+
+
+### Features
+
+* kitchen sink synonyms ([#655](https://github.com/emma-simbot/datasets/issues/655)) ([53bb885](https://github.com/emma-simbot/datasets/commit/53bb8859d1b1c1619f6b410b8b64caf7251ade64))
+
+## [1.30.0](https://github.com/emma-simbot/datasets/compare/v1.29.2...v1.30.0) (2023-04-18)
+
+
+### Features
+
+* use wandb report, update coffee maker templates ([#653](https://github.com/emma-simbot/datasets/issues/653)) ([089a2e9](https://github.com/emma-simbot/datasets/commit/089a2e964bcb6f71fd480aef178aae296fb7fa4d))
+
+## [1.29.2](https://github.com/emma-simbot/datasets/compare/v1.29.1...v1.29.2) (2023-04-17)
+
+
+### Bug Fixes
+
+* Add emotion tester synonyms ([#651](https://github.com/emma-simbot/datasets/issues/651)) ([e7352c0](https://github.com/emma-simbot/datasets/commit/e7352c014a300cf160278fbdffc014d18e8602d4))
+
+## [1.29.1](https://github.com/emma-simbot/datasets/compare/v1.29.0...v1.29.1) (2023-04-17)
+
+
+### Bug Fixes
+
+* use only filled sinks during clean and fill augmentation ([#650](https://github.com/emma-simbot/datasets/issues/650)) ([3ec910a](https://github.com/emma-simbot/datasets/commit/3ec910a4b3e5e4767e0d4dcb21a8a5c88cdeae7e))
+
+## [1.29.0](https://github.com/emma-simbot/datasets/compare/v1.28.1...v1.29.0) (2023-04-14)
+
+
+### Features
+
+* validate as much as possible manual annotations ([#649](https://github.com/emma-simbot/datasets/issues/649)) ([9a0da36](https://github.com/emma-simbot/datasets/commit/9a0da369d96aa9887f0f878f8ae82d6c9e593f49))
+
+## [1.28.1](https://github.com/emma-simbot/datasets/compare/v1.28.0...v1.28.1) (2023-04-13)
+
+
+### Bug Fixes
+
+* missing image name when creating the trajectory db ([#643](https://github.com/emma-simbot/datasets/issues/643)) ([c5e7809](https://github.com/emma-simbot/datasets/commit/c5e7809e0a9600f4df68d1bdb9b32cf1e671c582))
+
+## [1.28.0](https://github.com/emma-simbot/datasets/compare/v1.27.5...v1.28.0) (2023-04-13)
+
+
+### Features
+
+* update high level key ([#641](https://github.com/emma-simbot/datasets/issues/641)) ([b89eb13](https://github.com/emma-simbot/datasets/commit/b89eb1358112e0e88a282050e5625814cebdcab0))
+
+## [1.27.5](https://github.com/emma-simbot/datasets/compare/v1.27.4...v1.27.5) (2023-04-13)
+
+
+### Bug Fixes
+
+* Bug in pour paraphrases ([#642](https://github.com/emma-simbot/datasets/issues/642)) ([111b142](https://github.com/emma-simbot/datasets/commit/111b142e64aa4593b77fa456b788dfdd9eb4f777))
+
+## [1.27.4](https://github.com/emma-simbot/datasets/compare/v1.27.3...v1.27.4) (2023-04-13)
+
+
+### Bug Fixes
+
+* Add source objects for pour ([#640](https://github.com/emma-simbot/datasets/issues/640)) ([3a6bc0e](https://github.com/emma-simbot/datasets/commit/3a6bc0e0ab96b9cbce781be16af0966efcf5e2cd))
+
+## [1.27.3](https://github.com/emma-simbot/datasets/compare/v1.27.2...v1.27.3) (2023-04-12)
+
+
+### Bug Fixes
+
+* skip trivial gotos ([#634](https://github.com/emma-simbot/datasets/issues/634)) ([89b6866](https://github.com/emma-simbot/datasets/commit/89b686642118446547484114e6380fe2c2240e01))
+
+## [1.27.2](https://github.com/emma-simbot/datasets/compare/v1.27.1...v1.27.2) (2023-04-12)
+
+
+### Bug Fixes
+
+* convert object naming when decoding the key ([#633](https://github.com/emma-simbot/datasets/issues/633)) ([445f8b4](https://github.com/emma-simbot/datasets/commit/445f8b49712f8e39f353ec01eec7e9aeb56e483f))
+
+## [1.27.1](https://github.com/emma-simbot/datasets/compare/v1.27.0...v1.27.1) (2023-04-12)
+
+
+### Bug Fixes
+
+* action creators with inventory paraphrasing ([#632](https://github.com/emma-simbot/datasets/issues/632)) ([9083719](https://github.com/emma-simbot/datasets/commit/9083719d5adce6081be9099a256d7ef00f7d971e))
+
+## [1.27.0](https://github.com/emma-simbot/datasets/compare/v1.26.0...v1.27.0) (2023-04-11)
+
+
+### Features
+
+* call high level paraphrasing when creating trajectory dbs ([#631](https://github.com/emma-simbot/datasets/issues/631)) ([cb732a5](https://github.com/emma-simbot/datasets/commit/cb732a5d7488b30ca0a8bf745721338a60027e08))
+
+## [1.26.0](https://github.com/emma-simbot/datasets/compare/v1.25.0...v1.26.0) (2023-04-11)
+
+
+### Features
+
+* Highlevel key decode v2 ([#629](https://github.com/emma-simbot/datasets/issues/629)) ([a066b45](https://github.com/emma-simbot/datasets/commit/a066b457bf23e57571cc777f6df21ec5299ea8c4))
+
+
+### Bug Fixes
+
+* Allow the paraphraser to generate only complete instructions ([#630](https://github.com/emma-simbot/datasets/issues/630)) ([102a456](https://github.com/emma-simbot/datasets/commit/102a456561f2ad0a79518f1db02677925dc3e273))
+
+## [1.25.0](https://github.com/emma-simbot/datasets/compare/v1.24.0...v1.25.0) (2023-04-11)
+
+
+### Features
+
+* create trajectories db from CDF sessions ([#626](https://github.com/emma-simbot/datasets/issues/626)) ([11dc112](https://github.com/emma-simbot/datasets/commit/11dc112c8ba005966f71d29f5211f54d6b134c44))
+
+## [1.24.0](https://github.com/emma-simbot/datasets/compare/v1.23.0...v1.24.0) (2023-04-07)
+
+
+### Features
+
+* Add paraphrasing for the inventory object ([#627](https://github.com/emma-simbot/datasets/issues/627)) ([8e439cc](https://github.com/emma-simbot/datasets/commit/8e439cc042eae126c4a6992ef39995179852f89b))
+
+## [1.23.0](https://github.com/emma-simbot/datasets/compare/v1.22.0...v1.23.0) (2023-04-06)
+
+
+### Features
+
+* Add some synonyms ([#625](https://github.com/emma-simbot/datasets/issues/625)) ([5701eac](https://github.com/emma-simbot/datasets/commit/5701eac20bac64f54499457d8938d0ce1183dc58))
+
+## [1.22.0](https://github.com/emma-simbot/datasets/compare/v1.21.0...v1.22.0) (2023-04-05)
+
+
+### Features
+
+* new visual augmentations ([#623](https://github.com/emma-simbot/datasets/issues/623)) ([af67a39](https://github.com/emma-simbot/datasets/commit/af67a392c94e103fd99b503ea90e3b1f3bf5a196))
+
+## [1.21.0](https://github.com/emma-simbot/datasets/compare/v1.20.0...v1.21.0) (2023-03-04)
+
+
+### Features
+
+* Update the special names ([#622](https://github.com/emma-simbot/datasets/issues/622)) ([c941604](https://github.com/emma-simbot/datasets/commit/c941604c0bcd27d07e4f6d207ebb380692397ea0))
+
+## [1.20.0](https://github.com/emma-simbot/datasets/compare/v1.19.0...v1.20.0) (2023-02-13)
+
+
+### Features
+
+* Bull should be a synonym of bowl ([#617](https://github.com/emma-simbot/datasets/issues/617)) ([9eddace](https://github.com/emma-simbot/datasets/commit/9eddace326793e74224249d2cda3bd00ff335a7c))
+
+## [1.19.0](https://github.com/emma-simbot/datasets/compare/v1.18.0...v1.19.0) (2023-02-07)
+
+
+### Features
+
+* Pick up augmentation ([#614](https://github.com/emma-simbot/datasets/issues/614)) ([3316cc6](https://github.com/emma-simbot/datasets/commit/3316cc6bed4681d1ae3ba8af9bce92f9f346fb30))
+
+## [1.18.0](https://github.com/emma-simbot/datasets/compare/v1.17.0...v1.18.0) (2023-02-07)
+
+
+### Features
+
+* remove instruction templates for examine sticky notes ([#613](https://github.com/emma-simbot/datasets/issues/613)) ([a922e5d](https://github.com/emma-simbot/datasets/commit/a922e5d2597aac7e6a77ea3d8422bdad94b2849c))
+
+## [1.17.0](https://github.com/emma-simbot/datasets/compare/v1.16.2...v1.17.0) (2023-02-06)
+
+
+### Features
+
+* Remove human act_no_match ([#612](https://github.com/emma-simbot/datasets/issues/612)) ([4207bed](https://github.com/emma-simbot/datasets/commit/4207bedb5b1ccbb92d0d43d84fb6a0bba751d892))
+
+## [1.16.2](https://github.com/emma-simbot/datasets/compare/v1.16.1...v1.16.2) (2023-02-06)
+
+
+### Bug Fixes
+
+* object ids in negative examples ([#611](https://github.com/emma-simbot/datasets/issues/611)) ([38def87](https://github.com/emma-simbot/datasets/commit/38def8794e6db972dbc386592ddcd77f59d7e8f4))
+
+## [1.16.1](https://github.com/emma-simbot/datasets/compare/v1.16.0...v1.16.1) (2023-02-06)
+
+
+### Bug Fixes
+
+* actually use the synonyms - I am sorry ([#610](https://github.com/emma-simbot/datasets/issues/610)) ([cd5291d](https://github.com/emma-simbot/datasets/commit/cd5291daa1855d571535e42e8830f324563a7b33))
+
+## [1.16.0](https://github.com/emma-simbot/datasets/compare/v1.15.0...v1.16.0) (2023-02-06)
+
+
+### Features
+
+* Update saliency rules and paraphrasing ([#605](https://github.com/emma-simbot/datasets/issues/605)) ([c6bb484](https://github.com/emma-simbot/datasets/commit/c6bb48440a5852d06325bfab5afdef3d64b889b5))
+
+## [1.15.0](https://github.com/emma-simbot/datasets/compare/v1.14.0...v1.15.0) (2023-02-06)
+
+
+### Features
+
+* Rare action object augmentations ([#607](https://github.com/emma-simbot/datasets/issues/607)) ([1644bb7](https://github.com/emma-simbot/datasets/commit/1644bb7b94dbe47b01b4e34858010b70f0e2eed5))
+
+## [1.14.0](https://github.com/emma-simbot/datasets/compare/v1.13.2...v1.14.0) (2023-01-26)
+
+
+### Features
+
+* create dbs for search like itm ([#603](https://github.com/emma-simbot/datasets/issues/603)) ([869ea46](https://github.com/emma-simbot/datasets/commit/869ea46416f023549a4bfa969788431947f42fc3))
+
+## [1.13.2](https://github.com/emma-simbot/datasets/compare/v1.13.1...v1.13.2) (2023-01-24)
+
+
+### Bug Fixes
+
+* Remove synthetic goto from dataset creation ([#602](https://github.com/emma-simbot/datasets/issues/602)) ([e88a33e](https://github.com/emma-simbot/datasets/commit/e88a33e582030dd92bd37b7ff1802dd81ac6b253))
+
+## [1.13.1](https://github.com/emma-simbot/datasets/compare/v1.13.0...v1.13.1) (2023-01-24)
+
+
+### Bug Fixes
+
+* Fix naming conventions when creating actions ([#601](https://github.com/emma-simbot/datasets/issues/601)) ([36269b0](https://github.com/emma-simbot/datasets/commit/36269b09b51ad25183a0fa979754ec6203b490b3))
+
+## [1.13.0](https://github.com/emma-simbot/datasets/compare/v1.12.0...v1.13.0) (2023-01-23)
+
+
+### Features
+
+* Create train valid splits for annotated data ([#600](https://github.com/emma-simbot/datasets/issues/600)) ([d99dd90](https://github.com/emma-simbot/datasets/commit/d99dd90af2243d0aea1367ff106d5592014c4175))
+* new model version ([#597](https://github.com/emma-simbot/datasets/issues/597)) ([9ad4a86](https://github.com/emma-simbot/datasets/commit/9ad4a865a80dd4402f4e437a3dd17b89b594d958))
+
+## [1.12.0](https://github.com/emma-simbot/datasets/compare/v1.11.1...v1.12.0) (2023-01-21)
+
+
+### Features
+
+* include simbot annotations when creating dbs ([#595](https://github.com/emma-simbot/datasets/issues/595)) ([664cb47](https://github.com/emma-simbot/datasets/commit/664cb47928827e481e3ccb70b18725cb7d3867f2))
+
+## [1.11.1](https://github.com/emma-simbot/datasets/compare/v1.11.0...v1.11.1) (2023-01-20)
+
+
+### Bug Fixes
+
+* Bug for location questions ([#596](https://github.com/emma-simbot/datasets/issues/596)) ([951c019](https://github.com/emma-simbot/datasets/commit/951c0195656d736cae01531de376d51391aeeb78))
+* linting ([#598](https://github.com/emma-simbot/datasets/issues/598)) ([76480fb](https://github.com/emma-simbot/datasets/commit/76480fba1f3a66c3082f13b21325aad043913881))
+
+## [1.11.0](https://github.com/emma-simbot/datasets/compare/v1.10.0...v1.11.0) (2022-12-13)
+
+
+### Features
+
+* Filter simbot clarifications ([#582](https://github.com/emma-simbot/datasets/issues/582)) ([2481e91](https://github.com/emma-simbot/datasets/commit/2481e911b769a1e84e489ecf58c46066ffdabeb6))
+
+## [1.10.0](https://github.com/emma-simbot/datasets/compare/v1.9.0...v1.10.0) (2022-11-29)
+
+
+### Features
+
+* Filter look around in human instructions ([#581](https://github.com/emma-simbot/datasets/issues/581)) ([801c7d4](https://github.com/emma-simbot/datasets/commit/801c7d49573feb3cb414f611333122c9f94d10a9))
+
+## [1.9.0](https://github.com/emma-simbot/datasets/compare/v1.8.1...v1.9.0) (2022-11-29)
+
+
+### Features
+
+* Vision data augmentations v2 ([#572](https://github.com/emma-simbot/datasets/issues/572)) ([f1aa699](https://github.com/emma-simbot/datasets/commit/f1aa699f9d8c5a7e09f61696848b864fa8fa94a2))
+
+## [1.8.1](https://github.com/emma-simbot/datasets/compare/v1.8.0...v1.8.1) (2022-11-24)
+
+
+### Bug Fixes
+
+* close paraphraser ([#577](https://github.com/emma-simbot/datasets/issues/577)) ([c043c84](https://github.com/emma-simbot/datasets/commit/c043c84959b68393aed2840d859ad43cec8360f1))
+* paraphrasable property ([#576](https://github.com/emma-simbot/datasets/issues/576)) ([47101b2](https://github.com/emma-simbot/datasets/commit/47101b23c00de94da7689d0e12fc5673931225fe))
+
+## [1.8.0](https://github.com/emma-simbot/datasets/compare/v1.7.0...v1.8.0) (2022-11-24)
+
+
+### Features
+
+* Update label-to-idx and idx-to-label arena definitions ([#573](https://github.com/emma-simbot/datasets/issues/573)) ([1bb0db5](https://github.com/emma-simbot/datasets/commit/1bb0db592addb94ed88168e90b8190ef17305717))
+
+## [1.7.0](https://github.com/emma-simbot/datasets/compare/v1.6.0...v1.7.0) (2022-11-17)
+
+
+### Features
+
+* New object classes ([#560](https://github.com/emma-simbot/datasets/issues/560)) ([98984d6](https://github.com/emma-simbot/datasets/commit/98984d64537ab4896e7bb85bdf8f289856e60dcc))
+
+## [1.6.0](https://github.com/emma-simbot/datasets/compare/v1.5.0...v1.6.0) (2022-11-17)
+
+
+### Features
+
+* Add paraphrasers for all actions ([#571](https://github.com/emma-simbot/datasets/issues/571)) ([5a0e980](https://github.com/emma-simbot/datasets/commit/5a0e9808403324b83019caacba0b6dad4e28b064))
+
+## [1.5.0](https://github.com/emma-simbot/datasets/compare/v1.4.1...v1.5.0) (2022-11-14)
+
+
+### Features
+
+* Add object manifest ([#561](https://github.com/emma-simbot/datasets/issues/561)) ([ce3876f](https://github.com/emma-simbot/datasets/commit/ce3876fd1b2a35d010afa7ffd780b44071db2817))
+
+## [1.4.1](https://github.com/emma-simbot/datasets/compare/v1.4.0...v1.4.1) (2022-11-14)
+
+
+### Bug Fixes
+
+* Use readable names only for special monitors ([#562](https://github.com/emma-simbot/datasets/issues/562)) ([e6a0e82](https://github.com/emma-simbot/datasets/commit/e6a0e821e71a247d30852f50c5ce382ce0e1c721))
+
+## [1.4.0](https://github.com/emma-simbot/datasets/compare/v1.3.0...v1.4.0) (2022-11-12)
+
+
+### Features
+
+* Add paraphrasing to augmented instructions ([#558](https://github.com/emma-simbot/datasets/issues/558)) ([239a4aa](https://github.com/emma-simbot/datasets/commit/239a4aaac94d258f2f8b193342a47de8e8f455bc))
+* high level planner data ([#563](https://github.com/emma-simbot/datasets/issues/563)) ([891c28f](https://github.com/emma-simbot/datasets/commit/891c28fe752570707c13453c775d3edacc97ac38))
+* Special monitor augmentations ([#557](https://github.com/emma-simbot/datasets/issues/557)) ([0a8d2d5](https://github.com/emma-simbot/datasets/commit/0a8d2d52fd8d47e7ae929c454647f53bb79466de))
+* Update arena definitions to match new vision model ([#555](https://github.com/emma-simbot/datasets/issues/555)) ([4271558](https://github.com/emma-simbot/datasets/commit/4271558d5824da96bc6cee487b86492d60de2210))
+
+
+### Bug Fixes
+
+* Handle ambiguous Goto ([#554](https://github.com/emma-simbot/datasets/issues/554)) ([239b68d](https://github.com/emma-simbot/datasets/commit/239b68d0c677227fa8c3b37465dac8220f87a19e))
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e8b5d28
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 emma-heriot-watt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..270225b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,71 @@
+
+
+# EMMA: Datasets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[![Continuous Integration](https://github.com/emma-heriot-watt/datasets/actions/workflows/continuous_integration.yml/badge.svg?branch=main)](https://github.com/emma-heriot-watt/datasets/actions/workflows/continuous_integration.yml)
+[![Tests](https://github.com/emma-heriot-watt/datasets/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/emma-heriot-watt/datasets/actions/workflows/tests.yml)
+
+
+
+> [!IMPORTANT]
+> If you have questions or find bugs or anything, you can contact us in our [organisation's discussion](https://github.com/orgs/emma-heriot-watt/discussions).
+
+---
+
+To use this package in your project, you can install it by running
+
+```bash
+poetry add git+https://github.com/emma-simbot/datasets.git
+```
+
+You can then just import from `emma_datasets` or run commands using the CLI with
+
+```bash
+python -m emma_datasets
+```
+
+## Writing code and running things
+
+When running commands for `emma_datasets`, you can append `--help` to get more information on the commands and any arguments available to you.
+
+### Project structure
+
+This is organised in very similarly to structure from the [Lightning-Hydra-Template](https://github.com/ashleve/lightning-hydra-template#project-structure) to facilitate reproducible research code.
+
+- `scripts` — `sh` scripts to run experiments
+- `notebooks` — Jupyter notebook for analysis and exploration
+- `storage` — data for training/inference _(and maybe use symlinks to point to other parts of the file system)_
+- `tests` — [pytest](https://docs.pytest.org/en/) scripts to verify the code
+- `src/emma_datasets` — where the main code lives
+
+### How-to guides
+
+For more detail on how to use this library, check out the following specific pages on:
+
+- [Installing and preparing your developer environment](CONTRIBUTING.md)
+- [Downloading and organising the raw datasets](docs/downloading-raw-data.md)
+- [Adding a new downstream dataset](docs/how-to-add-a-new-downstream-dataset.md)
diff --git a/docs/downloading-raw-data.md b/docs/downloading-raw-data.md
new file mode 100644
index 0000000..730155a
--- /dev/null
+++ b/docs/downloading-raw-data.md
@@ -0,0 +1,59 @@
+# Preparing the raw metadata for the datasets
+
+Importantly, we try to avoid downloading images and any media/features for the datasets. We only care about getting the metadata for a dataset, putting it all together nicely, and then pumping it out fast!
+
+## Downloading the raw data
+
+There is a single CSV file which contains a link to every file which needs to be downloaded to create the full dataset.
+
+You can automatically download all the files by running:
+
+```bash
+python -m emma_datasets download datasets
+```
+
+### Huggingface datasets support
+
+Using the same script, we can also download datasets contained in [Huggingface datasets](https://huggingface.co/docs/datasets/index).
+An Huggingface dataset can be added to the download list following a specific URL format.
+Every URL for an Huggingface dataset should have the following format:
+
+`hf://?key=&split=`
+
+The parameters in the URL format have the following meaning:
+
+- ``: Huggingface dataset identifier
+- ``: field of the dataset containing the URL
+- ``: reference split of the dataset (depending on the release)
+
+So if you want to add the training split of ConceptualCaptions to your download list, use the following URL:
+`hf://conceptual_captions?key=image_url&split=train`
+
+In this way, the downloader will download the dataset from Huggingface, store in the cache, and
+then retrieve all the URLs that are relevant for this dataset using `key_to_access_url` parameter.
+
+### Downloading specific datasets
+
+If you want to download specific datasets, you can provide the dataset name to the command. For example, to download just COCO and GQA, run:
+
+```bash
+python -m emma_datasets download datasets coco gqa
+```
+
+## Organising the raw data
+
+A script has been created to automatically extract and organise the raw data for you. You can automatically do this by calling
+
+```bash
+python -m emma_datasets organise
+```
+
+### Organising specific datasets
+
+You can automatically organise specific datasets by providing the dataset name, [similar to above](#downloading-specific-datasets).
+
+## Updating the dataset sources
+
+All the remote paths where raw data can be downloaded from are stored in `src/emma_datasets/constants/dataset_downloads.csv`.
+
+The first column of dataset names **must** correspond to the enum names for `DatasetName`, found in `src/emma_datasets/datamodels/constants.py`
diff --git a/docs/how-to-add-a-new-downstream-dataset.md b/docs/how-to-add-a-new-downstream-dataset.md
new file mode 100644
index 0000000..67ec0a0
--- /dev/null
+++ b/docs/how-to-add-a-new-downstream-dataset.md
@@ -0,0 +1,127 @@
+# How to add a new downstream dataset
+
+A **downstream dataset** is one that will be used for evaluating the model after all the training, and not for pretraining. That means each DB will only have the instances **for a single dataset**.
+
+For downstream dataset instances, we are making the assumption that we do not need to do any annotation extracting or anything, and that it can all be done together in one go.
+
+## Things to note
+
+### Pydantic
+
+We use everything [Pydantic](https://pydantic-docs.helpmanual.io) has to offer: [Fields](https://pydantic-docs.helpmanual.io/usage/types/), [validators](https://pydantic-docs.helpmanual.io/usage/validators/), all of it!
+
+### pytest
+
+This guide assumes you have prior experience with [`pytest`](https://docs.pytest.org/) and unit-testing in general. To learn more about fantastic fixtures and how to use them, check out the following links:
+
+- [About fixtures (from `pytest`)](https://docs.pytest.org/en/stable/explanation/fixtures.html#about-fixtures)
+- [How to use fixtures (from
+ `pytest`)](https://docs.pytest.org/en/stable/how-to/fixtures.html#how-to-fixtures)
+
+### Typer
+
+We also use [Typer](https://typer.tiangolo.com) for creating and testing the various CLI apps.
+
+## Updating the constants
+
+Before anything, you need to add your new dataset to the constants because these are used throughout for keeping things consistent.
+
+1. Add your dataset name to `DatasetName` (in `emma_datasets.datamodels.constants`) — ensure the value is in the proper format used by the dataset to keep things consistent and pretty
+1. Include your new dataset name in `DatasetModalityMap` (in `emma_datasets.datamodels.constants`)
+1. Based on the annotations your dataset has, add it to `AnnotationDatasetMap` (in
+ `emma_datasets.datamodels.constants`)
+
+## Preparing to create tests for the new dataset
+
+Datasets are huge and there might be edge cases you probably didn't consider. To reduce the likelihood of wasting time on manually checking the full pipeline for bugs, you can implement smaller fine-grained tests to verify and isolate any issues.
+
+To prepare, you need to do the following:
+
+1. Download a subset of instances and include the file(s) in `storage/fixtures/` — if you have multiple files, store them in a folder.
+1. Create a fixture in `tests/fixtures/paths.py` which can point to the source data file/folder. Be sure to use `fixtures_root`.
+
+That's it for now! We'll come back to using these files later in the guide.
+
+## Creating models for a single dataset instance
+
+We need to easily parse every single instance and validate them to ensure that everything in the raw data is as you expect it! These classes are what get exported and stored within the DB file, and can be imported straight from the DB within your model.
+
+Using [Pydantic's parsing methods](https://pydantic-docs.helpmanual.io/usage/models/#helper-functions), your raw data will be loaded from this file directly, and it will be validated to the schema of this model. This way, we can also verify that every single instance of the model is what you expect it to be, and you can deal with any weird data issues if they get flagged. If this happens, it will error.
+
+The best example for what you are capable of doing is `TeachEdhInstance` (in `emma_datasets.datamodels.datasets.teach`). Each instance is represented by a single `TeachEdhInstance` and is used to import. It's made of multiple models, and Pydantic automatically parses all the nested models for you!
+
+We advocate that the model for your dataset instance is as detailed as possible, using additional validators and properties where possible to ease usage downstream and ensure _every single instance_ is as expected.
+
+### Creating an instance for your dataset
+
+1. Create a new file for your dataset in `src/emma_datasets/datamodels/datasets/`.
+1. Import `BaseInstance` from `emma_datasets.datamodels.base_model`
+1. Create a class for your instance, inheriting from `BaseInstance`. For consistency, please ensure that the name of your class is in pascal case.
+1. Import your new instance into `emma_datasets/datamodels/datasets/__init__.py` to ensure it is easily accessible like the others.
+
+_Note: We used Pascal case because we made some typos and we don't want to rename every single class throughout the library, so it's just staying that way for now._
+
+#### What if the raw data is not in `snake_case`?
+
+If the keys in the raw data are not in snake case, you can use the `alias` key in `Field`. Check out [the example here](https://pydantic-docs.helpmanual.io/usage/model_config/#alias-precedence) or in ALFRED-related models (in `src/emma_datasets/datamodels/datasets/alfred.py`)
+
+### Testing your new instance
+
+We want to verify that your data can be imported and parsed by your instance correctly. As shown by `tests/datamodels/test_teach_datamodels.py`, you can verify that your model is working on your raw data correctly without needing to run the entire pipeline.
+
+Using your [previously created fixture paths](#preparing-to-create-tests-for-the-new-dataset), create a new module for your dataset within `tests/datamodels` and add your tests to it.
+
+If you are unsure what tests to include, check out other tests within the same directory. If you include `@property`'s in your instance, then you'll also want to test them too as they should be present for all instances.
+
+## Adding the new dataset to the `downstream` command
+
+To keep things simple for user, all DBs for downstream datasets can be created using the `emma_datasets` CLI. Each dataset has its own subcommand, and adding a new one should be nice and simple. You can find all subcommands for the `downstream` command are in `src/emma_datasets/commands/create_downstream_dbs.py`.
+
+### Creating the command for the CLI
+
+1. Create a new function which will store the logic for your downstream dataset — you can use `pass` for now for the content
+1. Decorate your function with `@app.command("name")`, where `name` is the name of your dataset and will be accessible by the commands. Ensure that the commands are using hyphens and not underscores.
+1. Add 3 arguments to the function:
+ 1. One pointing to the source directory of instances
+ 1. `output_dir`: the output directory of the created DB files
+ 1. `num_workers`: the number of workers using in the multiprocessing pool
+1. Add any other arguments/options to the function, these will also be available by the command.
+1. Add a docstring for the function. This will also be the help for the subcommand within the CLI. You can also use everything [Typer]() has to offer to include more advanced functionality.
+
+You can test your command exists within the CLI by running:
+
+```bash
+python -m emma_datasets downstream --help
+```
+
+Your new function/command should be listed as a possible command, and you should be able to run it.
+
+### Adding the DB creator to your new command
+
+You can use the `DownstreamDbCreator` to easily process all the files for all the dataset splits. There are three `@classmethod`s that you can use to simplify the entire process:
+
+- `DownstreamDbCreator.from_one_instance_per_json()`: for when each instance is within a separate JSON file
+- `DownstreamDbCreator.from_one_instance_per_dict()`: for when all instances are preprocessed into a dictionary
+- `DownstreamDbCreator.from_jsonl()`: for when all instances are contained within a single JSONL file
+- `DownstreamDbCreator.from_huggingface()`: for when you want to create a DatasetDb with a dataset from the [Hugging Face Hub](https://huggingface.co/dataset)
+
+For each class method, the process is mostly identical.
+
+1. Create a dictionary pointing to separate paths for each dataset split for your dataset
+2. Import the model for your instance from `emma_datasets.datamodels.datasets` (since you added it to the `__init__` above)
+3. Instantiate the class using the class method
+4. Call `.run(num_workers)`, providing the `num_workers`
+
+### Testing your new command
+
+After everything, we want to ensure that we can create the DBs, and that the command is working as expected. Importantly, we want to do this separately because if there are errors, we will want to know whether the problem is within the `DownstreamDbCreator` or caused by the downstream command function.
+
+#### Testing your instance with the `DownstreamDbCreator`
+
+1. Go to `tests/test_downstream_db_creator.py`
+2. Create a function to test the `DownstreamDbCreator` on your dataset. You _can_ just copy-paste other functions and tweak the aspects necessary for your dataset. This doesn't need to be elegant, it needs to robustly test that everything works as expected.
+
+#### Testing your new subcommand works
+
+1. Go to `tests/commands/test_create_downstream_dbs.py`
+2. Create a function to test your command. You _can_ just copy-paste from other test functions and tweak the aspects necessary for your command. Again, this doesn't need to be elegant, it needs to robustly test everything works.
diff --git a/docs/how-to-add-a-new-pretraining-dataset.md b/docs/how-to-add-a-new-pretraining-dataset.md
new file mode 100644
index 0000000..c4350ba
--- /dev/null
+++ b/docs/how-to-add-a-new-pretraining-dataset.md
@@ -0,0 +1,157 @@
+# How to add a new pretraining dataset
+
+A **pretraining dataset** is specific used for pretraining the model and not for downstream fine-tuning or evaluating of the model. That means that each DB will **combine multiple datasets into one form**.
+
+For model pretraining, we are making the assumption that we want to merge examples from multiple datasets into a single representation (an `Instance`).
+
+At a high-level, these are the steps:
+
+1. [Update the constants](#updating-the-constants)
+2. [Create a subset of the full dataset for automated testing](#preparing-to-create-tests-for-the-new-dataset)
+3. Processing a raw instance from the dataset
+4. Extracting annotations from the dataset
+
+## Things to note
+
+### Pydantic
+
+We use everything [Pydantic](https://pydantic-docs.helpmanual.io) has to offer: [Fields](https://pydantic-docs.helpmanual.io/usage/types/), [validators](https://pydantic-docs.helpmanual.io/usage/validators/), all of it!
+
+### pytest
+
+This guide assumes you have prior experience with [`pytest`](https://docs.pytest.org/) and unit-testing in general. To learn more about fantastic fixtures and how to use them, check out the following links:
+
+- [About fixtures (from `pytest`)](https://docs.pytest.org/en/stable/explanation/fixtures.html#about-fixtures)
+- [How to use fixtures (from
+ `pytest`)](https://docs.pytest.org/en/stable/how-to/fixtures.html#how-to-fixtures)
+
+### Typer
+
+We also use [Typer](https://typer.tiangolo.com) for creating and testing the various CLI apps.
+
+## Updating the constants
+
+Before anything, you need to add your new dataset to the constants because these are used throughout for keeping things consistent.
+
+1. Add your dataset name to `DatasetName` (in `emma_datasets.datamodels.constants`) — ensure the value is in the proper format used by the dataset to keep things consistent and pretty
+2. Include your new dataset name in `DatasetModalityMap` (in `emma_datasets.datamodels.constants`)
+3. Based on the annotations your dataset has, add it to `AnnotationDatasetMap` (in `emma_datasets.datamodels.constants`)
+
+## Preparing to create tests for the new dataset
+
+Datasets are huge and there might be edge cases you probably didn't consider. To reduce the likelihood of wasting time on manually checking the full pipeline for bugs, you can implement smaller fine-grained tests to verify and isolate any issues.
+
+To prepare, you need to do the following:
+
+1. Download a subset of instances and include the file(s) in `storage/fixtures/` — if you have multiple files, store them in a folder.
+1. Create a fixture in `tests/fixtures/paths.py` which can point to the source data file/folder. Be sure to use `fixtures_root`.
+
+That's it for now! We'll come back to using these files later in the guide.
+
+## Creating models for the raw dataset
+
+We need to easily parse every single instance and validate them to ensure that everything in the raw data is as you expect it! These classes are what get exported and stored within the DB file, and can be imported straight from the DB within your model.
+
+Using [Pydantic's parsing methods](https://pydantic-docs.helpmanual.io/usage/models/#helper-functions), your raw data will be loaded from this file directly, and it will be validated to the schema of this model. This way, we can also verify that every single instance of the model is what you expect it to be, and you can deal with any weird data issues if they get flagged. If this happens, it will error.
+
+The best example for what you are capable of doing is `TeachEdhInstance` (in `emma_datasets.datamodels.datasets.teach`). Each instance is represented by a single `TeachEdhInstance` and is used to import. It's made of multiple models, and Pydantic automatically parses all the nested models for you!
+
+We advocate that the model for your dataset instance is as detailed as possible, using additional validators and properties where possible to ease usage downstream and ensure _every single instance_ is as expected.
+
+### Creating an instance for your dataset
+
+1. Create a new file for your dataset in `src/emma_datasets/datamodels/datasets/`.
+1. Import `BaseModel` from `emma_datasets.datamodels.base_model`
+1. Create a class for your instance, inheriting from `BaseInstance`. For consistency, please ensure that the name of your class is in pascal case.
+1. Import your new instance into `emma_datasets/datamodels/datasets/__init__.py` to ensure it is easily accessible like the others.
+
+_Note: We used Pascal case because we made some typos and we don't want to rename every single class throughout the library, so it's just staying that way for now._
+
+### Modifying the data on load, automatically
+
+If you need to consistently modify every single instance of the raw model, you can do that too! Use Pydantic's [`root_validator`](https://pydantic-docs.helpmanual.io/usage/validators/#root-validators) to take in the example and return what you want.
+
+For examples, see [`AlfredMetadata`](https://github.com/emma-simbot/datasets/blob/4ea83c492cdab331ab7c722422f48ee8ee181659/src/emma_datasets/datamodels/datasets/alfred.py#L136-L144) and [`EpicKitchensNarrationMetdata`](https://github.com/emma-simbot/datasets/blob/4ea83c492cdab331ab7c722422f48ee8ee181659/src/emma_datasets/datamodels/datasets/epic_kitchens.py#L48-L56) to see how the raw data is modified on import.
+
+#### What if the raw data is not in `snake_case`?
+
+If the keys in the raw data are not in snake case, you can use the `alias` key in `Field`. Check out [the example here](https://pydantic-docs.helpmanual.io/usage/model_config/#alias-precedence) or in ALFRED-related models (in `src/emma_datasets/datamodels/datasets/alfred.py`)
+
+### Testing your model works on the raw dataset
+
+We want to verify that your data can be imported and parsed by your instance correctly. As shown by `tests/datamodels/test_teach_datamodels.py`, you can verify that your model is working on your raw data correctly without needing to run the entire pipeline.
+
+Using your [previously created fixture paths](#preparing-to-create-tests-for-the-new-dataset), create a new module for your dataset within `tests/datamodels` and add your tests to it.
+
+If you are unsure what tests to include, check out other tests within the same directory. If you include `@property`'s in your instance, then you'll also want to test them too as they should be present for all instances.
+
+## Extracting annotations
+
+For speed, we need to extract all the annotations from every instance of the dataset in advance, as a type of `Annotation` class. We use these `Annotation`s when we are creating the new instances. This way, it allows for easy importing of data that will also be validated, since `Annotation` inherits from Pydantic.
+
+1. Create a new class that inherits from `AnnotationExtractor` within `src/emma_datasets/parsers/annotation_extractors/`. We recommend new files for each extractor.
+2. Implement the `convert` and `process_single_instance` methods
+3. Include your new class in `src/emma_datasets/parsers/annotation_extractors/__init__.py`. This way, it can be easily imported with the other annotation extractors.
+
+Other methods are present to help with making the conversion process easier. We recommend checking out the documentation for each method in `src/emma_datasets/parsers/annotation_extractors/annotation_extractor.py`.
+
+### Including the new extractor in the pipeline
+
+A command exists in `emma_datasets.commands.extract_annotations` which extracts all the annotations from all the datasets. To ensure that your dataset is included in the pipeline, you need to include the extractor in this command.
+
+To do this, you need to:
+
+1. Create a new function that initializes and returns your specific annotation extractor.
+2. Include this function in the `all_extractor_callables` list.
+
+### Testing your annotation extractor
+
+_NOTE: For this section, we assume you have [already created fixtures for the new dataset](#preparing-to-create-tests-for-the-new-dataset)._
+
+To verify that your annotation extractor works and continues to do so, you need to implement some simple tests with a bit of prep work. For testing performance, we do not extract the annotations repeatedly. Therefore, we cache them to they are re-used in downstream tests. `pytest` allows us to do this automatically with minimum effort.
+
+#### Create a new cached folder for the extracted annotations
+
+1. Find the `extracted_annotations_paths()` fixture in`tests/fixtures/paths.py`
+2. Within the `annotation_folders` variable, add a new key for your dataset's annotations. This will be unique to your dataset, so we recommend making it clear.
+
+#### Creating a fixture for your annotation extractor
+
+1. Go to `tests/fixtures/annotation_extractors.py`
+2. Create a fixture that is similarly named to others in this module (generally following the pattern of `extract__`)
+3. The arguments to the fixture should be the fixture to the raw data paths [(as created above)](#preparing-to-create-tests-for-the-new-dataset), and `extracted_annotations_paths`. It should return a `bool`.
+4. Like the other fixtures, call the `extracted_annotations()` function, providing it with the necessary arguments to run
+5. Include your annotation extractor fixture in the `all_extracted_annotations()` fixture — updating both the function arguments and adding a new assert statement for it.
+
+#### Creating the actual test for the annotation extractor
+
+1. Create a test within `tests/test_annotation_extractors.py` for your annotation extractor, using your [previously created fixture](#creating-a-fixture-for-your-annotation-extractor)
+2. Run the test to verify it is all working.
+
+## Converting your dataset to a `DatasetMetadata`
+
+Each instance is converted into a `DatasetMetadata` to be easily processed and merged into the single `Instance` format. The `DatasetMetadata` model provides a consistent way to store the metadata and access the annotations.
+
+### Creating a dataset metadata parser
+
+1. Create a new module for your metadata parser in `src/emma_datasets/parsers/dataset_metadata/`
+2. Create your class, inheriting the base `DatasetMetadataParser` from `emma_datasets.parsers.dataset_metadata.metadata_parser`. `DatasetMetadataParser` is a generic class, meaning the model for the metadata of the raw dataset should be provided with it. For example, the `AlfredMetadataParser` inherits from `DatasetMetadataParser[AlfredMetadata]`
+3. Update the class variables for `metadata_model` and `dataset_name`
+4. Implement the private `_read()` method, which will read in the data for each path provided to `self.data_paths` within the `__init__()`
+5. Implement the `convert_to_dataset_metadata` class method, to convert a single instance from the raw dataset into instances of `DatasetMetadata`
+
+If you are unsure how this is implemented, use the other modules as examples.
+
+#### When a single raw instance becomes multiple instances of `DatasetMetadata`
+
+As was the case with ALFRED, each raw example is split by subgoals into multiple pretraining instances, and therefore needed to return multiple `DatasetMetadata`. Checkout how that was handled there.
+
+## Aligning datasets: When datasets overlap
+
+When you want to use multiple datasets but they overlap and come from common sources, it can be incredibly difficult to use them and handle these duplicates. This was the case for COCO, VisualGenome, GQA: VisualGenome and GQA used COCO, and GQA also used VisualGenome, and we wanted to use _all_ of them!
+
+TBA.
+
+## Exporting instances
+
+TBA.
diff --git a/docs/how-to-use-the-dataset-db.md b/docs/how-to-use-the-dataset-db.md
new file mode 100644
index 0000000..2c82b61
--- /dev/null
+++ b/docs/how-to-use-the-dataset-db.md
@@ -0,0 +1,148 @@
+# DatasetDb: EMMA's dataset manager
+
+We implemented `DatasetDb`, a dedicated database for storing datasets that can be easily
+processed in PyTorch. It provides a simple interface to access, iterate and create datasets. It is
+based on [SQLite](https://www.sqlite.org/index.html) so it avoids loading in memory all the dataset
+content which is perfect for multiprocess training.
+
+If you're interested in
+understanding how it was implemented, please go the `Dataset structure` section.
+
+## How do I use it?
+
+A `DatasetDb` can be instantiated using a Python context manager to make sure that the underlying
+database connection is correctly closed. This can be done as follows:
+
+```python
+with DatasetDb("path/to/dataset.db") as db:
+ # now you can use the db...
+```
+
+The connection to the database will be closed automatically when the object goes out of scope.
+
+### Reading from a database
+
+Each dataset is composed of several examples. Each example in this library is represented as a
+tuple `(data_id, example_id, data)`:
+
+- `data_id` is the instance index;
+- `example_id` is the identifier used by the dataset to represent the current instance
+- `data` is a byte representation of the instance's content.
+
+By default, the instance content is assumed to be JSON, so the `DatasetDb` will return a Python
+object when reading from the underlying SQLite database.
+
+To access the data, you can iterate over them as follows:
+
+```python
+from emma_datasets.db import DatasetDb
+
+with DatasetDb("path/to/dataset.db") as db:
+ for data_id, example_id, data in db:
+ # do something with the fields...
+```
+
+You can access to a specific instance using either type of identifier. The `DatasetDb` can be
+used as a Python dictionary:
+
+```python
+from emma_datasets.db import DatasetDb
+
+with DatasetDb("path/to/dataset.db") as db:
+ # the `data_id` has to be of type `int`
+ data_id = 150
+ instance = db[data_id]
+
+ # the `example_id` has to be of type `str`
+ example_id = "pretraining_150"
+ instance = db[example_id]
+```
+
+### Integration in PyTorch
+
+The previous examples are useful if you are just interested in exploring the data. However, one
+important use case for EMMA is to use the data to train a PyTorch model. We can use the `DatasetDb`
+as follows:
+
+```python
+from emma_datasets.db import DatasetDb
+from torch.utils.data import Dataset
+
+class EmmaPretrainingDataset(Dataset):
+ def __init__(self, db_path):
+ self.db = DatasetDb(db_path)
+
+ def __len__(self):
+ # Don't worry, this is extremely efficient because we have an index on the primary key :)
+ return len(self.db)
+
+ def __getitem__(self, index):
+ instance = self.db[index]
+
+ # I'm assuming you have a way to transform your raw JSON data to tensors
+ tensors = transform(instance)
+
+ return tensors
+
+```
+
+### Writing to a database
+
+We can create a `DatasetDb` using a similar API which is described in the following code snippet:
+
+```python
+from emma_datasets.db import DatasetDb
+
+num_instances = 10
+
+with DatasetDb("path/to/dataset.db", readonly=False) as db:
+ for data_id in range(num_instances):
+ # this is just an example, you can use any Python object
+ instance = {"caption": "This is a caption"}
+ example_id = f"instance_{data_id}"
+ db[(data_id, example_id)] = instance
+```
+
+In this snippet, we assume that the dataset creation happens once so that we are able to assign one
+unique `data_id` to each instance. In general, `data_id` represents an index that goes from `0` to
+`N-1`, where `N` is the number of datapoints in the dataset.
+
+When writing to the database, you may want to adjust the parameter `batch_size` (default=`512`).
+This represents the number of instances in the database cache that are retained before we flush its
+content into the database.
+
+## How is it implemented?
+
+Thanks to SQLite integration in Python, we could implement this in pure Python code. The actual
+implementation can be found in the [storage module](../src/api/storage.py).
+
+### Database structure
+
+SQLite is a powerful and efficient relational database that we use for storing the dataset we are
+interested in. We assume that a dataset is composed of `N` data points `[x_1, x_2, ..., x_N]`.
+In order to represent it in a relational database, we define a table `dataset` that has the
+following columns:
+
+- `data_id`: an instance counter for all the database instances (defined as `INTEGER PRIMARY KEY`)
+- `example_id`: an identifier for the instance (defined as `TEXT`)
+- `data`: the instance's content in byte (defined as `BLOB`, see `Storage types` for details)
+
+### Storage types
+
+The underlying SQLite does not support specific Python objects out of the box. Therefore, we
+serialise all the instance data in bytes and store them in a `BLOB` field. At the moment, we
+support two different storage types:
+
+1. `TorchStorage`: This storage uses the default PyTorch serialisation format and can be used to
+ store any PyTorch/Python object. For more details refer to the [official documentation](https://pytorch.org/docs/stable/notes/serialization.html).
+2. `JsonStorage`: We use the custom [orjson](https://github.com/ijl/orjson) library that also supports NumPy serialisation.
+
+By default, `JsonStorage` is used as serialisation type for all the instances. If you're interested
+in storing actual PyTorch tensors, you can change the serialisation format as follows:
+
+```python
+from emma_datasets.db import DatasetDb, StorageType
+
+db = DatasetDb("/path/to/dataset.db", storage_type=StorageType.torch)
+
+```
diff --git a/logs/.gitkeep b/logs/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/notebooks/.gitkeep b/notebooks/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..dc9a405
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,6554 @@
+# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+
+[[package]]
+name = "aiohttp"
+version = "3.9.1"
+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"},
+]
+
+[package.dependencies]
+aiosignal = ">=1.1.2"
+async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""}
+attrs = ">=17.3.0"
+frozenlist = ">=1.1.1"
+multidict = ">=4.5,<7.0"
+yarl = ">=1.0,<2.0"
+
+[package.extras]
+speedups = ["Brotli", "aiodns", "brotlicffi"]
+
+[[package]]
+name = "aiosignal"
+version = "1.3.1"
+description = "aiosignal: a list of registered asynchronous callbacks"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
+ {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
+]
+
+[package.dependencies]
+frozenlist = ">=1.1.0"
+
+[[package]]
+name = "anyio"
+version = "4.1.0"
+description = "High level compatibility layer for multiple asynchronous event loop implementations"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "anyio-4.1.0-py3-none-any.whl", hash = "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f"},
+ {file = "anyio-4.1.0.tar.gz", hash = "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da"},
+]
+
+[package.dependencies]
+exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
+idna = ">=2.8"
+sniffio = ">=1.1"
+
+[package.extras]
+doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
+trio = ["trio (>=0.23)"]
+
+[[package]]
+name = "appnope"
+version = "0.1.3"
+description = "Disable App Nap on macOS >= 10.9"
+optional = false
+python-versions = "*"
+files = [
+ {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"},
+ {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"},
+]
+
+[[package]]
+name = "argon2-cffi"
+version = "23.1.0"
+description = "Argon2 for Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"},
+ {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"},
+]
+
+[package.dependencies]
+argon2-cffi-bindings = "*"
+
+[package.extras]
+dev = ["argon2-cffi[tests,typing]", "tox (>4)"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"]
+tests = ["hypothesis", "pytest"]
+typing = ["mypy"]
+
+[[package]]
+name = "argon2-cffi-bindings"
+version = "21.2.0"
+description = "Low-level CFFI bindings for Argon2"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"},
+ {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"},
+ {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"},
+ {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"},
+ {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"},
+ {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"},
+ {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"},
+ {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"},
+ {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"},
+ {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"},
+ {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"},
+ {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"},
+ {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"},
+]
+
+[package.dependencies]
+cffi = ">=1.0.1"
+
+[package.extras]
+dev = ["cogapp", "pre-commit", "pytest", "wheel"]
+tests = ["pytest"]
+
+[[package]]
+name = "arrow"
+version = "1.3.0"
+description = "Better dates & times for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"},
+ {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"},
+]
+
+[package.dependencies]
+python-dateutil = ">=2.7.0"
+types-python-dateutil = ">=2.8.10"
+
+[package.extras]
+doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"]
+test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"]
+
+[[package]]
+name = "astor"
+version = "0.8.1"
+description = "Read/rewrite/write Python ASTs"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+files = [
+ {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"},
+ {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"},
+]
+
+[[package]]
+name = "asttokens"
+version = "2.4.1"
+description = "Annotate AST trees with source code positions"
+optional = false
+python-versions = "*"
+files = [
+ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
+ {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
+]
+
+[package.dependencies]
+six = ">=1.12.0"
+
+[package.extras]
+astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
+test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
+
+[[package]]
+name = "async-lru"
+version = "2.0.4"
+description = "Simple LRU cache for asyncio"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"},
+ {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"},
+]
+
+[package.dependencies]
+typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""}
+
+[[package]]
+name = "async-timeout"
+version = "4.0.3"
+description = "Timeout context manager for asyncio programs"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
+ {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
+]
+
+[[package]]
+name = "attrs"
+version = "23.1.0"
+description = "Classes Without Boilerplate"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"},
+ {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
+]
+
+[package.extras]
+cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
+dev = ["attrs[docs,tests]", "pre-commit"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
+tests = ["attrs[tests-no-zope]", "zope-interface"]
+tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+
+[[package]]
+name = "babel"
+version = "2.13.1"
+description = "Internationalization utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"},
+ {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"},
+]
+
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "bandit"
+version = "1.7.3"
+description = "Security oriented static analyser for python code."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "bandit-1.7.3-py3-none-any.whl", hash = "sha256:3ce9b4e6a4f7f41aa966c9543e635dd35e52a793a47e746f0c55c7ecfc69d7e8"},
+ {file = "bandit-1.7.3.tar.gz", hash = "sha256:58772ca951bf1129dda8a280d351547de832720bf7b5c29fac3103927980b8a6"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""}
+GitPython = ">=1.0.1"
+PyYAML = ">=5.3.1"
+stevedore = ">=1.20.0"
+
+[package.extras]
+test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"]
+toml = ["toml"]
+yaml = ["PyYAML"]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.12.2"
+description = "Screen-scraping library"
+optional = false
+python-versions = ">=3.6.0"
+files = [
+ {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"},
+ {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"},
+]
+
+[package.dependencies]
+soupsieve = ">1.2"
+
+[package.extras]
+html5lib = ["html5lib"]
+lxml = ["lxml"]
+
+[[package]]
+name = "black"
+version = "23.11.0"
+description = "The uncompromising code formatter."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"},
+ {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"},
+ {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"},
+ {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"},
+ {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"},
+ {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"},
+ {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"},
+ {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"},
+ {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"},
+ {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"},
+ {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"},
+ {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"},
+ {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"},
+ {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"},
+ {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"},
+ {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"},
+ {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"},
+ {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"},
+]
+
+[package.dependencies]
+click = ">=8.0.0"
+ipython = {version = ">=7.8.0", optional = true, markers = "extra == \"jupyter\""}
+mypy-extensions = ">=0.4.3"
+packaging = ">=22.0"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+tokenize-rt = {version = ">=3.2.0", optional = true, markers = "extra == \"jupyter\""}
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "bleach"
+version = "6.1.0"
+description = "An easy safelist-based HTML-sanitizing tool."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"},
+ {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"},
+]
+
+[package.dependencies]
+six = ">=1.9.0"
+webencodings = "*"
+
+[package.extras]
+css = ["tinycss2 (>=1.1.0,<1.3)"]
+
+[[package]]
+name = "blis"
+version = "0.7.11"
+description = "The Blis BLAS-like linear algebra library, as a self-contained C-extension."
+optional = false
+python-versions = "*"
+files = [
+ {file = "blis-0.7.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd5fba34c5775e4c440d80e4dea8acb40e2d3855b546e07c4e21fad8f972404c"},
+ {file = "blis-0.7.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:31273d9086cab9c56986d478e3ed6da6752fa4cdd0f7b5e8e5db30827912d90d"},
+ {file = "blis-0.7.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06883f83d4c8de8264154f7c4a420b4af323050ed07398c1ff201c34c25c0d2"},
+ {file = "blis-0.7.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee493683e3043650d4413d531e79e580d28a3c7bdd184f1b9cfa565497bda1e7"},
+ {file = "blis-0.7.11-cp310-cp310-win_amd64.whl", hash = "sha256:a73945a9d635eea528bccfdfcaa59dd35bd5f82a4a40d5ca31f08f507f3a6f81"},
+ {file = "blis-0.7.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b68df4d01d62f9adaef3dad6f96418787265a6878891fc4e0fabafd6d02afba"},
+ {file = "blis-0.7.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:162e60d941a8151418d558a94ee5547cb1bbeed9f26b3b6f89ec9243f111a201"},
+ {file = "blis-0.7.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:686a7d0111d5ba727cd62f374748952fd6eb74701b18177f525b16209a253c01"},
+ {file = "blis-0.7.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0421d6e44cda202b113a34761f9a062b53f8c2ae8e4ec8325a76e709fca93b6e"},
+ {file = "blis-0.7.11-cp311-cp311-win_amd64.whl", hash = "sha256:0dc9dcb3843045b6b8b00432409fd5ee96b8344a324e031bfec7303838c41a1a"},
+ {file = "blis-0.7.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dadf8713ea51d91444d14ad4104a5493fa7ecc401bbb5f4a203ff6448fadb113"},
+ {file = "blis-0.7.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5bcdaf370f03adaf4171d6405a89fa66cb3c09399d75fc02e1230a78cd2759e4"},
+ {file = "blis-0.7.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7de19264b1d49a178bf8035406d0ae77831f3bfaa3ce02942964a81a202abb03"},
+ {file = "blis-0.7.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea55c6a4a60fcbf6a0fdce40df6e254451ce636988323a34b9c94b583fc11e5"},
+ {file = "blis-0.7.11-cp312-cp312-win_amd64.whl", hash = "sha256:5a305dbfc96d202a20d0edd6edf74a406b7e1404f4fa4397d24c68454e60b1b4"},
+ {file = "blis-0.7.11-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:68544a1cbc3564db7ba54d2bf8988356b8c7acd025966e8e9313561b19f0fe2e"},
+ {file = "blis-0.7.11-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:075431b13b9dd7b411894d4afbd4212acf4d0f56c5a20628f4b34902e90225f1"},
+ {file = "blis-0.7.11-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:324fdf62af9075831aa62b51481960e8465674b7723f977684e32af708bb7448"},
+ {file = "blis-0.7.11-cp36-cp36m-win_amd64.whl", hash = "sha256:afebdb02d2dcf9059f23ce1244585d3ce7e95c02a77fd45a500e4a55b7b23583"},
+ {file = "blis-0.7.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2e62cd14b20e960f21547fee01f3a0b2ac201034d819842865a667c969c355d1"},
+ {file = "blis-0.7.11-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89b01c05a5754edc0b9a3b69be52cbee03f645b2ec69651d12216ea83b8122f0"},
+ {file = "blis-0.7.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfee5ec52ba1e9002311d9191f7129d7b0ecdff211e88536fb24c865d102b50d"},
+ {file = "blis-0.7.11-cp37-cp37m-win_amd64.whl", hash = "sha256:844b6377e3e7f3a2e92e7333cc644095386548ad5a027fdc150122703c009956"},
+ {file = "blis-0.7.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6df00c24128e323174cde5d80ebe3657df39615322098ce06613845433057614"},
+ {file = "blis-0.7.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:809d1da1331108935bf06e22f3cf07ef73a41a572ecd81575bdedb67defe3465"},
+ {file = "blis-0.7.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bfabd5272bbbe504702b8dfe30093653d278057656126716ff500d9c184b35a6"},
+ {file = "blis-0.7.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca684f5c2f05269f17aefe7812360286e9a1cee3afb96d416485efd825dbcf19"},
+ {file = "blis-0.7.11-cp38-cp38-win_amd64.whl", hash = "sha256:688a8b21d2521c2124ee8dfcbaf2c385981ccc27e313e052113d5db113e27d3b"},
+ {file = "blis-0.7.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2ff7abd784033836b284ff9f4d0d7cb0737b7684daebb01a4c9fe145ffa5a31e"},
+ {file = "blis-0.7.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9caffcd14795bfe52add95a0dd8426d44e737b55fcb69e2b797816f4da0b1d2"},
+ {file = "blis-0.7.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fb36989ed61233cfd48915896802ee6d3d87882190000f8cfe0cf4a3819f9a8"},
+ {file = "blis-0.7.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ea09f961871f880d5dc622dce6c370e4859559f0ead897ae9b20ddafd6b07a2"},
+ {file = "blis-0.7.11-cp39-cp39-win_amd64.whl", hash = "sha256:5bb38adabbb22f69f22c74bad025a010ae3b14de711bf5c715353980869d491d"},
+ {file = "blis-0.7.11.tar.gz", hash = "sha256:cec6d48f75f7ac328ae1b6fbb372dde8c8a57c89559172277f66e01ff08d4d42"},
+]
+
+[package.dependencies]
+numpy = {version = ">=1.19.0", markers = "python_version >= \"3.9\""}
+
+[[package]]
+name = "boto3"
+version = "1.23.3"
+description = "The AWS SDK for Python"
+optional = false
+python-versions = ">= 3.6"
+files = [
+ {file = "boto3-1.23.3-py3-none-any.whl", hash = "sha256:5f27eec9b0a43edbfb3ed5e748837b10219a972f0728fecd78f84ec3629f2092"},
+ {file = "boto3-1.23.3.tar.gz", hash = "sha256:9d5ce5ae3ddd4429cf752efe7c9f39691db6c85b6b5f1cfc8861b8f23b72b67a"},
+]
+
+[package.dependencies]
+botocore = ">=1.26.3,<1.27.0"
+jmespath = ">=0.7.1,<2.0.0"
+s3transfer = ">=0.5.0,<0.6.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.26.10"
+description = "Low-level, data-driven core of boto 3."
+optional = false
+python-versions = ">= 3.6"
+files = [
+ {file = "botocore-1.26.10-py3-none-any.whl", hash = "sha256:8a4a984bf901ccefe40037da11ba2abd1ddbcb3b490a492b7f218509c99fc12f"},
+ {file = "botocore-1.26.10.tar.gz", hash = "sha256:5df2cf7ebe34377470172bd0bbc582cf98c5cbd02da0909a14e9e2885ab3ae9c"},
+]
+
+[package.dependencies]
+jmespath = ">=0.7.1,<2.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = ">=1.25.4,<1.27"
+
+[package.extras]
+crt = ["awscrt (==0.13.8)"]
+
+[[package]]
+name = "brotli"
+version = "1.1.0"
+description = "Python bindings for the Brotli compression library"
+optional = false
+python-versions = "*"
+files = [
+ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"},
+ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"},
+ {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"},
+ {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"},
+ {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"},
+ {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"},
+ {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"},
+ {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"},
+ {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"},
+ {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"},
+ {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"},
+ {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"},
+ {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"},
+ {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"},
+ {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"},
+ {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"},
+ {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"},
+ {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"},
+ {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"},
+ {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"},
+ {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"},
+ {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"},
+ {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"},
+ {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"},
+ {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"},
+ {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"},
+ {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"},
+]
+
+[[package]]
+name = "brotlicffi"
+version = "1.1.0.0"
+description = "Python CFFI bindings to the Brotli library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"},
+ {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"},
+]
+
+[package.dependencies]
+cffi = ">=1.0.0"
+
+[[package]]
+name = "catalogue"
+version = "2.0.10"
+description = "Super lightweight function registries for your library"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "catalogue-2.0.10-py3-none-any.whl", hash = "sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f"},
+ {file = "catalogue-2.0.10.tar.gz", hash = "sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15"},
+]
+
+[[package]]
+name = "certifi"
+version = "2023.11.17"
+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"},
+]
+
+[[package]]
+name = "cffi"
+version = "1.16.0"
+description = "Foreign Function Interface for Python calling C code."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
+ {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
+ {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
+ {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
+ {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
+ {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
+ {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
+ {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
+ {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
+ {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
+ {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
+ {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
+ {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
+ {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
+ {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
+]
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "cfgv"
+version = "3.4.0"
+description = "Validate configuration and produce human readable error messages."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"},
+ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.3.2"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
+ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
+]
+
+[[package]]
+name = "click"
+version = "8.1.7"
+description = "Composable command line interface toolkit"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "cloudpathlib"
+version = "0.16.0"
+description = "pathlib-style classes for cloud storage services."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "cloudpathlib-0.16.0-py3-none-any.whl", hash = "sha256:f46267556bf91f03db52b5df7a152548596a15aabca1c8731ef32b0b25a1a6a3"},
+ {file = "cloudpathlib-0.16.0.tar.gz", hash = "sha256:cdfcd35d46d529587d744154a0bdf962aca953b725c8784cd2ec478354ea63a3"},
+]
+
+[package.dependencies]
+typing_extensions = {version = ">4", markers = "python_version < \"3.11\""}
+
+[package.extras]
+all = ["cloudpathlib[azure]", "cloudpathlib[gs]", "cloudpathlib[s3]"]
+azure = ["azure-storage-blob (>=12)"]
+gs = ["google-cloud-storage"]
+s3 = ["boto3"]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "comm"
+version = "0.2.0"
+description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "comm-0.2.0-py3-none-any.whl", hash = "sha256:2da8d9ebb8dd7bfc247adaff99f24dce705638a8042b85cb995066793e391001"},
+ {file = "comm-0.2.0.tar.gz", hash = "sha256:a517ea2ca28931c7007a7a99c562a0fa5883cfb48963140cf642c41c948498be"},
+]
+
+[package.dependencies]
+traitlets = ">=4"
+
+[package.extras]
+test = ["pytest"]
+
+[[package]]
+name = "confection"
+version = "0.1.4"
+description = "The sweetest config system for Python"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "confection-0.1.4-py3-none-any.whl", hash = "sha256:a658818d004939069c3e2b3db74a2cb9d956a5e61a1c9ad61788e0ee09a7090f"},
+ {file = "confection-0.1.4.tar.gz", hash = "sha256:e80f22fd008b5231a2e8852fac6de9e28f2276a04031d0536cff74fe4a990c8f"},
+]
+
+[package.dependencies]
+pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
+srsly = ">=2.4.0,<3.0.0"
+
+[[package]]
+name = "coverage"
+version = "7.3.2"
+description = "Code coverage measurement for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"},
+ {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"},
+ {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"},
+ {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"},
+ {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"},
+ {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"},
+ {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"},
+ {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"},
+ {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"},
+ {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"},
+ {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"},
+ {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"},
+ {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"},
+ {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"},
+ {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"},
+ {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"},
+ {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"},
+ {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"},
+ {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"},
+ {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"},
+ {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"},
+ {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"},
+]
+
+[package.dependencies]
+tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""}
+
+[package.extras]
+toml = ["tomli"]
+
+[[package]]
+name = "cymem"
+version = "2.0.8"
+description = "Manage calls to calloc/free through Cython"
+optional = false
+python-versions = "*"
+files = [
+ {file = "cymem-2.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77b5d3a73c41a394efd5913ab7e48512054cd2dabb9582d489535456641c7666"},
+ {file = "cymem-2.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bd33da892fb560ba85ea14b1528c381ff474048e861accc3366c8b491035a378"},
+ {file = "cymem-2.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29a551eda23eebd6d076b855f77a5ed14a1d1cae5946f7b3cb5de502e21b39b0"},
+ {file = "cymem-2.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8260445652ae5ab19fff6851f32969a7b774f309162e83367dd0f69aac5dbf7"},
+ {file = "cymem-2.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:a63a2bef4c7e0aec7c9908bca0a503bf91ac7ec18d41dd50dc7dff5d994e4387"},
+ {file = "cymem-2.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b84b780d52cb2db53d4494fe0083c4c5ee1f7b5380ceaea5b824569009ee5bd"},
+ {file = "cymem-2.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d5f83dc3cb5a39f0e32653cceb7c8ce0183d82f1162ca418356f4a8ed9e203e"},
+ {file = "cymem-2.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ac218cf8a43a761dc6b2f14ae8d183aca2bbb85b60fe316fd6613693b2a7914"},
+ {file = "cymem-2.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c993589d1811ec665d37437d5677b8757f53afadd927bf8516ac8ce2d3a50c"},
+ {file = "cymem-2.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:ab3cf20e0eabee9b6025ceb0245dadd534a96710d43fb7a91a35e0b9e672ee44"},
+ {file = "cymem-2.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cb51fddf1b920abb1f2742d1d385469bc7b4b8083e1cfa60255e19bc0900ccb5"},
+ {file = "cymem-2.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9235957f8c6bc2574a6a506a1687164ad629d0b4451ded89d49ebfc61b52660c"},
+ {file = "cymem-2.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2cc38930ff5409f8d61f69a01e39ecb185c175785a1c9bec13bcd3ac8a614ba"},
+ {file = "cymem-2.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf49e3ea2c441f7b7848d5c61b50803e8cbd49541a70bb41ad22fce76d87603"},
+ {file = "cymem-2.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:ecd12e3bacf3eed5486e4cd8ede3c12da66ee0e0a9d0ae046962bc2bb503acef"},
+ {file = "cymem-2.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:167d8019db3b40308aabf8183fd3fbbc256323b645e0cbf2035301058c439cd0"},
+ {file = "cymem-2.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cd2c2791c8f6b52f269a756ba7463f75bf7265785388a2592623b84bb02bf8"},
+ {file = "cymem-2.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6204f0a3307bf45d109bf698ba37997ce765f21e359284328e4306c7500fcde8"},
+ {file = "cymem-2.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9c05db55ea338648f8e5f51dd596568c7f62c5ae32bf3fa5b1460117910ebae"},
+ {file = "cymem-2.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ce641f7ba0489bd1b42a4335a36f38c8507daffc29a512681afaba94a0257d2"},
+ {file = "cymem-2.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6b83a5972a64f62796118da79dfeed71f4e1e770b2b7455e889c909504c2358"},
+ {file = "cymem-2.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:ada6eb022e4a0f4f11e6356a5d804ceaa917174e6cf33c0b3e371dbea4dd2601"},
+ {file = "cymem-2.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e593cd57e2e19eb50c7ddaf7e230b73c890227834425b9dadcd4a86834ef2ab"},
+ {file = "cymem-2.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d513f0d5c6d76facdc605e42aa42c8d50bb7dedca3144ec2b47526381764deb0"},
+ {file = "cymem-2.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e370dd54359101b125bfb191aca0542718077b4edb90ccccba1a28116640fed"},
+ {file = "cymem-2.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84f8c58cde71b8fc7024883031a4eec66c0a9a4d36b7850c3065493652695156"},
+ {file = "cymem-2.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:6a6edddb30dd000a27987fcbc6f3c23b7fe1d74f539656952cb086288c0e4e29"},
+ {file = "cymem-2.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b896c83c08dadafe8102a521f83b7369a9c5cc3e7768eca35875764f56703f4c"},
+ {file = "cymem-2.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f8f2bfee34f6f38b206997727d29976666c89843c071a968add7d61a1e8024"},
+ {file = "cymem-2.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7372e2820fa66fd47d3b135f3eb574ab015f90780c3a21cfd4809b54f23a4723"},
+ {file = "cymem-2.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4e57bee56d35b90fc2cba93e75b2ce76feaca05251936e28a96cf812a1f5dda"},
+ {file = "cymem-2.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ceeab3ce2a92c7f3b2d90854efb32cb203e78cb24c836a5a9a2cac221930303b"},
+ {file = "cymem-2.0.8.tar.gz", hash = "sha256:8fb09d222e21dcf1c7e907dc85cf74501d4cea6c4ed4ac6c9e016f98fb59cbbf"},
+]
+
+[[package]]
+name = "darglint"
+version = "1.8.1"
+description = "A utility for ensuring Google-style docstrings stay up to date with the source code."
+optional = false
+python-versions = ">=3.6,<4.0"
+files = [
+ {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"},
+ {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"},
+]
+
+[[package]]
+name = "datasets"
+version = "2.15.0"
+description = "HuggingFace community-driven open-source library of datasets"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "datasets-2.15.0-py3-none-any.whl", hash = "sha256:6d658d23811393dfc982d026082e1650bdaaae28f6a86e651966cb072229a228"},
+ {file = "datasets-2.15.0.tar.gz", hash = "sha256:a26d059370bd7503bd60e9337977199a13117a83f72fb61eda7e66f0c4d50b2b"},
+]
+
+[package.dependencies]
+aiohttp = "*"
+dill = ">=0.3.0,<0.3.8"
+fsspec = {version = ">=2023.1.0,<=2023.10.0", extras = ["http"]}
+huggingface-hub = ">=0.18.0"
+multiprocess = "*"
+numpy = ">=1.17"
+packaging = "*"
+pandas = "*"
+pyarrow = ">=8.0.0"
+pyarrow-hotfix = "*"
+pyyaml = ">=5.1"
+requests = ">=2.19.0"
+tqdm = ">=4.62.1"
+xxhash = "*"
+
+[package.extras]
+apache-beam = ["apache-beam (>=2.26.0,<2.44.0)"]
+audio = ["librosa", "soundfile (>=0.12.1)"]
+benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"]
+dev = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "black (>=23.1,<24.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "pyyaml (>=5.3.1)", "rarfile (>=4.0)", "ruff (>=0.0.241)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "typing-extensions (>=4.6.1)", "zstandard"]
+docs = ["s3fs", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow-macos", "torch", "transformers"]
+jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"]
+metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"]
+quality = ["black (>=23.1,<24.0)", "pyyaml (>=5.3.1)", "ruff (>=0.0.241)"]
+s3 = ["s3fs"]
+tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow-macos"]
+tensorflow-gpu = ["tensorflow-gpu (>=2.2.0,!=2.6.0,!=2.6.1)"]
+tests = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "typing-extensions (>=4.6.1)", "zstandard"]
+torch = ["torch"]
+vision = ["Pillow (>=6.2.1)"]
+
+[[package]]
+name = "debugpy"
+version = "1.8.0"
+description = "An implementation of the Debug Adapter Protocol for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"},
+ {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"},
+ {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"},
+ {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"},
+ {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"},
+ {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"},
+ {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"},
+ {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"},
+ {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"},
+ {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"},
+ {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"},
+ {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"},
+ {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"},
+ {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"},
+ {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"},
+ {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"},
+ {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"},
+ {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"},
+]
+
+[[package]]
+name = "decopatch"
+version = "1.4.10"
+description = "Create decorators easily in python."
+optional = false
+python-versions = "*"
+files = [
+ {file = "decopatch-1.4.10-py2.py3-none-any.whl", hash = "sha256:e151f7f93de2b1b3fd3f3272dcc7cefd1a69f68ec1c2d8e288ecd9deb36dc5f7"},
+ {file = "decopatch-1.4.10.tar.gz", hash = "sha256:957f49c93f4150182c23f8fb51d13bb3213e0f17a79e09c8cca7057598b55720"},
+]
+
+[package.dependencies]
+makefun = ">=1.5.0"
+
+[[package]]
+name = "decorator"
+version = "5.1.1"
+description = "Decorators for Humans"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
+]
+
+[[package]]
+name = "deepdiff"
+version = "6.7.1"
+description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "deepdiff-6.7.1-py3-none-any.whl", hash = "sha256:58396bb7a863cbb4ed5193f548c56f18218060362311aa1dc36397b2f25108bd"},
+ {file = "deepdiff-6.7.1.tar.gz", hash = "sha256:b367e6fa6caac1c9f500adc79ada1b5b1242c50d5f716a1a4362030197847d30"},
+]
+
+[package.dependencies]
+ordered-set = ">=4.0.2,<4.2.0"
+
+[package.extras]
+cli = ["click (==8.1.3)", "pyyaml (==6.0.1)"]
+optimize = ["orjson"]
+
+[[package]]
+name = "defusedxml"
+version = "0.7.1"
+description = "XML bomb protection for Python stdlib modules"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
+ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
+]
+
+[[package]]
+name = "dill"
+version = "0.3.7"
+description = "serialize all of Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"},
+ {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"},
+]
+
+[package.extras]
+graph = ["objgraph (>=1.7.2)"]
+
+[[package]]
+name = "distlib"
+version = "0.3.7"
+description = "Distribution utilities"
+optional = false
+python-versions = "*"
+files = [
+ {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"},
+ {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
+]
+
+[[package]]
+name = "dnspython"
+version = "2.4.2"
+description = "DNS toolkit"
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"},
+ {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"},
+]
+
+[package.extras]
+dnssec = ["cryptography (>=2.6,<42.0)"]
+doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"]
+doq = ["aioquic (>=0.9.20)"]
+idna = ["idna (>=2.1,<4.0)"]
+trio = ["trio (>=0.14,<0.23)"]
+wmi = ["wmi (>=1.5.1,<2.0.0)"]
+
+[[package]]
+name = "docutils"
+version = "0.20.1"
+description = "Docutils -- Python Documentation Utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"},
+ {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
+]
+
+[[package]]
+name = "email-validator"
+version = "2.1.0.post1"
+description = "A robust email address syntax and deliverability validation library."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "email_validator-2.1.0.post1-py3-none-any.whl", hash = "sha256:c973053efbeddfef924dc0bd93f6e77a1ea7ee0fce935aea7103c7a3d6d2d637"},
+ {file = "email_validator-2.1.0.post1.tar.gz", hash = "sha256:a4b0bd1cf55f073b924258d19321b1f3aa74b4b5a71a42c305575dba920e1a44"},
+]
+
+[package.dependencies]
+dnspython = ">=2.0.0"
+idna = ">=2.0.0"
+
+[[package]]
+name = "emma-common"
+version = "2.3.1"
+description = "Common modules which are used a lot throughout EMMA repositories"
+optional = false
+python-versions = ">=3.9,<3.11"
+files = []
+develop = false
+
+[package.dependencies]
+fastapi = {version = ">=0.88.0", extras = ["all"]}
+gunicorn = ">=20.1.0"
+httpx = ">=0.23.1"
+huggingface-hub = ">=0.19.4"
+loguru = ">=0.6.0"
+numpy = ">1.22"
+orjson = ">=3.8.3"
+pydantic = {version = ">=1.10.0,<2", extras = ["dotenv"]}
+rich = ">=12.6.0"
+torch = ">=1.10,!=1.13.0,<2"
+
+[package.source]
+type = "git"
+url = "https://github.com/emma-heriot-watt/common.git"
+reference = "HEAD"
+resolved_reference = "c52a5b573306c92f42fd46f70abc00506a58b6f8"
+
+[[package]]
+name = "en-core-web-sm"
+version = "3.7.1"
+description = "English pipeline optimized for CPU. Components: tok2vec, tagger, parser, senter, ner, attribute_ruler, lemmatizer."
+optional = false
+python-versions = "*"
+files = [
+ {file = "en_core_web_sm-3.7.1-py3-none-any.whl", hash = "sha256:86cc141f63942d4b2c5fcee06630fd6f904788d2f0ab005cce45aadb8fb73889"},
+]
+
+[package.dependencies]
+spacy = ">=3.7.2,<3.8.0"
+
+[package.source]
+type = "url"
+url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl"
+
+[[package]]
+name = "eradicate"
+version = "2.3.0"
+description = "Removes commented-out code."
+optional = false
+python-versions = "*"
+files = [
+ {file = "eradicate-2.3.0-py3-none-any.whl", hash = "sha256:2b29b3dd27171f209e4ddd8204b70c02f0682ae95eecb353f10e8d72b149c63e"},
+ {file = "eradicate-2.3.0.tar.gz", hash = "sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37"},
+]
+
+[[package]]
+name = "exceptiongroup"
+version = "1.2.0"
+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"},
+]
+
+[package.extras]
+test = ["pytest (>=6)"]
+
+[[package]]
+name = "executing"
+version = "2.0.1"
+description = "Get the currently executing AST node of a frame, and other information"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
+ {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
+]
+
+[package.extras]
+tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
+
+[[package]]
+name = "faiss-cpu"
+version = "1.7.4"
+description = "A library for efficient similarity search and clustering of dense vectors."
+optional = false
+python-versions = "*"
+files = [
+ {file = "faiss-cpu-1.7.4.tar.gz", hash = "sha256:265dc31b0c079bf4433303bf6010f73922490adff9188b915e2d3f5e9c82dd0a"},
+ {file = "faiss_cpu-1.7.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50d4ebe7f1869483751c558558504f818980292a9b55be36f9a1ee1009d9a686"},
+ {file = "faiss_cpu-1.7.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b1db7fae7bd8312aeedd0c41536bcd19a6e297229e1dce526bde3a73ab8c0b5"},
+ {file = "faiss_cpu-1.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17b7fa7194a228a84929d9e6619d0e7dbf00cc0f717e3462253766f5e3d07de8"},
+ {file = "faiss_cpu-1.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dca531952a2e3eac56f479ff22951af4715ee44788a3fe991d208d766d3f95f3"},
+ {file = "faiss_cpu-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:7173081d605e74766f950f2e3d6568a6f00c53f32fd9318063e96728c6c62821"},
+ {file = "faiss_cpu-1.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0bbd6f55d7940cc0692f79e32a58c66106c3c950cee2341b05722de9da23ea3"},
+ {file = "faiss_cpu-1.7.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13c14280376100f143767d0efe47dcb32618f69e62bbd3ea5cd38c2e1755926"},
+ {file = "faiss_cpu-1.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c521cb8462f3b00c0c7dfb11caff492bb67816528b947be28a3b76373952c41d"},
+ {file = "faiss_cpu-1.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afdd9fe1141117fed85961fd36ee627c83fc3b9fd47bafb52d3c849cc2f088b7"},
+ {file = "faiss_cpu-1.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:2ff7f57889ea31d945e3b87275be3cad5d55b6261a4e3f51c7aba304d76b81fb"},
+ {file = "faiss_cpu-1.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:eeaf92f27d76249fb53c1adafe617b0f217ab65837acf7b4ec818511caf6e3d8"},
+ {file = "faiss_cpu-1.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:102b1bd763e9b0c281ac312590af3eaf1c8b663ccbc1145821fe6a9f92b8eaaf"},
+ {file = "faiss_cpu-1.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5512da6707c967310c46ff712b00418b7ae28e93cb609726136e826e9f2f14fa"},
+ {file = "faiss_cpu-1.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0c2e5b9d8c28c99f990e87379d5bbcc6c914da91ebb4250166864fd12db5755b"},
+ {file = "faiss_cpu-1.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:43f67f325393145d360171cd98786fcea6120ce50397319afd3bb78be409fb8a"},
+ {file = "faiss_cpu-1.7.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6a4e4af194b8fce74c4b770cad67ad1dd1b4673677fc169723e4c50ba5bd97a8"},
+ {file = "faiss_cpu-1.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31bfb7b9cffc36897ae02a983e04c09fe3b8c053110a287134751a115334a1df"},
+ {file = "faiss_cpu-1.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52d7de96abef2340c0d373c1f5cbc78026a3cebb0f8f3a5920920a00210ead1f"},
+ {file = "faiss_cpu-1.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:699feef85b23c2c729d794e26ca69bebc0bee920d676028c06fd0e0becc15c7e"},
+ {file = "faiss_cpu-1.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:559a0133f5ed44422acb09ee1ac0acffd90c6666d1bc0d671c18f6e93ad603e2"},
+ {file = "faiss_cpu-1.7.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1d71539fe3dc0f1bed41ef954ca701678776f231046bf0ca22ccea5cf5bef6"},
+ {file = "faiss_cpu-1.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12d45e0157024eb3249842163162983a1ac8b458f1a8b17bbf86f01be4585a99"},
+ {file = "faiss_cpu-1.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f0eab359e066d32c874f51a7d4bf6440edeec068b7fe47e6d803c73605a8b4c"},
+ {file = "faiss_cpu-1.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:98459ceeeb735b9df1a5b94572106ffe0a6ce740eb7e4626715dd218657bb4dc"},
+]
+
+[[package]]
+name = "fastapi"
+version = "0.99.1"
+description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "fastapi-0.99.1-py3-none-any.whl", hash = "sha256:976df7bab51ac7beda9f68c4513b8c4490b5c1135c72aafd0a5ee4023ec5282e"},
+ {file = "fastapi-0.99.1.tar.gz", hash = "sha256:ac78f717cd80d657bd183f94d33b9bda84aa376a46a9dab513586b8eef1dc6fc"},
+]
+
+[package.dependencies]
+email-validator = {version = ">=1.1.1", optional = true, markers = "extra == \"all\""}
+httpx = {version = ">=0.23.0", optional = true, markers = "extra == \"all\""}
+itsdangerous = {version = ">=1.1.0", optional = true, markers = "extra == \"all\""}
+jinja2 = {version = ">=2.11.2", optional = true, markers = "extra == \"all\""}
+orjson = {version = ">=3.2.1", optional = true, markers = "extra == \"all\""}
+pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0"
+python-multipart = {version = ">=0.0.5", optional = true, markers = "extra == \"all\""}
+pyyaml = {version = ">=5.3.1", optional = true, markers = "extra == \"all\""}
+starlette = ">=0.27.0,<0.28.0"
+typing-extensions = ">=4.5.0"
+ujson = {version = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0", optional = true, markers = "extra == \"all\""}
+uvicorn = {version = ">=0.12.0", extras = ["standard"], optional = true, markers = "extra == \"all\""}
+
+[package.extras]
+all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
+
+[[package]]
+name = "fastjsonschema"
+version = "2.19.0"
+description = "Fastest Python implementation of JSON schema"
+optional = false
+python-versions = "*"
+files = [
+ {file = "fastjsonschema-2.19.0-py3-none-any.whl", hash = "sha256:b9fd1a2dd6971dbc7fee280a95bd199ae0dd9ce22beb91cc75e9c1c528a5170e"},
+ {file = "fastjsonschema-2.19.0.tar.gz", hash = "sha256:e25df6647e1bc4a26070b700897b07b542ec898dd4f1f6ea013e7f6a88417225"},
+]
+
+[package.extras]
+devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"]
+
+[[package]]
+name = "filelock"
+version = "3.13.1"
+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"},
+]
+
+[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)"]
+typing = ["typing-extensions (>=4.8)"]
+
+[[package]]
+name = "flake8"
+version = "6.1.0"
+description = "the modular source code checker: pep8 pyflakes and co"
+optional = false
+python-versions = ">=3.8.1"
+files = [
+ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"},
+ {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"},
+]
+
+[package.dependencies]
+mccabe = ">=0.7.0,<0.8.0"
+pycodestyle = ">=2.11.0,<2.12.0"
+pyflakes = ">=3.1.0,<3.2.0"
+
+[[package]]
+name = "flake8-bandit"
+version = "4.1.1"
+description = "Automated security testing with bandit and flake8."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "flake8_bandit-4.1.1-py3-none-any.whl", hash = "sha256:4c8a53eb48f23d4ef1e59293657181a3c989d0077c9952717e98a0eace43e06d"},
+ {file = "flake8_bandit-4.1.1.tar.gz", hash = "sha256:068e09287189cbfd7f986e92605adea2067630b75380c6b5733dab7d87f9a84e"},
+]
+
+[package.dependencies]
+bandit = ">=1.7.3"
+flake8 = ">=5.0.0"
+
+[[package]]
+name = "flake8-broken-line"
+version = "1.0.0"
+description = "Flake8 plugin to forbid backslashes for line breaks"
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "flake8_broken_line-1.0.0-py3-none-any.whl", hash = "sha256:96c964336024a5030dc536a9f6fb02aa679e2d2a6b35b80a558b5136c35832a9"},
+ {file = "flake8_broken_line-1.0.0.tar.gz", hash = "sha256:e2c6a17f8d9a129e99c1320fce89b33843e2963871025c4c2bb7b8b8d8732a85"},
+]
+
+[package.dependencies]
+flake8 = ">5"
+
+[[package]]
+name = "flake8-bugbear"
+version = "23.11.28"
+description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle."
+optional = false
+python-versions = ">=3.8.1"
+files = [
+ {file = "flake8-bugbear-23.11.28.tar.gz", hash = "sha256:0ba6c44eaa0e4782da94c5c2607159a0e73569369246cd179cc143a0e16b78ba"},
+ {file = "flake8_bugbear-23.11.28-py3-none-any.whl", hash = "sha256:8d0f351d954fd860851710cd8b5b28742b2339c0e58848b103418dd9cddb9aa4"},
+]
+
+[package.dependencies]
+attrs = ">=19.2.0"
+flake8 = ">=6.0.0"
+
+[package.extras]
+dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", "tox"]
+
+[[package]]
+name = "flake8-commas"
+version = "2.1.0"
+description = "Flake8 lint for trailing commas."
+optional = false
+python-versions = "*"
+files = [
+ {file = "flake8-commas-2.1.0.tar.gz", hash = "sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263"},
+ {file = "flake8_commas-2.1.0-py2.py3-none-any.whl", hash = "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"},
+]
+
+[package.dependencies]
+flake8 = ">=2"
+
+[[package]]
+name = "flake8-comprehensions"
+version = "3.14.0"
+description = "A flake8 plugin to help you write better list/set/dict comprehensions."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"},
+ {file = "flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"},
+]
+
+[package.dependencies]
+flake8 = ">=3.0,<3.2.0 || >3.2.0"
+
+[[package]]
+name = "flake8-debugger"
+version = "4.1.2"
+description = "ipdb/pdb statement checker plugin for flake8"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "flake8-debugger-4.1.2.tar.gz", hash = "sha256:52b002560941e36d9bf806fca2523dc7fb8560a295d5f1a6e15ac2ded7a73840"},
+ {file = "flake8_debugger-4.1.2-py3-none-any.whl", hash = "sha256:0a5e55aeddcc81da631ad9c8c366e7318998f83ff00985a49e6b3ecf61e571bf"},
+]
+
+[package.dependencies]
+flake8 = ">=3.0"
+pycodestyle = "*"
+
+[[package]]
+name = "flake8-docstrings"
+version = "1.7.0"
+description = "Extension for flake8 which uses pydocstyle to check docstrings"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"},
+ {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"},
+]
+
+[package.dependencies]
+flake8 = ">=3"
+pydocstyle = ">=2.1"
+
+[[package]]
+name = "flake8-eradicate"
+version = "1.5.0"
+description = "Flake8 plugin to find commented out code"
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "flake8_eradicate-1.5.0-py3-none-any.whl", hash = "sha256:18acc922ad7de623f5247c7d5595da068525ec5437dd53b22ec2259b96ce9d22"},
+ {file = "flake8_eradicate-1.5.0.tar.gz", hash = "sha256:aee636cb9ecb5594a7cd92d67ad73eb69909e5cc7bd81710cf9d00970f3983a6"},
+]
+
+[package.dependencies]
+attrs = "*"
+eradicate = ">=2.0,<3.0"
+flake8 = ">5"
+
+[[package]]
+name = "flake8-isort"
+version = "6.1.1"
+description = "flake8 plugin that integrates isort"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "flake8_isort-6.1.1-py3-none-any.whl", hash = "sha256:0fec4dc3a15aefbdbe4012e51d5531a2eb5fa8b981cdfbc882296a59b54ede12"},
+ {file = "flake8_isort-6.1.1.tar.gz", hash = "sha256:c1f82f3cf06a80c13e1d09bfae460e9666255d5c780b859f19f8318d420370b3"},
+]
+
+[package.dependencies]
+flake8 = "*"
+isort = ">=5.0.0,<6"
+
+[package.extras]
+test = ["pytest"]
+
+[[package]]
+name = "flake8-quotes"
+version = "3.3.2"
+description = "Flake8 lint for quotes."
+optional = false
+python-versions = "*"
+files = [
+ {file = "flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"},
+]
+
+[package.dependencies]
+flake8 = "*"
+
+[[package]]
+name = "flake8-rst-docstrings"
+version = "0.3.0"
+description = "Python docstring reStructuredText (RST) validator for flake8"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "flake8-rst-docstrings-0.3.0.tar.gz", hash = "sha256:d1ce22b4bd37b73cd86b8d980e946ef198cfcc18ed82fedb674ceaa2f8d1afa4"},
+ {file = "flake8_rst_docstrings-0.3.0-py3-none-any.whl", hash = "sha256:f8c3c6892ff402292651c31983a38da082480ad3ba253743de52989bdc84ca1c"},
+]
+
+[package.dependencies]
+flake8 = ">=3"
+pygments = "*"
+restructuredtext-lint = "*"
+
+[package.extras]
+develop = ["build", "twine"]
+
+[[package]]
+name = "flake8-string-format"
+version = "0.3.0"
+description = "string format checker, plugin for flake8"
+optional = false
+python-versions = "*"
+files = [
+ {file = "flake8-string-format-0.3.0.tar.gz", hash = "sha256:65f3da786a1461ef77fca3780b314edb2853c377f2e35069723348c8917deaa2"},
+ {file = "flake8_string_format-0.3.0-py2.py3-none-any.whl", hash = "sha256:812ff431f10576a74c89be4e85b8e075a705be39bc40c4b4278b5b13e2afa9af"},
+]
+
+[package.dependencies]
+flake8 = "*"
+
+[[package]]
+name = "fqdn"
+version = "1.5.1"
+description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers"
+optional = false
+python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4"
+files = [
+ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"},
+ {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"},
+]
+
+[[package]]
+name = "frozenlist"
+version = "1.4.0"
+description = "A list-like structure which implements collections.abc.MutableSequence"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"},
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"},
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"},
+ {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"},
+ {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"},
+ {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"},
+ {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"},
+ {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"},
+ {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"},
+ {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"},
+ {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"},
+]
+
+[[package]]
+name = "fsspec"
+version = "2023.10.0"
+description = "File-system specification"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "fsspec-2023.10.0-py3-none-any.whl", hash = "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529"},
+ {file = "fsspec-2023.10.0.tar.gz", hash = "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5"},
+]
+
+[package.dependencies]
+aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""}
+requests = {version = "*", optional = true, markers = "extra == \"http\""}
+
+[package.extras]
+abfs = ["adlfs"]
+adl = ["adlfs"]
+arrow = ["pyarrow (>=1)"]
+dask = ["dask", "distributed"]
+devel = ["pytest", "pytest-cov"]
+dropbox = ["dropbox", "dropboxdrivefs", "requests"]
+full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"]
+fuse = ["fusepy"]
+gcs = ["gcsfs"]
+git = ["pygit2"]
+github = ["requests"]
+gs = ["gcsfs"]
+gui = ["panel"]
+hdfs = ["pyarrow (>=1)"]
+http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"]
+libarchive = ["libarchive-c"]
+oci = ["ocifs"]
+s3 = ["s3fs"]
+sftp = ["paramiko"]
+smb = ["smbprotocol"]
+ssh = ["paramiko"]
+tqdm = ["tqdm"]
+
+[[package]]
+name = "gitdb"
+version = "4.0.11"
+description = "Git Object Database"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"},
+ {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"},
+]
+
+[package.dependencies]
+smmap = ">=3.0.1,<6"
+
+[[package]]
+name = "gitpython"
+version = "3.1.40"
+description = "GitPython is a Python library used to interact with Git repositories"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"},
+ {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"},
+]
+
+[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", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"]
+
+[[package]]
+name = "gunicorn"
+version = "21.2.0"
+description = "WSGI HTTP Server for UNIX"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"},
+ {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"},
+]
+
+[package.dependencies]
+packaging = "*"
+
+[package.extras]
+eventlet = ["eventlet (>=0.24.1)"]
+gevent = ["gevent (>=1.4.0)"]
+setproctitle = ["setproctitle"]
+tornado = ["tornado (>=0.2)"]
+
+[[package]]
+name = "h11"
+version = "0.14.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
+ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
+]
+
+[[package]]
+name = "httpcore"
+version = "1.0.2"
+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"},
+]
+
+[package.dependencies]
+certifi = "*"
+h11 = ">=0.13,<0.15"
+
+[package.extras]
+asyncio = ["anyio (>=4.0,<5.0)"]
+http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (==1.*)"]
+trio = ["trio (>=0.22.0,<0.23.0)"]
+
+[[package]]
+name = "httptools"
+version = "0.6.1"
+description = "A collection of framework independent HTTP protocol utils."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"},
+ {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"},
+ {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"},
+ {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"},
+ {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"},
+ {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"},
+ {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"},
+ {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"},
+ {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"},
+ {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"},
+ {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"},
+ {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"},
+ {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"},
+ {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"},
+ {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"},
+ {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"},
+ {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"},
+ {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"},
+ {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"},
+ {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"},
+ {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"},
+ {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"},
+ {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"},
+ {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"},
+ {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"},
+ {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"},
+ {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"},
+ {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"},
+ {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"},
+ {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"},
+ {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"},
+ {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"},
+ {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"},
+ {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"},
+ {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"},
+ {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"},
+]
+
+[package.extras]
+test = ["Cython (>=0.29.24,<0.30.0)"]
+
+[[package]]
+name = "httpx"
+version = "0.25.2"
+description = "The next generation HTTP client."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "httpx-0.25.2-py3-none-any.whl", hash = "sha256:a05d3d052d9b2dfce0e3896636467f8a5342fb2b902c819428e1ac65413ca118"},
+ {file = "httpx-0.25.2.tar.gz", hash = "sha256:8b8fcaa0c8ea7b05edd69a094e63a2094c4efcb48129fb757361bc423c0ad9e8"},
+]
+
+[package.dependencies]
+anyio = "*"
+certifi = "*"
+httpcore = "==1.*"
+idna = "*"
+sniffio = "*"
+
+[package.extras]
+brotli = ["brotli", "brotlicffi"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
+http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (==1.*)"]
+
+[[package]]
+name = "huggingface-hub"
+version = "0.19.4"
+description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "huggingface_hub-0.19.4-py3-none-any.whl", hash = "sha256:dba013f779da16f14b606492828f3760600a1e1801432d09fe1c33e50b825bb5"},
+ {file = "huggingface_hub-0.19.4.tar.gz", hash = "sha256:176a4fc355a851c17550e7619488f383189727eab209534d7cef2114dae77b22"},
+]
+
+[package.dependencies]
+filelock = "*"
+fsspec = ">=2023.5.0"
+packaging = ">=20.9"
+pyyaml = ">=5.1"
+requests = "*"
+tqdm = ">=4.42.1"
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
+cli = ["InquirerPy (==0.3.4)"]
+dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
+docs = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "hf-doc-builder", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)", "watchdog"]
+fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"]
+inference = ["aiohttp", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)"]
+quality = ["mypy (==1.5.1)", "ruff (>=0.1.3)"]
+tensorflow = ["graphviz", "pydot", "tensorflow"]
+testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"]
+torch = ["torch"]
+typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"]
+
+[[package]]
+name = "identify"
+version = "2.5.32"
+description = "File identification library for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "identify-2.5.32-py2.py3-none-any.whl", hash = "sha256:0b7656ef6cba81664b783352c73f8c24b39cf82f926f78f4550eda928e5e0545"},
+ {file = "identify-2.5.32.tar.gz", hash = "sha256:5d9979348ec1a21c768ae07e0a652924538e8bce67313a73cb0f681cf08ba407"},
+]
+
+[package.extras]
+license = ["ukkonen"]
+
+[[package]]
+name = "idna"
+version = "3.6"
+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"},
+]
+
+[[package]]
+name = "importlib-metadata"
+version = "6.9.0"
+description = "Read metadata from Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "importlib_metadata-6.9.0-py3-none-any.whl", hash = "sha256:1c8dc6839ddc9771412596926f24cb5a553bbd40624ee2c7e55e531542bed3b8"},
+ {file = "importlib_metadata-6.9.0.tar.gz", hash = "sha256:e8acb523c335a91822674e149b46c0399ec4d328c4d1f6e49c273da5ff0201b9"},
+]
+
+[package.dependencies]
+zipp = ">=0.5"
+
+[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"]
+perf = ["ipython"]
+testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"]
+
+[[package]]
+name = "inflate64"
+version = "1.0.0"
+description = "deflate64 compression/decompression library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "inflate64-1.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a90c0bdf4a7ecddd8a64cc977181810036e35807f56b0bcacee9abb0fcfd18dc"},
+ {file = "inflate64-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:57fe7c14aebf1c5a74fc3b70d355be1280a011521a76aa3895486e62454f4242"},
+ {file = "inflate64-1.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d90730165f471d61a1a694a5e354f3ffa938227e8dcecb62d5d728e8069cee94"},
+ {file = "inflate64-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543f400201f5c101141af3c79c82059e1aa6ef4f1584a7f1fa035fb2e465097f"},
+ {file = "inflate64-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ceca14f7ec19fb44b047f56c50efb7521b389d222bba2b0a10286a0caeb03fa"},
+ {file = "inflate64-1.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b559937a42f0c175b4d2dfc7eb53b97bdc87efa9add15ed5549c6abc1e89d02f"},
+ {file = "inflate64-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5ff8bd2a562343fcbc4eea26fdc368904a3b5f6bb8262344274d3d74a1de15bb"},
+ {file = "inflate64-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:0fe481f31695d35a433c3044ac8fd5d9f5069aaad03a0c04b570eb258ce655aa"},
+ {file = "inflate64-1.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a45f6979ad5874d4d4898c2fc770b136e61b96b850118fdaec5a5af1b9123a"},
+ {file = "inflate64-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:022ca1cc928e7365a05f7371ff06af143c6c667144965e2cf9a9236a2ae1c291"},
+ {file = "inflate64-1.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46792ecf3565d64fd2c519b0a780c03a57e195613c9954ef94e739a057b3fd06"},
+ {file = "inflate64-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a70ea2e456c15f7aa7c74b8ab8f20b4f8940ec657604c9f0a9de3342f280fff"},
+ {file = "inflate64-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e243ea9bd36a035059f2365bd6d156ff59717fbafb0255cb0c75bf151bf6904"},
+ {file = "inflate64-1.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4dc392dec1cd11cacda3d2637214ca45e38202e8a4f31d4a4e566d6e90625fc4"},
+ {file = "inflate64-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8b402a50eda7ee75f342fc346d33a41bca58edc222a4b17f9be0db1daed459fa"},
+ {file = "inflate64-1.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:f5924499dc8800928c0ee4580fa8eb4ffa880b2cce4431537d0390e503a9c9ee"},
+ {file = "inflate64-1.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0c644bf7208e20825ca3bbb5fb1f7f495cfcb49eb01a5f67338796d44a42f2bf"},
+ {file = "inflate64-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9964a4eaf26a9d36f82a1d9b12c28e35800dd3d99eb340453ed12ac90c2976a8"},
+ {file = "inflate64-1.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2cccded63865640d03253897be7232b2bbac295fe43914c61f86a57aa23bb61d"},
+ {file = "inflate64-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d491f104fb3701926ebd82b8c9250dfba0ddcab584504e26f1e4adb26730378d"},
+ {file = "inflate64-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ebad4a6cd2a2c1d81be0b09d4006479f3b258803c49a9224ef8ca0b649072fa"},
+ {file = "inflate64-1.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6823b2c0cff3a8159140f3b17ec64fb8ec0e663b45a6593618ecdde8aeecb5b2"},
+ {file = "inflate64-1.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:228d504239d27958e71fc77e3119a6ac4528127df38468a0c95a5bd3927204b8"},
+ {file = "inflate64-1.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae2572e06bcfe15e3bbf77d4e4a6d6c55e2a70d6abceaaf60c5c3653ddb96dfd"},
+ {file = "inflate64-1.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c10ca61212a753bbce6d341e7cfa779c161b839281f1f9fdc15cf1f324ce7c5b"},
+ {file = "inflate64-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a982dc93920f9450da4d4f25c5e5c1288ef053b1d618cedc91adb67e035e35f5"},
+ {file = "inflate64-1.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ca0310b2c55bc40394c5371db2a22f705fd594226cc09432e1eb04d3aed83930"},
+ {file = "inflate64-1.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e95044ae55a161144445527a2efad550851fecc699066423d24b2634a6a83710"},
+ {file = "inflate64-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34de6902c39d9225459583d5034182d371fc694bc3cfd6c0fc89aa62e9809faf"},
+ {file = "inflate64-1.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ebafbd813213dc470719cd0a2bcb53aab89d9059f4e75386048b4c4dcdb2fd99"},
+ {file = "inflate64-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75448c7b414dadaeeb11dab9f75e022aa1e0ee19b00f570e9f58e933603d71ac"},
+ {file = "inflate64-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:2be4e01c1b04761874cb44b35b6103ca5846bc36c18fc3ff5e8cbcd8bfc15e9f"},
+ {file = "inflate64-1.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bf2981b95c1f26242bb084d9a07f3feb0cfe3d6d0a8d90f42389803bc1252c4a"},
+ {file = "inflate64-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9373ccf0661cc72ac84a0ad622634144da5ce7d57c9572ed0723d67a149feed2"},
+ {file = "inflate64-1.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e4650c6f65011ec57cf5cd96b92d5b7c6f59e502930c86eb8227c93cf02dc270"},
+ {file = "inflate64-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a475e8822f1a74c873e60b8f270773757ade024097ca39e43402d47c049c67d4"},
+ {file = "inflate64-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4367480733ac8daf368f6fc704b7c9db85521ee745eb5bd443f4b97d2051acc"},
+ {file = "inflate64-1.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c5775c91f94f5eced9160fb0af12a09f3e030194f91a6a46e706a79350bd056"},
+ {file = "inflate64-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d76d205b844d78ce04768060084ef20e64dcc63a3e9166674f857acaf4d140ed"},
+ {file = "inflate64-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:92f0dc6af0e8e97324981178dc442956cbff1247a56d1e201af8d865244653f8"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f79542478e49e471e8b23556700e6f688a40dc93e9a746f77a546c13251b59b1"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a270be6b10cde01258c0097a663a307c62d12c78eb8f62f8e29f205335942c9"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1616a87ff04f583e9558cc247ec0b72a30d540ee0c17cc77823be175c0ec92f0"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:137ca6b315f0157a786c3a755a09395ca69aed8bcf42ad3437cb349f5ebc86d2"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8140942d1614bdeb5a9ddd7559348c5c77f884a42424aef7ccf149ccfb93aa08"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fe3f9051338bb7d07b5e7d88420d666b5109f33ae39aa55ecd1a053c0f22b1b"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36342338e957c790fc630d4afcdcc3926beb2ecaea0b302336079e8fa37e57a0"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:9b65cc701ef33ab20dbfd1d64088ffd89a8c265b356d2c21ba0ec565661645ef"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dd6d3e7d47df43210a995fd1f5989602b64de3f2a17cf4cbff553518b3577fd4"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f033b2879696b855200cde5ca4e293132c7499df790acb2c0dacb336d5e83b1"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f816d1c8a0593375c289e285c96deaee9c2d8742cb0edbd26ee05588a9ae657"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1facd35319b6a391ee4c3d709c7c650bcada8cd7141d86cd8c2257287f45e6e6"},
+ {file = "inflate64-1.0.0.tar.gz", hash = "sha256:3278827b803cf006a1df251f3e13374c7d26db779e5a33329cc11789b804bc2d"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8", "flake8-black", "flake8-deprecated", "isort (>=5.0.3)", "mypy (>=0.940)", "mypy-extensions (>=0.4.1)", "pygments", "readme-renderer", "twine"]
+docs = ["docutils", "sphinx (>=5.0)"]
+test = ["pyannotate", "pytest"]
+
+[[package]]
+name = "iniconfig"
+version = "2.0.0"
+description = "brain-dead simple config-ini parsing"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
+ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
+]
+
+[[package]]
+name = "ipykernel"
+version = "6.27.1"
+description = "IPython Kernel for Jupyter"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "ipykernel-6.27.1-py3-none-any.whl", hash = "sha256:dab88b47f112f9f7df62236511023c9bdeef67abc73af7c652e4ce4441601686"},
+ {file = "ipykernel-6.27.1.tar.gz", hash = "sha256:7d5d594b6690654b4d299edba5e872dc17bb7396a8d0609c97cb7b8a1c605de6"},
+]
+
+[package.dependencies]
+appnope = {version = "*", markers = "platform_system == \"Darwin\""}
+comm = ">=0.1.1"
+debugpy = ">=1.6.5"
+ipython = ">=7.23.1"
+jupyter-client = ">=6.1.12"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+matplotlib-inline = ">=0.1"
+nest-asyncio = "*"
+packaging = "*"
+psutil = "*"
+pyzmq = ">=20"
+tornado = ">=6.1"
+traitlets = ">=5.4.0"
+
+[package.extras]
+cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"]
+pyqt5 = ["pyqt5"]
+pyside6 = ["pyside6"]
+test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "ipython"
+version = "8.18.1"
+description = "IPython: Productive Interactive Computing"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"},
+ {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+decorator = "*"
+exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
+jedi = ">=0.16"
+matplotlib-inline = "*"
+pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
+prompt-toolkit = ">=3.0.41,<3.1.0"
+pygments = ">=2.4.0"
+stack-data = "*"
+traitlets = ">=5"
+typing-extensions = {version = "*", markers = "python_version < \"3.10\""}
+
+[package.extras]
+all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"]
+black = ["black"]
+doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"]
+kernel = ["ipykernel"]
+nbconvert = ["nbconvert"]
+nbformat = ["nbformat"]
+notebook = ["ipywidgets", "notebook"]
+parallel = ["ipyparallel"]
+qtconsole = ["qtconsole"]
+test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"]
+test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"]
+
+[[package]]
+name = "isoduration"
+version = "20.11.0"
+description = "Operations with ISO 8601 durations"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"},
+ {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"},
+]
+
+[package.dependencies]
+arrow = ">=0.15.0"
+
+[[package]]
+name = "isort"
+version = "5.12.0"
+description = "A Python utility / library to sort Python imports."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"},
+ {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"},
+]
+
+[package.extras]
+colors = ["colorama (>=0.4.3)"]
+pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"]
+plugins = ["setuptools"]
+requirements-deprecated-finder = ["pip-api", "pipreqs"]
+
+[[package]]
+name = "itsdangerous"
+version = "2.1.2"
+description = "Safely pass data to untrusted environments and back."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"},
+ {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"},
+]
+
+[[package]]
+name = "jedi"
+version = "0.19.1"
+description = "An autocompletion tool for Python that can be used for text editors."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"},
+ {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"},
+]
+
+[package.dependencies]
+parso = ">=0.8.3,<0.9.0"
+
+[package.extras]
+docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
+testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
+
+[[package]]
+name = "jinja2"
+version = "3.1.2"
+description = "A very fast and expressive template engine."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
+ {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=2.0"
+
+[package.extras]
+i18n = ["Babel (>=2.7)"]
+
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+description = "JSON Matching Expressions"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
+ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
+]
+
+[[package]]
+name = "joblib"
+version = "1.3.2"
+description = "Lightweight pipelining with Python functions"
+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"},
+]
+
+[[package]]
+name = "json5"
+version = "0.9.14"
+description = "A Python implementation of the JSON5 data format."
+optional = false
+python-versions = "*"
+files = [
+ {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"},
+ {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"},
+]
+
+[package.extras]
+dev = ["hypothesis"]
+
+[[package]]
+name = "jsonpointer"
+version = "2.4"
+description = "Identify specific nodes in a JSON document (RFC 6901)"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
+files = [
+ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"},
+ {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"},
+]
+
+[[package]]
+name = "jsonschema"
+version = "4.20.0"
+description = "An implementation of JSON Schema validation for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"},
+ {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}
+jsonschema-specifications = ">=2023.03.6"
+referencing = ">=0.28.4"
+rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""}
+rpds-py = ">=0.7.1"
+uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""}
+
+[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)"]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2023.11.2"
+description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"},
+ {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"},
+]
+
+[package.dependencies]
+referencing = ">=0.31.0"
+
+[[package]]
+name = "jupyter-client"
+version = "8.6.0"
+description = "Jupyter protocol implementation and client libraries"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"},
+ {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"},
+]
+
+[package.dependencies]
+importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+python-dateutil = ">=2.8.2"
+pyzmq = ">=23.0"
+tornado = ">=6.2"
+traitlets = ">=5.3"
+
+[package.extras]
+docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
+
+[[package]]
+name = "jupyter-core"
+version = "5.5.0"
+description = "Jupyter core package. A base package on which Jupyter projects rely."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"},
+ {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"},
+]
+
+[package.dependencies]
+platformdirs = ">=2.5"
+pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""}
+traitlets = ">=5.3"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"]
+test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "jupyter-events"
+version = "0.9.0"
+description = "Jupyter Event System library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"},
+ {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"},
+]
+
+[package.dependencies]
+jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]}
+python-json-logger = ">=2.0.4"
+pyyaml = ">=5.3"
+referencing = "*"
+rfc3339-validator = "*"
+rfc3986-validator = ">=0.1.1"
+traitlets = ">=5.3"
+
+[package.extras]
+cli = ["click", "rich"]
+docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"]
+test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"]
+
+[[package]]
+name = "jupyter-lsp"
+version = "2.2.1"
+description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyter-lsp-2.2.1.tar.gz", hash = "sha256:b17fab6d70fe83c8896b0cff59237640038247c196056b43684a0902b6a9e0fb"},
+ {file = "jupyter_lsp-2.2.1-py3-none-any.whl", hash = "sha256:17a689910c5e4ae5e7d334b02f31d08ffbe98108f6f658fb05e4304b4345368b"},
+]
+
+[package.dependencies]
+importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
+jupyter-server = ">=1.1.2"
+
+[[package]]
+name = "jupyter-server"
+version = "2.11.1"
+description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyter_server-2.11.1-py3-none-any.whl", hash = "sha256:4b3a16e3ed16fd202588890f10b8ca589bd3e29405d128beb95935f059441373"},
+ {file = "jupyter_server-2.11.1.tar.gz", hash = "sha256:fe80bab96493acf5f7d6cd9a1575af8fbd253dc2591aa4d015131a1e03b5799a"},
+]
+
+[package.dependencies]
+anyio = ">=3.1.0"
+argon2-cffi = "*"
+jinja2 = "*"
+jupyter-client = ">=7.4.4"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-events = ">=0.9.0"
+jupyter-server-terminals = "*"
+nbconvert = ">=6.4.4"
+nbformat = ">=5.3.0"
+overrides = "*"
+packaging = "*"
+prometheus-client = "*"
+pywinpty = {version = "*", markers = "os_name == \"nt\""}
+pyzmq = ">=24"
+send2trash = ">=1.8.2"
+terminado = ">=0.8.3"
+tornado = ">=6.2.0"
+traitlets = ">=5.6.0"
+websocket-client = "*"
+
+[package.extras]
+docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
+test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"]
+
+[[package]]
+name = "jupyter-server-terminals"
+version = "0.4.4"
+description = "A Jupyter Server Extension Providing Terminals."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"},
+ {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"},
+]
+
+[package.dependencies]
+pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""}
+terminado = ">=0.8.3"
+
+[package.extras]
+docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"]
+test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"]
+
+[[package]]
+name = "jupyterlab"
+version = "4.0.9"
+description = "JupyterLab computational environment"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyterlab-4.0.9-py3-none-any.whl", hash = "sha256:9f6f8e36d543fdbcc3df961a1d6a3f524b4a4001be0327a398f68fa4e534107c"},
+ {file = "jupyterlab-4.0.9.tar.gz", hash = "sha256:9ebada41d52651f623c0c9f069ddb8a21d6848e4c887d8e5ddc0613166ed5c0b"},
+]
+
+[package.dependencies]
+async-lru = ">=1.0.0"
+importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
+ipykernel = "*"
+jinja2 = ">=3.0.3"
+jupyter-core = "*"
+jupyter-lsp = ">=2.0.0"
+jupyter-server = ">=2.4.0,<3"
+jupyterlab-server = ">=2.19.0,<3"
+notebook-shim = ">=0.2"
+packaging = "*"
+tomli = {version = "*", markers = "python_version < \"3.11\""}
+tornado = ">=6.2.0"
+traitlets = "*"
+
+[package.extras]
+dev = ["black[jupyter] (==23.10.1)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.4)"]
+docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"]
+docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"]
+test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"]
+
+[[package]]
+name = "jupyterlab-pygments"
+version = "0.3.0"
+description = "Pygments theme using JupyterLab CSS variables"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"},
+ {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"},
+]
+
+[[package]]
+name = "jupyterlab-server"
+version = "2.25.2"
+description = "A set of server components for JupyterLab and JupyterLab like applications."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jupyterlab_server-2.25.2-py3-none-any.whl", hash = "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf"},
+ {file = "jupyterlab_server-2.25.2.tar.gz", hash = "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63"},
+]
+
+[package.dependencies]
+babel = ">=2.10"
+importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
+jinja2 = ">=3.0.3"
+json5 = ">=0.9.0"
+jsonschema = ">=4.18.0"
+jupyter-server = ">=1.21,<3"
+packaging = ">=21.3"
+requests = ">=2.31"
+
+[package.extras]
+docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"]
+openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"]
+test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"]
+
+[[package]]
+name = "langcodes"
+version = "3.3.0"
+description = "Tools for labeling human languages with IETF language tags"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "langcodes-3.3.0-py3-none-any.whl", hash = "sha256:4d89fc9acb6e9c8fdef70bcdf376113a3db09b67285d9e1d534de6d8818e7e69"},
+ {file = "langcodes-3.3.0.tar.gz", hash = "sha256:794d07d5a28781231ac335a1561b8442f8648ca07cd518310aeb45d6f0807ef6"},
+]
+
+[package.extras]
+data = ["language-data (>=1.1,<2.0)"]
+
+[[package]]
+name = "loguru"
+version = "0.7.2"
+description = "Python logging made (stupidly) simple"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"},
+ {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
+win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
+
+[package.extras]
+dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"]
+
+[[package]]
+name = "makefun"
+version = "1.15.2"
+description = "Small library to dynamically create python functions."
+optional = false
+python-versions = "*"
+files = [
+ {file = "makefun-1.15.2-py2.py3-none-any.whl", hash = "sha256:1c83abfaefb6c3c7c83ed4a993b4a310af80adf6db15625b184b1f0f7545a041"},
+ {file = "makefun-1.15.2.tar.gz", hash = "sha256:16f2a2b34d9ee0c2b578c960a1808c974e2822cf79f6e9b9c455aace10882d45"},
+]
+
+[[package]]
+name = "markdown-it-py"
+version = "3.0.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
+ {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
+]
+
+[package.dependencies]
+mdurl = ">=0.1,<1.0"
+
+[package.extras]
+benchmarking = ["psutil", "pytest", "pytest-benchmark"]
+code-style = ["pre-commit (>=3.0,<4.0)"]
+compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
+linkify = ["linkify-it-py (>=1,<3)"]
+plugins = ["mdit-py-plugins"]
+profiling = ["gprof2dot"]
+rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "markupsafe"
+version = "2.1.3"
+description = "Safely add untrusted strings to HTML/XML markup."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"},
+ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"},
+]
+
+[[package]]
+name = "matplotlib-inline"
+version = "0.1.6"
+description = "Inline Matplotlib backend for Jupyter"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"},
+ {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"},
+]
+
+[package.dependencies]
+traitlets = "*"
+
+[[package]]
+name = "mccabe"
+version = "0.7.0"
+description = "McCabe checker, plugin for flake8"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
+ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
+]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+description = "Markdown URL utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
+ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
+]
+
+[[package]]
+name = "mistune"
+version = "3.0.2"
+description = "A sane and fast Markdown parser with useful plugins and renderers"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"},
+ {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"},
+]
+
+[[package]]
+name = "multidict"
+version = "6.0.4"
+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"},
+]
+
+[[package]]
+name = "multiprocess"
+version = "0.70.15"
+description = "better multiprocessing and multithreading in Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "multiprocess-0.70.15-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5"},
+ {file = "multiprocess-0.70.15-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8"},
+ {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db"},
+ {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177"},
+ {file = "multiprocess-0.70.15-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5"},
+ {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f"},
+ {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902"},
+ {file = "multiprocess-0.70.15-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67"},
+ {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370"},
+ {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883"},
+ {file = "multiprocess-0.70.15-py310-none-any.whl", hash = "sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a"},
+ {file = "multiprocess-0.70.15-py311-none-any.whl", hash = "sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670"},
+ {file = "multiprocess-0.70.15-py37-none-any.whl", hash = "sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5"},
+ {file = "multiprocess-0.70.15-py38-none-any.whl", hash = "sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316"},
+ {file = "multiprocess-0.70.15-py39-none-any.whl", hash = "sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338"},
+ {file = "multiprocess-0.70.15.tar.gz", hash = "sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e"},
+]
+
+[package.dependencies]
+dill = ">=0.3.7"
+
+[[package]]
+name = "multivolumefile"
+version = "0.2.3"
+description = "multi volume file wrapper library"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "multivolumefile-0.2.3-py3-none-any.whl", hash = "sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678"},
+ {file = "multivolumefile-0.2.3.tar.gz", hash = "sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8", "flake8-black", "isort (>=5.0.3)", "pygments", "readme-renderer", "twine"]
+test = ["coverage[toml] (>=5.2)", "coveralls (>=2.1.1)", "hypothesis", "pyannotate", "pytest", "pytest-cov"]
+type = ["mypy", "mypy-extensions"]
+
+[[package]]
+name = "murmurhash"
+version = "1.0.10"
+description = "Cython bindings for MurmurHash"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "murmurhash-1.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e90eef568adca5e17a91f96975e9a782ace3a617bbb3f8c8c2d917096e9bfeb"},
+ {file = "murmurhash-1.0.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f8ecb00cc1ab57e4b065f9fb3ea923b55160c402d959c69a0b6dbbe8bc73efc3"},
+ {file = "murmurhash-1.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3310101004d9e2e0530c2fed30174448d998ffd1b50dcbfb7677e95db101aa4b"},
+ {file = "murmurhash-1.0.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65401a6f1778676253cbf89c1f45a8a7feb7d73038e483925df7d5943c08ed9"},
+ {file = "murmurhash-1.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:f23f2dfc7174de2cdc5007c0771ab8376a2a3f48247f32cac4a5563e40c6adcc"},
+ {file = "murmurhash-1.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90ed37ee2cace9381b83d56068334f77e3e30bc521169a1f886a2a2800e965d6"},
+ {file = "murmurhash-1.0.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22e9926fdbec9d24ced9b0a42f0fee68c730438be3cfb00c2499fd495caec226"},
+ {file = "murmurhash-1.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54bfbfd68baa99717239b8844600db627f336a08b1caf4df89762999f681cdd1"},
+ {file = "murmurhash-1.0.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b9d200a09d48ef67f6840b77c14f151f2b6c48fd69661eb75c7276ebdb146c"},
+ {file = "murmurhash-1.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:e5d7cfe392c0a28129226271008e61e77bf307afc24abf34f386771daa7b28b0"},
+ {file = "murmurhash-1.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:96f0a070344d4802ea76a160e0d4c88b7dc10454d2426f48814482ba60b38b9e"},
+ {file = "murmurhash-1.0.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9f61862060d677c84556610ac0300a0776cb13cb3155f5075ed97e80f86e55d9"},
+ {file = "murmurhash-1.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3b6d2d877d8881a08be66d906856d05944be0faf22b9a0390338bcf45299989"},
+ {file = "murmurhash-1.0.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f54b0031d8696fed17ed6e9628f339cdea0ba2367ca051e18ff59193f52687"},
+ {file = "murmurhash-1.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:97e09d675de2359e586f09de1d0de1ab39f9911edffc65c9255fb5e04f7c1f85"},
+ {file = "murmurhash-1.0.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b64e5332932993fef598e78d633b1ba664789ab73032ed511f3dc615a631a1a"},
+ {file = "murmurhash-1.0.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e2a38437a8497e082408aa015c6d90554b9e00c2c221fdfa79728a2d99a739e"},
+ {file = "murmurhash-1.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:55f4e4f9291a53c36070330950b472d72ba7d331e4ce3ce1ab349a4f458f7bc4"},
+ {file = "murmurhash-1.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16ef9f0855952493fe08929d23865425906a8c0c40607ac8a949a378652ba6a9"},
+ {file = "murmurhash-1.0.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cc3351ae92b89c2fcdc6e41ac6f17176dbd9b3554c96109fd0713695d8663e7"},
+ {file = "murmurhash-1.0.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6559fef7c2e7349a42a63549067709b656d6d1580752bd76be1541d8b2d65718"},
+ {file = "murmurhash-1.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:8bf49e3bb33febb7057ae3a5d284ef81243a1e55eaa62bdcd79007cddbdc0461"},
+ {file = "murmurhash-1.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1605fde07030516eb63d77a598dd164fb9bf217fd937dbac588fe7e47a28c40"},
+ {file = "murmurhash-1.0.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4904f7e68674a64eb2b08823c72015a5e14653e0b4b109ea00c652a005a59bad"},
+ {file = "murmurhash-1.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0438f0cb44cf1cd26251f72c1428213c4197d40a4e3f48b1efc3aea12ce18517"},
+ {file = "murmurhash-1.0.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db1171a3f9a10571931764cdbfaa5371f4cf5c23c680639762125cb075b833a5"},
+ {file = "murmurhash-1.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:1c9fbcd7646ad8ba67b895f71d361d232c6765754370ecea473dd97d77afe99f"},
+ {file = "murmurhash-1.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7024ab3498434f22f8e642ae31448322ad8228c65c8d9e5dc2d563d57c14c9b8"},
+ {file = "murmurhash-1.0.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a99dedfb7f0cc5a4cd76eb409ee98d3d50eba024f934e705914f6f4d765aef2c"},
+ {file = "murmurhash-1.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b580b8503647de5dd7972746b7613ea586270f17ac92a44872a9b1b52c36d68"},
+ {file = "murmurhash-1.0.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75840212bf75eb1352c946c3cf1622dacddd6d6bdda34368237d1eb3568f23a"},
+ {file = "murmurhash-1.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:a4209962b9f85de397c3203ea4b3a554da01ae9fd220fdab38757d4e9eba8d1a"},
+ {file = "murmurhash-1.0.10.tar.gz", hash = "sha256:5282aab1317804c6ebd6dd7f69f15ba9075aee671c44a34be2bde0f1b11ef88a"},
+]
+
+[[package]]
+name = "mypy"
+version = "1.7.1"
+description = "Optional static typing for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"},
+ {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"},
+ {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"},
+ {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"},
+ {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"},
+ {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"},
+ {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"},
+ {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"},
+ {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"},
+ {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"},
+ {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"},
+ {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"},
+ {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"},
+ {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"},
+ {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"},
+ {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"},
+ {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"},
+ {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"},
+ {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"},
+ {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"},
+ {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"},
+ {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"},
+ {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"},
+ {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"},
+ {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"},
+ {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"},
+ {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"},
+]
+
+[package.dependencies]
+mypy-extensions = ">=1.0.0"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+typing-extensions = ">=4.1.0"
+
+[package.extras]
+dmypy = ["psutil (>=4.0)"]
+install-types = ["pip"]
+mypyc = ["setuptools (>=50)"]
+reports = ["lxml"]
+
+[[package]]
+name = "mypy-extensions"
+version = "1.0.0"
+description = "Type system extensions for programs checked with the mypy type checker."
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
+ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
+]
+
+[[package]]
+name = "nbclient"
+version = "0.9.0"
+description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"},
+ {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"},
+]
+
+[package.dependencies]
+jupyter-client = ">=6.1.12"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+nbformat = ">=5.1"
+traitlets = ">=5.4"
+
+[package.extras]
+dev = ["pre-commit"]
+docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"]
+test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
+
+[[package]]
+name = "nbconvert"
+version = "7.11.0"
+description = "Converting Jupyter Notebooks"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "nbconvert-7.11.0-py3-none-any.whl", hash = "sha256:d1d417b7f34a4e38887f8da5bdfd12372adf3b80f995d57556cb0972c68909fe"},
+ {file = "nbconvert-7.11.0.tar.gz", hash = "sha256:abedc01cf543177ffde0bfc2a69726d5a478f6af10a332fc1bf29fcb4f0cf000"},
+]
+
+[package.dependencies]
+beautifulsoup4 = "*"
+bleach = "!=5.0.0"
+defusedxml = "*"
+importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""}
+jinja2 = ">=3.0"
+jupyter-core = ">=4.7"
+jupyterlab-pygments = "*"
+markupsafe = ">=2.0"
+mistune = ">=2.0.3,<4"
+nbclient = ">=0.5.0"
+nbformat = ">=5.7"
+packaging = "*"
+pandocfilters = ">=1.4.1"
+pygments = ">=2.4.1"
+tinycss2 = "*"
+traitlets = ">=5.1"
+
+[package.extras]
+all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"]
+docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"]
+qtpdf = ["nbconvert[qtpng]"]
+qtpng = ["pyqtwebengine (>=5.15)"]
+serve = ["tornado (>=6.1)"]
+test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pytest"]
+webpdf = ["playwright"]
+
+[[package]]
+name = "nbformat"
+version = "5.9.2"
+description = "The Jupyter Notebook format"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"},
+ {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"},
+]
+
+[package.dependencies]
+fastjsonschema = "*"
+jsonschema = ">=2.6"
+jupyter-core = "*"
+traitlets = ">=5.1"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["pep440", "pre-commit", "pytest", "testpath"]
+
+[[package]]
+name = "nest-asyncio"
+version = "1.5.8"
+description = "Patch asyncio to allow nested event loops"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"},
+ {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"},
+]
+
+[[package]]
+name = "nodeenv"
+version = "1.8.0"
+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.*"
+files = [
+ {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
+ {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
+]
+
+[package.dependencies]
+setuptools = "*"
+
+[[package]]
+name = "notebook-shim"
+version = "0.2.3"
+description = "A shim layer for notebook traits and config"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"},
+ {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"},
+]
+
+[package.dependencies]
+jupyter-server = ">=1.8,<3"
+
+[package.extras]
+test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"]
+
+[[package]]
+name = "numpy"
+version = "1.26.2"
+description = "Fundamental package for array computing in Python"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"},
+ {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"},
+ {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"},
+ {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"},
+ {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"},
+ {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"},
+ {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"},
+ {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"},
+ {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"},
+ {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"},
+ {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"},
+ {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"},
+ {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"},
+ {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"},
+ {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"},
+ {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"},
+ {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"},
+ {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"},
+ {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"},
+ {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"},
+ {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"},
+ {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"},
+ {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"},
+ {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"},
+ {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"},
+ {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"},
+ {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"},
+ {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"},
+ {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"},
+ {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"},
+ {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"},
+ {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"},
+ {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"},
+ {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"},
+ {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"},
+ {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"},
+]
+
+[[package]]
+name = "nvidia-cublas-cu11"
+version = "11.10.3.66"
+description = "CUBLAS native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl", hash = "sha256:d32e4d75f94ddfb93ea0a5dda08389bcc65d8916a25cb9f37ac89edaeed3bded"},
+ {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-win_amd64.whl", hash = "sha256:8ac17ba6ade3ed56ab898a036f9ae0756f1e81052a317bf98f8c6d18dc3ae49e"},
+]
+
+[package.dependencies]
+setuptools = "*"
+wheel = "*"
+
+[[package]]
+name = "nvidia-cuda-nvrtc-cu11"
+version = "11.7.99"
+description = "NVRTC native runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:9f1562822ea264b7e34ed5930567e89242d266448e936b85bc97a3370feabb03"},
+ {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:f7d9610d9b7c331fa0da2d1b2858a4a8315e6d49765091d28711c8946e7425e7"},
+ {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:f2effeb1309bdd1b3854fc9b17eaf997808f8b25968ce0c7070945c4265d64a3"},
+]
+
+[package.dependencies]
+setuptools = "*"
+wheel = "*"
+
+[[package]]
+name = "nvidia-cuda-runtime-cu11"
+version = "11.7.99"
+description = "CUDA Runtime native Libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:cc768314ae58d2641f07eac350f40f99dcb35719c4faff4bc458a7cd2b119e31"},
+ {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:bc77fa59a7679310df9d5c70ab13c4e34c64ae2124dd1efd7e5474b71be125c7"},
+]
+
+[package.dependencies]
+setuptools = "*"
+wheel = "*"
+
+[[package]]
+name = "nvidia-cudnn-cu11"
+version = "8.5.0.96"
+description = "cuDNN runtime libraries"
+optional = false
+python-versions = ">=3"
+files = [
+ {file = "nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:402f40adfc6f418f9dae9ab402e773cfed9beae52333f6d86ae3107a1b9527e7"},
+ {file = "nvidia_cudnn_cu11-8.5.0.96-py3-none-manylinux1_x86_64.whl", hash = "sha256:71f8111eb830879ff2836db3cccf03bbd735df9b0d17cd93761732ac50a8a108"},
+]
+
+[package.dependencies]
+setuptools = "*"
+wheel = "*"
+
+[[package]]
+name = "ordered-set"
+version = "4.1.0"
+description = "An OrderedSet is a custom MutableSet that remembers its order, so that every"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"},
+ {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"},
+]
+
+[package.extras]
+dev = ["black", "mypy", "pytest"]
+
+[[package]]
+name = "orjson"
+version = "3.9.10"
+description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "orjson-3.9.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9"},
+ {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83"},
+ {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d"},
+ {file = "orjson-3.9.10-cp310-none-win32.whl", hash = "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1"},
+ {file = "orjson-3.9.10-cp310-none-win_amd64.whl", hash = "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7"},
+ {file = "orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"},
+ {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"},
+ {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"},
+ {file = "orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"},
+ {file = "orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"},
+ {file = "orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"},
+ {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"},
+ {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"},
+ {file = "orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"},
+ {file = "orjson-3.9.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b"},
+ {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777"},
+ {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8"},
+ {file = "orjson-3.9.10-cp38-none-win32.whl", hash = "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643"},
+ {file = "orjson-3.9.10-cp38-none-win_amd64.whl", hash = "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5"},
+ {file = "orjson-3.9.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521"},
+ {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864"},
+ {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade"},
+ {file = "orjson-3.9.10-cp39-none-win32.whl", hash = "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088"},
+ {file = "orjson-3.9.10-cp39-none-win_amd64.whl", hash = "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff"},
+ {file = "orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"},
+]
+
+[[package]]
+name = "overrides"
+version = "7.4.0"
+description = "A decorator to automatically detect mismatch when overriding a method."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"},
+ {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"},
+]
+
+[[package]]
+name = "packaging"
+version = "23.2"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
+ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
+]
+
+[[package]]
+name = "pandas"
+version = "2.1.3"
+description = "Powerful data structures for data analysis, time series, and statistics"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "pandas-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acf08a73b5022b479c1be155d4988b72f3020f308f7a87c527702c5f8966d34f"},
+ {file = "pandas-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3cc4469ff0cf9aa3a005870cb49ab8969942b7156e0a46cc3f5abd6b11051dfb"},
+ {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35172bff95f598cc5866c047f43c7f4df2c893acd8e10e6653a4b792ed7f19bb"},
+ {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59dfe0e65a2f3988e940224e2a70932edc964df79f3356e5f2997c7d63e758b4"},
+ {file = "pandas-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0296a66200dee556850d99b24c54c7dfa53a3264b1ca6f440e42bad424caea03"},
+ {file = "pandas-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:465571472267a2d6e00657900afadbe6097c8e1dc43746917db4dfc862e8863e"},
+ {file = "pandas-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04d4c58e1f112a74689da707be31cf689db086949c71828ef5da86727cfe3f82"},
+ {file = "pandas-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fa2ad4ff196768ae63a33f8062e6838efed3a319cf938fdf8b95e956c813042"},
+ {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4441ac94a2a2613e3982e502ccec3bdedefe871e8cea54b8775992485c5660ef"},
+ {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ded6ff28abbf0ea7689f251754d3789e1edb0c4d0d91028f0b980598418a58"},
+ {file = "pandas-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca5680368a5139d4920ae3dc993eb5106d49f814ff24018b64d8850a52c6ed2"},
+ {file = "pandas-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:de21e12bf1511190fc1e9ebc067f14ca09fccfb189a813b38d63211d54832f5f"},
+ {file = "pandas-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a5d53c725832e5f1645e7674989f4c106e4b7249c1d57549023ed5462d73b140"},
+ {file = "pandas-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7cf4cf26042476e39394f1f86868d25b265ff787c9b2f0d367280f11afbdee6d"},
+ {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72c84ec1b1d8e5efcbff5312abe92bfb9d5b558f11e0cf077f5496c4f4a3c99e"},
+ {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f539e113739a3e0cc15176bf1231a553db0239bfa47a2c870283fd93ba4f683"},
+ {file = "pandas-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc77309da3b55732059e484a1efc0897f6149183c522390772d3561f9bf96c00"},
+ {file = "pandas-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:08637041279b8981a062899da0ef47828df52a1838204d2b3761fbd3e9fcb549"},
+ {file = "pandas-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b99c4e51ef2ed98f69099c72c75ec904dd610eb41a32847c4fcbc1a975f2d2b8"},
+ {file = "pandas-2.1.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7ea8ae8004de0381a2376662c0505bb0a4f679f4c61fbfd122aa3d1b0e5f09d"},
+ {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd76d67ca2d48f56e2db45833cf9d58f548f97f61eecd3fdc74268417632b8a"},
+ {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1329dbe93a880a3d7893149979caa82d6ba64a25e471682637f846d9dbc10dd2"},
+ {file = "pandas-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:321ecdb117bf0f16c339cc6d5c9a06063854f12d4d9bc422a84bb2ed3207380a"},
+ {file = "pandas-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:11a771450f36cebf2a4c9dbd3a19dfa8c46c4b905a3ea09dc8e556626060fe71"},
+ {file = "pandas-2.1.3.tar.gz", hash = "sha256:22929f84bca106921917eb73c1521317ddd0a4c71b395bcf767a106e3494209f"},
+]
+
+[package.dependencies]
+numpy = {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}
+python-dateutil = ">=2.8.2"
+pytz = ">=2020.1"
+tzdata = ">=2022.1"
+
+[package.extras]
+all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"]
+aws = ["s3fs (>=2022.05.0)"]
+clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"]
+compression = ["zstandard (>=0.17.0)"]
+computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"]
+consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
+excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"]
+feather = ["pyarrow (>=7.0.0)"]
+fss = ["fsspec (>=2022.05.0)"]
+gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"]
+hdf5 = ["tables (>=3.7.0)"]
+html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"]
+mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"]
+output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"]
+parquet = ["pyarrow (>=7.0.0)"]
+performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"]
+plot = ["matplotlib (>=3.6.1)"]
+postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"]
+spss = ["pyreadstat (>=1.1.5)"]
+sql-other = ["SQLAlchemy (>=1.4.36)"]
+test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
+xml = ["lxml (>=4.8.0)"]
+
+[[package]]
+name = "pandocfilters"
+version = "1.5.0"
+description = "Utilities for writing pandoc filters in python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"},
+ {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"},
+]
+
+[[package]]
+name = "parso"
+version = "0.8.3"
+description = "A Python Parser"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"},
+ {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"},
+]
+
+[package.extras]
+qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+testing = ["docopt", "pytest (<6.0.0)"]
+
+[[package]]
+name = "pastel"
+version = "0.2.1"
+description = "Bring colors to your terminal."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"},
+ {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"},
+]
+
+[[package]]
+name = "pathspec"
+version = "0.11.2"
+description = "Utility library for gitignore style pattern matching of file paths."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
+ {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
+]
+
+[[package]]
+name = "pbr"
+version = "6.0.0"
+description = "Python Build Reasonableness"
+optional = false
+python-versions = ">=2.6"
+files = [
+ {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"},
+ {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"},
+]
+
+[[package]]
+name = "pep8-naming"
+version = "0.13.3"
+description = "Check PEP-8 naming conventions, plugin for flake8"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pep8-naming-0.13.3.tar.gz", hash = "sha256:1705f046dfcd851378aac3be1cd1551c7c1e5ff363bacad707d43007877fa971"},
+ {file = "pep8_naming-0.13.3-py3-none-any.whl", hash = "sha256:1a86b8c71a03337c97181917e2b472f0f5e4ccb06844a0d6f0a33522549e7a80"},
+]
+
+[package.dependencies]
+flake8 = ">=5.0.0"
+
+[[package]]
+name = "pexpect"
+version = "4.9.0"
+description = "Pexpect allows easy control of interactive console applications."
+optional = false
+python-versions = "*"
+files = [
+ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
+ {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
+]
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+name = "pillow"
+version = "10.1.0"
+description = "Python Imaging Library (Fork)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"},
+ {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"},
+ {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"},
+ {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"},
+ {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"},
+ {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"},
+ {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"},
+ {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"},
+ {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"},
+ {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"},
+ {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"},
+ {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"},
+ {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"},
+ {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"},
+ {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"},
+ {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"},
+ {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"},
+ {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"},
+ {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"},
+ {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"},
+ {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"},
+ {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"},
+ {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"},
+ {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"},
+ {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"},
+ {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"},
+]
+
+[package.extras]
+docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
+tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "platformdirs"
+version = "4.0.0"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"},
+ {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"},
+]
+
+[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)"]
+
+[[package]]
+name = "pluggy"
+version = "1.3.0"
+description = "plugin and hook calling mechanisms for python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"},
+ {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"},
+]
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "poethepoet"
+version = "0.24.4"
+description = "A task runner that works well with poetry."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "poethepoet-0.24.4-py3-none-any.whl", hash = "sha256:fb4ea35d7f40fe2081ea917d2e4102e2310fda2cde78974050ca83896e229075"},
+ {file = "poethepoet-0.24.4.tar.gz", hash = "sha256:ff4220843a87c888cbcb5312c8905214701d0af60ac7271795baa8369b428fef"},
+]
+
+[package.dependencies]
+pastel = ">=0.2.1,<0.3.0"
+tomli = ">=1.2.2"
+
+[package.extras]
+poetry-plugin = ["poetry (>=1.0,<2.0)"]
+
+[[package]]
+name = "pre-commit"
+version = "3.5.0"
+description = "A framework for managing and maintaining multi-language pre-commit hooks."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"},
+ {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"},
+]
+
+[package.dependencies]
+cfgv = ">=2.0.0"
+identify = ">=1.0.0"
+nodeenv = ">=0.11.1"
+pyyaml = ">=5.1"
+virtualenv = ">=20.10.0"
+
+[[package]]
+name = "preshed"
+version = "3.0.9"
+description = "Cython hash table that trusts the keys are pre-hashed"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "preshed-3.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f96ef4caf9847b2bb9868574dcbe2496f974e41c2b83d6621c24fb4c3fc57e3"},
+ {file = "preshed-3.0.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a61302cf8bd30568631adcdaf9e6b21d40491bd89ba8ebf67324f98b6c2a2c05"},
+ {file = "preshed-3.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99499e8a58f58949d3f591295a97bca4e197066049c96f5d34944dd21a497193"},
+ {file = "preshed-3.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea6b6566997dc3acd8c6ee11a89539ac85c77275b4dcefb2dc746d11053a5af8"},
+ {file = "preshed-3.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:bfd523085a84b1338ff18f61538e1cfcdedc4b9e76002589a301c364d19a2e36"},
+ {file = "preshed-3.0.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7c2364da27f2875524ce1ca754dc071515a9ad26eb5def4c7e69129a13c9a59"},
+ {file = "preshed-3.0.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182138033c0730c683a6d97e567ceb8a3e83f3bff5704f300d582238dbd384b3"},
+ {file = "preshed-3.0.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:345a10be3b86bcc6c0591d343a6dc2bfd86aa6838c30ced4256dfcfa836c3a64"},
+ {file = "preshed-3.0.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51d0192274aa061699b284f9fd08416065348edbafd64840c3889617ee1609de"},
+ {file = "preshed-3.0.9-cp311-cp311-win_amd64.whl", hash = "sha256:96b857d7a62cbccc3845ac8c41fd23addf052821be4eb987f2eb0da3d8745aa1"},
+ {file = "preshed-3.0.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4fe6720012c62e6d550d6a5c1c7ad88cacef8388d186dad4bafea4140d9d198"},
+ {file = "preshed-3.0.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e04f05758875be9751e483bd3c519c22b00d3b07f5a64441ec328bb9e3c03700"},
+ {file = "preshed-3.0.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a55091d0e395f1fdb62ab43401bb9f8b46c7d7794d5b071813c29dc1ab22fd0"},
+ {file = "preshed-3.0.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de8f5138bcac7870424e09684dc3dd33c8e30e81b269f6c9ede3d8c7bb8e257"},
+ {file = "preshed-3.0.9-cp312-cp312-win_amd64.whl", hash = "sha256:24229c77364628743bc29c5620c5d6607ed104f0e02ae31f8a030f99a78a5ceb"},
+ {file = "preshed-3.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b73b0f7ecc58095ebbc6ca26ec806008ef780190fe685ce471b550e7eef58dc2"},
+ {file = "preshed-3.0.9-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cb90ecd5bec71c21d95962db1a7922364d6db2abe284a8c4b196df8bbcc871e"},
+ {file = "preshed-3.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:e304a0a8c9d625b70ba850c59d4e67082a6be9c16c4517b97850a17a282ebee6"},
+ {file = "preshed-3.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1fa6d3d5529b08296ff9b7b4da1485c080311fd8744bbf3a86019ff88007b382"},
+ {file = "preshed-3.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1e5173809d85edd420fc79563b286b88b4049746b797845ba672cf9435c0e7"},
+ {file = "preshed-3.0.9-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fe81eb21c7d99e8b9a802cc313b998c5f791bda592903c732b607f78a6b7dc4"},
+ {file = "preshed-3.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:78590a4a952747c3766e605ce8b747741005bdb1a5aa691a18aae67b09ece0e6"},
+ {file = "preshed-3.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3452b64d97ce630e200c415073040aa494ceec6b7038f7a2a3400cbd7858e952"},
+ {file = "preshed-3.0.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ac970d97b905e9e817ec13d31befd5b07c9cfec046de73b551d11a6375834b79"},
+ {file = "preshed-3.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eebaa96ece6641cd981491cba995b68c249e0b6877c84af74971eacf8990aa19"},
+ {file = "preshed-3.0.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d473c5f6856e07a88d41fe00bb6c206ecf7b34c381d30de0b818ba2ebaf9406"},
+ {file = "preshed-3.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:0de63a560f10107a3f0a9e252cc3183b8fdedcb5f81a86938fd9f1dcf8a64adf"},
+ {file = "preshed-3.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3a9ad9f738084e048a7c94c90f40f727217387115b2c9a95c77f0ce943879fcd"},
+ {file = "preshed-3.0.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a671dfa30b67baa09391faf90408b69c8a9a7f81cb9d83d16c39a182355fbfce"},
+ {file = "preshed-3.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23906d114fc97c17c5f8433342495d7562e96ecfd871289c2bb2ed9a9df57c3f"},
+ {file = "preshed-3.0.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778cf71f82cedd2719b256f3980d556d6fb56ec552334ba79b49d16e26e854a0"},
+ {file = "preshed-3.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:a6e579439b329eb93f32219ff27cb358b55fbb52a4862c31a915a098c8a22ac2"},
+ {file = "preshed-3.0.9.tar.gz", hash = "sha256:721863c5244ffcd2651ad0928951a2c7c77b102f4e11a251ad85d37ee7621660"},
+]
+
+[package.dependencies]
+cymem = ">=2.0.2,<2.1.0"
+murmurhash = ">=0.28.0,<1.1.0"
+
+[[package]]
+name = "prometheus-client"
+version = "0.19.0"
+description = "Python client for the Prometheus monitoring system."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"},
+ {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"},
+]
+
+[package.extras]
+twisted = ["twisted"]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.41"
+description = "Library for building powerful interactive command lines in Python"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"},
+ {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"},
+]
+
+[package.dependencies]
+wcwidth = "*"
+
+[[package]]
+name = "psutil"
+version = "5.9.6"
+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.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"},
+ {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"},
+ {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"},
+ {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"},
+ {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"},
+ {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"},
+ {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"},
+ {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"},
+ {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"},
+ {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"},
+ {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"},
+ {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"},
+ {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"},
+ {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"},
+ {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"},
+ {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"},
+]
+
+[package.extras]
+test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+optional = false
+python-versions = "*"
+files = [
+ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+
+[[package]]
+name = "pure-eval"
+version = "0.2.2"
+description = "Safely evaluate AST nodes without side effects"
+optional = false
+python-versions = "*"
+files = [
+ {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
+ {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
+]
+
+[package.extras]
+tests = ["pytest"]
+
+[[package]]
+name = "py7zr"
+version = "0.20.8"
+description = "Pure python 7-zip library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "py7zr-0.20.8-py3-none-any.whl", hash = "sha256:c74d957a0d32a2368854d1721b4ca20e614ea116d733352a115ca1c789b2c42e"},
+ {file = "py7zr-0.20.8.tar.gz", hash = "sha256:2a6b0db0441e63a2dd74cbd18f5d9ae7e08dc0e54685aa486361d0db6a0b4f78"},
+]
+
+[package.dependencies]
+brotli = {version = ">=1.1.0", markers = "platform_python_implementation == \"CPython\""}
+brotlicffi = {version = ">=1.1.0.0", markers = "platform_python_implementation == \"PyPy\""}
+inflate64 = ">=1.0.0,<1.1.0"
+multivolumefile = ">=0.2.3"
+psutil = {version = "*", markers = "sys_platform != \"cygwin\""}
+pybcj = ">=1.0.0,<1.1.0"
+pycryptodomex = ">=3.16.0"
+pyppmd = ">=1.1.0,<1.2.0"
+pyzstd = ">=0.15.9"
+texttable = "*"
+
+[package.extras]
+check = ["black (>=23.1.0)", "check-manifest", "flake8 (<7)", "flake8-black (>=0.3.6)", "flake8-deprecated", "flake8-isort", "isort (>=5.0.3)", "lxml", "mypy (>=0.940)", "mypy-extensions (>=0.4.1)", "pygments", "readme-renderer", "twine", "types-psutil"]
+debug = ["pytest", "pytest-leaks", "pytest-profiling"]
+docs = ["docutils", "sphinx (>=5.0)", "sphinx-a4doc", "sphinx-py3doc-enhanced-theme"]
+test = ["coverage[toml] (>=5.2)", "coveralls (>=2.1.1)", "py-cpuinfo", "pyannotate", "pytest", "pytest-benchmark", "pytest-cov", "pytest-remotedata", "pytest-timeout"]
+test-compat = ["libarchive-c"]
+
+[[package]]
+name = "pyarrow"
+version = "14.0.1"
+description = "Python library for Apache Arrow"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pyarrow-14.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:96d64e5ba7dceb519a955e5eeb5c9adcfd63f73a56aea4722e2cc81364fc567a"},
+ {file = "pyarrow-14.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a8ae88c0038d1bc362a682320112ee6774f006134cd5afc291591ee4bc06505"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f6f053cb66dc24091f5511e5920e45c83107f954a21032feadc7b9e3a8e7851"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:906b0dc25f2be12e95975722f1e60e162437023f490dbd80d0deb7375baf3171"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:78d4a77a46a7de9388b653af1c4ce539350726cd9af62e0831e4f2bd0c95a2f4"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06ca79080ef89d6529bb8e5074d4b4f6086143b2520494fcb7cf8a99079cde93"},
+ {file = "pyarrow-14.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:32542164d905002c42dff896efdac79b3bdd7291b1b74aa292fac8450d0e4dcd"},
+ {file = "pyarrow-14.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:c7331b4ed3401b7ee56f22c980608cf273f0380f77d0f73dd3c185f78f5a6220"},
+ {file = "pyarrow-14.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:922e8b49b88da8633d6cac0e1b5a690311b6758d6f5d7c2be71acb0f1e14cd61"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58c889851ca33f992ea916b48b8540735055201b177cb0dcf0596a495a667b00"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30d8494870d9916bb53b2a4384948491444741cb9a38253c590e21f836b01222"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:be28e1a07f20391bb0b15ea03dcac3aade29fc773c5eb4bee2838e9b2cdde0cb"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:981670b4ce0110d8dcb3246410a4aabf5714db5d8ea63b15686bce1c914b1f83"},
+ {file = "pyarrow-14.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:4756a2b373a28f6166c42711240643fb8bd6322467e9aacabd26b488fa41ec23"},
+ {file = "pyarrow-14.0.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:cf87e2cec65dd5cf1aa4aba918d523ef56ef95597b545bbaad01e6433851aa10"},
+ {file = "pyarrow-14.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:470ae0194fbfdfbf4a6b65b4f9e0f6e1fa0ea5b90c1ee6b65b38aecee53508c8"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6263cffd0c3721c1e348062997babdf0151301f7353010c9c9a8ed47448f82ab"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8089d7e77d1455d529dbd7cff08898bbb2666ee48bc4085203af1d826a33cc"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fada8396bc739d958d0b81d291cfd201126ed5e7913cb73de6bc606befc30226"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2a145dab9ed7849fc1101bf03bcdc69913547f10513fdf70fc3ab6c0a50c7eee"},
+ {file = "pyarrow-14.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:05fe7994745b634c5fb16ce5717e39a1ac1fac3e2b0795232841660aa76647cd"},
+ {file = "pyarrow-14.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:a8eeef015ae69d104c4c3117a6011e7e3ecd1abec79dc87fd2fac6e442f666ee"},
+ {file = "pyarrow-14.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c76807540989fe8fcd02285dd15e4f2a3da0b09d27781abec3adc265ddbeba1"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450e4605e3c20e558485f9161a79280a61c55efe585d51513c014de9ae8d393f"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323cbe60210173ffd7db78bfd50b80bdd792c4c9daca8843ef3cd70b186649db"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0140c7e2b740e08c5a459439d87acd26b747fc408bde0a8806096ee0baaa0c15"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:e592e482edd9f1ab32f18cd6a716c45b2c0f2403dc2af782f4e9674952e6dd27"},
+ {file = "pyarrow-14.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d264ad13605b61959f2ae7c1d25b1a5b8505b112715c961418c8396433f213ad"},
+ {file = "pyarrow-14.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01e44de9749cddc486169cb632f3c99962318e9dacac7778315a110f4bf8a450"},
+ {file = "pyarrow-14.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0351fecf0e26e152542bc164c22ea2a8e8c682726fce160ce4d459ea802d69c"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c1f6110c386464fd2e5e4ea3624466055bbe681ff185fd6c9daa98f30a3f9a"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11e045dfa09855b6d3e7705a37c42e2dc2c71d608fab34d3c23df2e02df9aec3"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:097828b55321897db0e1dbfc606e3ff8101ae5725673498cbfa7754ee0da80e4"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1daab52050a1c48506c029e6fa0944a7b2436334d7e44221c16f6f1b2cc9c510"},
+ {file = "pyarrow-14.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3f6d5faf4f1b0d5a7f97be987cf9e9f8cd39902611e818fe134588ee99bf0283"},
+ {file = "pyarrow-14.0.1.tar.gz", hash = "sha256:b8b3f4fe8d4ec15e1ef9b599b94683c5216adaed78d5cb4c606180546d1e2ee1"},
+]
+
+[package.dependencies]
+numpy = ">=1.16.6"
+
+[[package]]
+name = "pyarrow-hotfix"
+version = "0.6"
+description = ""
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "pyarrow_hotfix-0.6-py3-none-any.whl", hash = "sha256:dcc9ae2d220dff0083be6a9aa8e0cdee5182ad358d4931fce825c545e5c89178"},
+ {file = "pyarrow_hotfix-0.6.tar.gz", hash = "sha256:79d3e030f7ff890d408a100ac16d6f00b14d44a502d7897cd9fc3e3a534e9945"},
+]
+
+[[package]]
+name = "pybcj"
+version = "1.0.2"
+description = "bcj filter library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pybcj-1.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7bff28d97e47047d69a4ac6bf59adda738cf1d00adde8819117fdb65d966bdbc"},
+ {file = "pybcj-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:198e0b4768b4025eb3309273d7e81dc53834b9a50092be6e0d9b3983cfd35c35"},
+ {file = "pybcj-1.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa26415b4a118ea790de9d38f244312f2510a9bb5c65e560184d241a6f391a2d"},
+ {file = "pybcj-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fabb2be57e4ca28ea36c13146cdf97d73abd27c51741923fc6ba1e8cd33e255c"},
+ {file = "pybcj-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d6d613bae6f27678d5e44e89d61018779726aa6aa950c516d33a04b8af8c59"},
+ {file = "pybcj-1.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ffae79ef8a1ea81ea2748ad7b7ad9b882aa88ddf65ce90f9e944df639eccc61"},
+ {file = "pybcj-1.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdb4d8ff5cba3e0bd1adee7d20dbb2b4d80cb31ac04d6ea1cd06cfc02d2ecd0d"},
+ {file = "pybcj-1.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a29be917fbc99eca204b08407e0971e0205bfdad4b74ec915930675f352b669d"},
+ {file = "pybcj-1.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a2562ebe5a0abec4da0229f8abb5e90ee97b178f19762eb925c1159be36828b3"},
+ {file = "pybcj-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af19bc61ded933001cd68f004ae2042bf1a78eb498a3c685ebd655fa1be90dbe"},
+ {file = "pybcj-1.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3f4a447800850aba7724a2274ea0a4800724520c1caf38f7d0dabf2f89a5e15"},
+ {file = "pybcj-1.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1c8af7a4761d2b1b531864d84113948daa0c4245775c63bd9874cb955f4662"},
+ {file = "pybcj-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8007371f6f2b462f5aa05d5c2135d0a1bcf5b7bdd9bd15d86c730f588d10b7d3"},
+ {file = "pybcj-1.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1079ca63ff8da5c936b76863690e0bd2489e8d4e0a3a340e032095dae805dd91"},
+ {file = "pybcj-1.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e9a785eb26884429d9b9f6326e68c3638828c83bf6d42d2463c97ad5385caff2"},
+ {file = "pybcj-1.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:9ea46e2d45469d13b7f25b08efcdb140220bab1ac5a850db0954591715b8caaa"},
+ {file = "pybcj-1.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:21b5f2460629167340403d359289a173e0729ce8e84e3ce99462009d5d5e01a4"},
+ {file = "pybcj-1.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2940fb85730b9869254559c491cd83cf777e56c76a8a60df60e4be4f2a4248d7"},
+ {file = "pybcj-1.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f40f3243139d675f43793a4e35c410c370f7b91ccae74e70c8b2f4877869f90e"},
+ {file = "pybcj-1.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c2b3e60b65c7ac73e44335934e1e122da8d56db87840984601b3c5dc0ae4c19"},
+ {file = "pybcj-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746550dc7b5af4d04bb5fa4d065f18d39c925bcb5dee30db75747cd9a58bb6e8"},
+ {file = "pybcj-1.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8ce9b62b6aaa5b08773be8a919ecc4e865396c969f982b685eeca6e80c82abb7"},
+ {file = "pybcj-1.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:493eab2b1f6f546730a6de0c5ceb75ce16f3767154e8ae30e2b70d41b928b7d2"},
+ {file = "pybcj-1.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:ef55b96b7f2ed823e0b924de902065ec42ade856366c287dbb073fabd6b90ec1"},
+ {file = "pybcj-1.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ed5b3dd9c209fe7b90990dee4ef21870dca39db1cd326553c314ee1b321c1cc"},
+ {file = "pybcj-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22a94885723f8362d4cb468e68910eef92d3e2b1293de82b8eacb4198ef6655f"},
+ {file = "pybcj-1.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b8f9368036c9e658d8e3b3534086d298a5349c864542b34657cbe57c260daa49"},
+ {file = "pybcj-1.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87108181c7a6ac4d3fc1e4551cab5db5eea7f9fdca611175243234cd94bcc59b"},
+ {file = "pybcj-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db57f26b8c0162cfddb52b869efb1741b8c5e67fc536994f743074985f714c55"},
+ {file = "pybcj-1.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bdf5bcac4f1da36ad43567ea6f6ef404347658dbbe417c87cdb1699f327d6337"},
+ {file = "pybcj-1.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c3171bb95c9b45cbcad25589e1ae4f4ca4ea99dc1724c4e0671eb6b9055514e"},
+ {file = "pybcj-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:f9a2585e0da9cf343ea27421995b881736a1eb604a7c1d4ca74126af94c3d4a8"},
+ {file = "pybcj-1.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fdb7cd8271471a5979d84915c1ee57eea7e0a69c893225fc418db66883b0e2a7"},
+ {file = "pybcj-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e96ae14062bdcddc3197300e6ee4efa6fbc6749be917db934eac66d0daaecb68"},
+ {file = "pybcj-1.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a54ebdc8423ba99d75372708a882fcfc3b14d9d52cf195295ad53e5a47dab37f"},
+ {file = "pybcj-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3602be737c6e9553c45ae89e6b0e556f64f34dabf27d5260317d1824d31b79d3"},
+ {file = "pybcj-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63dd2ca52a48841f561bfec0fa3f208d375b0a8dcd3d7b236459e683ae29221d"},
+ {file = "pybcj-1.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8204a714029784b1a08a3d790430d80b423b68615c5b1e67aabca5bd5419b77d"},
+ {file = "pybcj-1.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fde2376b180ae2620c102fbc3ef06638d306feae83964aaa5051ecbdda54845a"},
+ {file = "pybcj-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:3b8d7810fb587adbffba025330cf212d9bbed8f29559656d05cb6609673f306a"},
+ {file = "pybcj-1.0.2.tar.gz", hash = "sha256:c7f5bef7f47723c53420e377bc64d2553843bee8bcac5f0ad076ab1524780018"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8 (<5)", "flake8-black", "flake8-colors", "flake8-isort", "flake8-pyi", "flake8-typing-imports", "mypy (>=0.812)", "mypy-extensions (>=0.4.3)", "pygments", "readme-renderer"]
+test = ["coverage[toml] (>=5.2)", "hypothesis", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "pycodestyle"
+version = "2.11.1"
+description = "Python style guide checker"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"},
+ {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"},
+]
+
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+
+[[package]]
+name = "pycryptodomex"
+version = "3.19.0"
+description = "Cryptographic library for Python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:61056a1fd3254f6f863de94c233b30dd33bc02f8c935b2000269705f1eeeffa4"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:258c4233a3fe5a6341780306a36c6fb072ef38ce676a6d41eec3e591347919e8"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e45bb4635b3c4e0a00ca9df75ef6295838c85c2ac44ad882410cb631ed1eeaa"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a12144d785518f6491ad334c75ccdc6ad52ea49230b4237f319dbb7cef26f464"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:1789d89f61f70a4cd5483d4dfa8df7032efab1118f8b9894faae03c967707865"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:c9a68a2f7bd091ccea54ad3be3e9d65eded813e6d79fdf4cc3604e26cdd6384f"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8df69e41f7e7015a90b94d1096ec3d8e0182e73449487306709ec27379fff761"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:917033016ecc23c8933205585a0ab73e20020fdf671b7cd1be788a5c4039840b"},
+ {file = "pycryptodomex-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:e8e5ecbd4da4157889fce8ba49da74764dd86c891410bfd6b24969fa46edda51"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:a77b79852175064c822b047fee7cf5a1f434f06ad075cc9986aa1c19a0c53eb0"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5b883e1439ab63af976656446fb4839d566bb096f15fc3c06b5a99cde4927188"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3866d68e2fc345162b1b9b83ef80686acfe5cec0d134337f3b03950a0a8bf56"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74eb1f73f788facece7979ce91594dc177e1a9b5d5e3e64697dd58299e5cb4d"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cb51096a6a8d400724104db8a7e4f2206041a1f23e58924aa3d8d96bcb48338"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a588a1cb7781da9d5e1c84affd98c32aff9c89771eac8eaa659d2760666f7139"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:d4dd3b381ff5a5907a3eb98f5f6d32c64d319a840278ceea1dcfcc65063856f3"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:263de9a96d2fcbc9f5bd3a279f14ea0d5f072adb68ebd324987576ec25da084d"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-win32.whl", hash = "sha256:67c8eb79ab33d0fbcb56842992298ddb56eb6505a72369c20f60bc1d2b6fb002"},
+ {file = "pycryptodomex-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc"},
+ {file = "pycryptodomex-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2"},
+ {file = "pycryptodomex-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c"},
+ {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5d73e9fa3fe830e7b6b42afc49d8329b07a049a47d12e0ef9225f2fd220f19b2"},
+ {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975"},
+ {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfb040b5dda1dff1e197d2ef71927bd6b8bfcb9793bc4dfe0bb6df1e691eaacb"},
+ {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:800a2b05cfb83654df80266692f7092eeefe2a314fa7901dcefab255934faeec"},
+ {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c01678aee8ac0c1a461cbc38ad496f953f9efcb1fa19f5637cbeba7544792a53"},
+ {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2126bc54beccbede6eade00e647106b4f4c21e5201d2b0a73e9e816a01c50905"},
+ {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b801216c48c0886742abf286a9a6b117e248ca144d8ceec1f931ce2dd0c9cb40"},
+ {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:50cb18d4dd87571006fd2447ccec85e6cec0136632a550aa29226ba075c80644"},
+ {file = "pycryptodomex-3.19.0.tar.gz", hash = "sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6"},
+]
+
+[[package]]
+name = "pydantic"
+version = "1.10.13"
+description = "Data validation and settings management using python type hints"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"},
+ {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"},
+ {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"},
+ {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"},
+ {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"},
+ {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"},
+ {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"},
+ {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"},
+ {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"},
+ {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"},
+ {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"},
+ {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"},
+ {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"},
+ {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"},
+ {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"},
+ {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"},
+ {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"},
+ {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"},
+ {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"},
+ {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"},
+ {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"},
+ {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"},
+ {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"},
+ {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"},
+ {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"},
+ {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"},
+ {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"},
+ {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"},
+ {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"},
+ {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"},
+ {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"},
+ {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"},
+ {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"},
+ {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"},
+ {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"},
+ {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"},
+]
+
+[package.dependencies]
+python-dotenv = {version = ">=0.10.4", optional = true, markers = "extra == \"dotenv\""}
+typing-extensions = ">=4.2.0"
+
+[package.extras]
+dotenv = ["python-dotenv (>=0.10.4)"]
+email = ["email-validator (>=1.0.3)"]
+
+[[package]]
+name = "pydocstyle"
+version = "6.3.0"
+description = "Python docstring style checker"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"},
+ {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"},
+]
+
+[package.dependencies]
+snowballstemmer = ">=2.2.0"
+
+[package.extras]
+toml = ["tomli (>=1.2.3)"]
+
+[[package]]
+name = "pyflakes"
+version = "3.1.0"
+description = "passive checker of Python programs"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"},
+ {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"},
+]
+
+[[package]]
+name = "pygments"
+version = "2.17.2"
+description = "Pygments is a syntax highlighting package written in Python."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
+ {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
+]
+
+[package.extras]
+plugins = ["importlib-metadata"]
+windows-terminal = ["colorama (>=0.4.6)"]
+
+[[package]]
+name = "pyppmd"
+version = "1.1.0"
+description = "PPMd compression/decompression library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pyppmd-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5cd428715413fe55abf79dc9fc54924ba7e518053e1fc0cbdf80d0d99cf1442"},
+ {file = "pyppmd-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e96cc43f44b7658be2ea764e7fa99c94cb89164dbb7cdf209178effc2168319"},
+ {file = "pyppmd-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dd20142869094bceef5ab0b160f4fff790ad1f612313a1e3393a51fc3ba5d57e"},
+ {file = "pyppmd-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4f9b51e45c11e805e74ea6f6355e98a6423b5bbd92f45aceee24761bdc3d3b8"},
+ {file = "pyppmd-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:459f85e928fb968d0e34fb6191fd8c4e710012d7d884fa2b317b2e11faac7c59"},
+ {file = "pyppmd-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f73cf2aaf60477eef17f5497d14b6099d8be9748390ad2b83d1c88214d050c05"},
+ {file = "pyppmd-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2ea3ae0e92c0b5345cd3a4e145e01bbd79c2d95355481ea5d833b5c0cb202a2d"},
+ {file = "pyppmd-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:775172c740133c0162a01c1a5443d0e312246881cdd6834421b644d89a634b91"},
+ {file = "pyppmd-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:14421030f1d46f69829698bdd960698a3b3df0925e3c470e82cfcdd4446b7bc1"},
+ {file = "pyppmd-1.1.0-cp310-cp310-win32.whl", hash = "sha256:b691264f9962532aca3bba5be848b6370e596d0a2ca722c86df388be08d0568a"},
+ {file = "pyppmd-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:216b0d969a3f06e35fbfef979706d987d105fcb1e37b0b1324f01ee143719c4a"},
+ {file = "pyppmd-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1f8c51044ee4df1b004b10bf6b3c92f95ea86cfe1111210d303dca44a56e4282"},
+ {file = "pyppmd-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac25b3a13d1ac9b8f0bde46952e10848adc79d932f2b548a6491ef8825ae0045"},
+ {file = "pyppmd-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8d3003eebe6aabe22ba744a38a146ed58a25633420d5da882b049342b7c8036"},
+ {file = "pyppmd-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c520656bc12100aa6388df27dd7ac738577f38bf43f4a4bea78e1861e579ea5"},
+ {file = "pyppmd-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c2a3e807028159a705951f5cb5d005f94caed11d0984e59cc50506de543e22d"},
+ {file = "pyppmd-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8a2447e69444703e2b273247bfcd4b540ec601780eff07da16344c62d2993d"},
+ {file = "pyppmd-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b9e0c8053e69cad6a92a0889b3324f567afc75475b4f54727de553ac4fc85780"},
+ {file = "pyppmd-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5938d256e8d2a2853dc3af8bb58ae6b4a775c46fc891dbe1826a0b3ceb624031"},
+ {file = "pyppmd-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1ce5822d8bea920856232ccfb3c26b56b28b6846ea1b0eb3d5cb9592a026649e"},
+ {file = "pyppmd-1.1.0-cp311-cp311-win32.whl", hash = "sha256:2a9e894750f2a52b03e3bc0d7cf004d96c3475a59b1af7e797d808d7d29c9ffe"},
+ {file = "pyppmd-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:969555c72e72fe2b4dd944127521a8f2211caddb5df452bbc2506b5adfac539e"},
+ {file = "pyppmd-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d6ef8fd818884e914bc209f7961c9400a4da50d178bba25efcef89f09ec9169"},
+ {file = "pyppmd-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95f28e2ecf3a9656bd7e766aaa1162b6872b575627f18715f8b046e8617c124a"},
+ {file = "pyppmd-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f3557ea65ee417abcdf5f49d35df00bb9f6f252639cae57aeefcd0dd596133"},
+ {file = "pyppmd-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e84b25d088d7727d50218f57f92127cdb839acd6ec3de670b6680a4cf0b2d2a"},
+ {file = "pyppmd-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99ed42891986dac8c2ecf52bddfb777900233d867aa18849dbba6f3335600466"},
+ {file = "pyppmd-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6fe69b82634488ada75ba07efb90cd5866fa3d64a2c12932b6e8ae207a14e5f"},
+ {file = "pyppmd-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:60981ffde1fe6ade750b690b35318c41a1160a8505597fda2c39a74409671217"},
+ {file = "pyppmd-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46e8240315476f57aac23d71e6de003e122b65feba7c68f4cc46a089a82a7cd4"},
+ {file = "pyppmd-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0308e2e76ecb4c878a18c2d7a7c61dbca89b4ef138f65d5f5ead139154dcdea"},
+ {file = "pyppmd-1.1.0-cp312-cp312-win32.whl", hash = "sha256:b4fa4c27dc1314d019d921f2aa19e17f99250557e7569eeb70e180558f46af74"},
+ {file = "pyppmd-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c269d21e15f4175df27cf00296476097af76941f948734c642d7fb6e85b9b3b9"},
+ {file = "pyppmd-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a04ef5fd59818b035855723af85ce008c8191d31216706ffcbeedc505efca269"},
+ {file = "pyppmd-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e3ebcf5f95142268afa5cc46457d9dab2d29a3ccfd020a1129dd9d6bd021be1"},
+ {file = "pyppmd-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4ad046a9525d1f52e93bc642a4cec0bf344a3ba1a15923e424e7a50f8ca003d8"},
+ {file = "pyppmd-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:169e5023c86ed1f7587961900f58aa78ad8a3d59de1e488a2228b5ba3de52402"},
+ {file = "pyppmd-1.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baf798e76edd9da975cc536f943756a1b1755eb8ed87371f86f76d7c16e8d034"},
+ {file = "pyppmd-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63be8c068879194c1e7548d0c57f54a4d305ba204cd0c7499b678f0aee893ef"},
+ {file = "pyppmd-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5fc178a3c21af78858acbac9782fca6a927267694c452e0882c55fec6e78319"},
+ {file = "pyppmd-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:28a1ab1ef0a31adce9b4c837b7b9acb01ce8f1f702ff3ff884f03d21c2f6b9bb"},
+ {file = "pyppmd-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5fef43bfe98ada0a608adf03b2d205e071259027ab50523954c42eef7adcef67"},
+ {file = "pyppmd-1.1.0-cp38-cp38-win32.whl", hash = "sha256:6b980902797eab821299a1c9f42fa78eff2826a6b0b0f6bde8a621f9765ffd55"},
+ {file = "pyppmd-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:80cde69013f357483abe0c3ff30c55dc5e6b4f72b068f91792ce282c51dc0bff"},
+ {file = "pyppmd-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aeea1bf585c6b8771fa43a6abd704da92f8a46a6d0020953af15d7f3c82e48c"},
+ {file = "pyppmd-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7759bdb137694d4ab0cfa5ff2c75c212d90714c7da93544694f68001a0c38e12"},
+ {file = "pyppmd-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:db64a4fe956a2e700a737a1d019f526e6ccece217c163b28b354a43464cc495b"},
+ {file = "pyppmd-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f788ae8f5a9e79cd777b7969d3401b2a2b87f47abe306c2a03baca30595e9bd"},
+ {file = "pyppmd-1.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:324a178935c140210fca2043c688b77e79281da8172d2379a06e094f41735851"},
+ {file = "pyppmd-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:363030bbcb7902fb9eeb59ffc262581ca5dd7790ba950328242fd2491c54d99b"},
+ {file = "pyppmd-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:31b882584f86440b0ff7906385c9f9d9853e5799197abaafdae2245f87d03f01"},
+ {file = "pyppmd-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b991b4501492ec3380b605fe30bee0b61480d305e98519d81c2a658b2de01593"},
+ {file = "pyppmd-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6108044d943b826f97a9e79201242f61392d6c1fadba463b2069c4e6bc961e1"},
+ {file = "pyppmd-1.1.0-cp39-cp39-win32.whl", hash = "sha256:c45ce2968b7762d2cacf622b0a8f260295c6444e0883fd21a21017e3eaef16ed"},
+ {file = "pyppmd-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5289f32ab4ec5f96a95da51309abd1769f928b0bff62047b3bc25c878c16ccb"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ad5da9f7592158e6b6b51d7cd15e536d8b23afbb4d22cba4e5744c7e0a3548b1"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc6543e7d12ef0a1466d291d655e3d6bca59c7336dbb53b62ccdd407822fb52b"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5e4008a45910e3c8c227f6f240de67eb14454c015dc3d8060fc41e230f395d3"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9301fa39d1fb0ed09a10b4c5d7f0074113e96a1ead16ba7310bedf95f7ef660c"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:59521a3c6028da0cb5780ba16880047b00163432a6b975da2f6123adfc1b0be8"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d7ec02f1778dd68547e497625d66d7858ce10ea199146eb1d80ee23ba42954be"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f062ca743f9b99fe88d417b4d351af9b4ff1a7cbd3d765c058bb97de976d57f1"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088e326b180a0469ac936849f5e1e5320118c22c9d9e673e9c8551153b839c84"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:897fa9ab5ff588a1000b8682835c5acf219329aa2bbfec478100e57d1204eeab"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3af4338cc48cd59ee213af61d936419774a0f8600b9aa2013cd1917b108424f0"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cce8cd2d4ceebe2dbf41db6dfebe4c2e621314b3af8a2df2cba5eb5fa277f122"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62e57927dbcb91fb6290a41cd83743b91b9d85858efb16a0dd34fac208ee1c6b"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:435317949a6f35e54cdf08e0af6916ace427351e7664ac1593980114668f0aaa"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f66b0d0e32b8fb8707f1d2552f13edfc2917e8ed0bdf4d62e2ce190d2c70834"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:650a663a591e06fb8096c213f4070b158981c8c3bf9c166ce7e4c360873f2750"},
+ {file = "pyppmd-1.1.0.tar.gz", hash = "sha256:1d38ce2e4b7eb84b53bc8a52380b94f66ba6c39328b8800b30c2b5bf31693973"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8 (<5)", "flake8-black", "flake8-isort", "isort (>=5.0.3)", "mypy (>=0.812)", "mypy-extensions (>=0.4.3)", "pygments", "readme-renderer"]
+docs = ["sphinx (>=2.3)", "sphinx-rtd-theme"]
+fuzzer = ["atheris", "hypothesis"]
+test = ["coverage[toml] (>=5.2)", "hypothesis", "pytest (>=6.0)", "pytest-benchmark", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "pytest"
+version = "7.4.3"
+description = "pytest: simple powerful testing with Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"},
+ {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
+iniconfig = "*"
+packaging = "*"
+pluggy = ">=0.12,<2.0"
+tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
+
+[package.extras]
+testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
+
+[[package]]
+name = "pytest-cases"
+version = "3.8.1"
+description = "Separate test code from test cases in pytest."
+optional = false
+python-versions = "*"
+files = [
+ {file = "pytest-cases-3.8.1.tar.gz", hash = "sha256:49d7f6f8ad534e5a6e73fb8f5fd38986606f17b46ee55f7ebee07a55c677ca01"},
+ {file = "pytest_cases-3.8.1-py2.py3-none-any.whl", hash = "sha256:595553f5a522ad6525778a35e0fcb4a46f8eb069e0abe108de02e1d4fb136b85"},
+]
+
+[package.dependencies]
+decopatch = "*"
+makefun = ">=1.15.1"
+packaging = "*"
+
+[[package]]
+name = "pytest-cov"
+version = "4.1.0"
+description = "Pytest plugin for measuring coverage."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"},
+ {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"},
+]
+
+[package.dependencies]
+coverage = {version = ">=5.2.1", extras = ["toml"]}
+pytest = ">=4.6"
+
+[package.extras]
+testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"]
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+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"},
+]
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "python-dotenv"
+version = "1.0.0"
+description = "Read key-value pairs from a .env file and set them as environment variables"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"},
+ {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"},
+]
+
+[package.extras]
+cli = ["click (>=5.0)"]
+
+[[package]]
+name = "python-json-logger"
+version = "2.0.7"
+description = "A python library adding a json log formatter"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"},
+ {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"},
+]
+
+[[package]]
+name = "python-multipart"
+version = "0.0.6"
+description = "A streaming multipart parser for Python"
+optional = false
+python-versions = ">=3.7"
+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"},
+]
+
+[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)"]
+
+[[package]]
+name = "pytz"
+version = "2023.3.post1"
+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"},
+]
+
+[[package]]
+name = "pywin32"
+version = "306"
+description = "Python for Window Extensions"
+optional = false
+python-versions = "*"
+files = [
+ {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"},
+ {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"},
+ {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"},
+ {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"},
+ {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"},
+ {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"},
+ {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"},
+ {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"},
+ {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"},
+ {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"},
+ {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"},
+ {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"},
+ {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"},
+ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"},
+]
+
+[[package]]
+name = "pywinpty"
+version = "2.0.12"
+description = "Pseudo terminal support for Windows from Python."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"},
+ {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"},
+ {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"},
+ {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"},
+ {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"},
+ {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"},
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.1"
+description = "YAML parser and emitter for Python"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+ {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
+ {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
+ {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
+ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+]
+
+[[package]]
+name = "pyzmq"
+version = "25.1.1"
+description = "Python bindings for 0MQ"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"},
+ {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"},
+ {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"},
+ {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"},
+ {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"},
+ {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"},
+ {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"},
+ {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"},
+ {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"},
+ {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"},
+ {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"},
+ {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"},
+ {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"},
+ {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"},
+ {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"},
+ {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"},
+ {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"},
+ {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"},
+ {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"},
+ {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"},
+ {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"},
+ {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"},
+ {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"},
+ {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"},
+ {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"},
+ {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"},
+ {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"},
+ {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"},
+ {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"},
+ {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"},
+ {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"},
+ {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"},
+ {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"},
+ {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"},
+ {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"},
+ {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"},
+ {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"},
+ {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"},
+ {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"},
+ {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"},
+ {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"},
+ {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"},
+]
+
+[package.dependencies]
+cffi = {version = "*", markers = "implementation_name == \"pypy\""}
+
+[[package]]
+name = "pyzstd"
+version = "0.15.9"
+description = "Python bindings to Zstandard (zstd) compression library, the API style is similar to Python's bz2/lzma/zlib modules."
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "pyzstd-0.15.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:209a92fbe892bd69cde58ffcb4861468e2c3c2d0626763e16e122bb55cb1fb1a"},
+ {file = "pyzstd-0.15.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f6d8a881b50bb2015e9bdba5edb0331e85d41ff44ab33cde551047480b98d748"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdc09de97b1b3f6c3d87fec04d6fe29dd4fefe6b354ad2d822fc369b8aa0942b"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1b81cc86b69ff530d45e735ed479e14704999f534ad28a39f04be4a8fe2b91f"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fb00c706d0b59c53124f982bd84b7d46866a8ea2a7670aaaa1ab4dbe6001b50"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606b2452d78f0f731566d392f8d83cd012c2ffadb2cb2e2903fdd360c1faac8a"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23695dabdfd5081beab25754dc0105b42fbd2085a7c293901bcb45045969c5ec"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74455bd918e7bc9883e3178a1a8fe796308670f0ee4488c80a0d9514e13807a1"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6128cb653d011f3781554b70ce1f1f388cd516820fbaf8fd03ee245ecaa48349"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a708b9e6ff1826504940beb6b5c2c9dfd4e3b55c16ab88a4572f5b9dbb64cc56"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:1b9cda5314982d64c856f9298be0d9bf69fbff0ca514d1651037616354b473ff"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:f7cfc683d320402d61205a196ace77f15dcfd16b5771f8b9ffaf406868c98e78"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f0fe2ef7ebc6e9b347585e414c4fefd32270ba8bdf9eb82496f3030cbdca465"},
+ {file = "pyzstd-0.15.9-cp310-cp310-win32.whl", hash = "sha256:e8f75e839ee253af60b03d9957182fdd069dfaebb62b4e999bd74016f4e120bb"},
+ {file = "pyzstd-0.15.9-cp310-cp310-win_amd64.whl", hash = "sha256:77294f0f797c97a46ffb3daff1fe097c9d5aa9f96867333978e6791286963e50"},
+ {file = "pyzstd-0.15.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:afef9eb882cf3b395eef9c85b737a4acd09528975e6a5d9faedf28874ca65f52"},
+ {file = "pyzstd-0.15.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44a7d4586f02b630658298c089ff755e74d0677b93c71e09d33dd35bdd4987a"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cbf212253abd65e6451acdfb608adafe98ad8f05462fb9a054ddab816545caa"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5819d502dacd54114c30bc24efcb76e723b93f8f528be70851056a396a792c46"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50ccbaafee80b4f1c5c55bbe07f80871b9b8fe3499bf7357dde2c23fb1c2ac0e"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c420878726d677da7484f6021dbe7e1f9345a791b155de632c6ce36678fb621"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14121a4d95070f54bdc9a80dab1dd8fd9093907a1e687926447ca69b5b40a4d5"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:00c188704141c709da96cc4a79f058d51f5318e839d6f904c7cc9badcf78e98e"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:836f1d85a4b5d3689d455aeb1dc6c42acb96aaf8e5282825c00ccf2545ad5630"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:91453ce9476363d777b2ea2e9c6dccecd2073cf35697e048de2e8d47e1f36c7c"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c249741b10eb714578d765487b767e0e7fcc2ac84a299209a6073566e730dbea"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:542808d88464d538f5d2c6b48b545a7fe15f0d20c7fa703b469d039a08c9fa10"},
+ {file = "pyzstd-0.15.9-cp311-cp311-win32.whl", hash = "sha256:e79babb67b415aa54abb213897ceaa011515a5f3e146a2a97f4e6486b9743af4"},
+ {file = "pyzstd-0.15.9-cp311-cp311-win_amd64.whl", hash = "sha256:ef3399e0544b46d31c2a8ff14ae1fb3c3571ae1153bbbc5ddf0d242c67bde624"},
+ {file = "pyzstd-0.15.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:418e9a676cc7ce00edd2fd044ee063c8639fd8cd6897ffda395a152cdc66ec97"},
+ {file = "pyzstd-0.15.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:52dcae42f32f7a25c6b90bd479f3d04902700e3214e8fffe1bfe70053eb35ccb"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c36dbbf71480f1fffeaeca901adb31e0c7d59270a239eca63fe26e4647b7aca8"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfa981cedd54bb8862d9033440a0afac38845db89e7099ceeb4f4d064dffd2f8"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:937f118fdd7a23654886634f650d6502a2dd12c8a8e2bf14beb2fa5fa95058bf"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:922f1bb8ef80c42a2fca297ba0b03442c143a9a1f717e83db79f190514888803"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78c38850af6b990e8ec1bc87b48f73ed5cc633f4baaa7bbc78f9b2f4449cf081"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5453ebe42a2c7462fa532fd03cbf64e5c6baf5508b3089736c78444148d3c593"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:da070933d4bcfcbf58472da12ffa77c9fbc90efb39e21a9b74eb04b5af4b412a"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:c8d1966e38c220d5940f8cb6303651af261f0bcfce77218a030b1a24ec986e2f"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:145ca5ed6240af2cbfc09faa50aada8aacf1e2928ed6dd9da1d6b8ebe39cdc4c"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9638d40ec02a5b194a4c98a5b6e36cdfde4e9d6b721ae6167ef8e57d2e69002f"},
+ {file = "pyzstd-0.15.9-cp312-cp312-win32.whl", hash = "sha256:f73821d429bfbb04645b80ec491ab05b35078f031f9fa3273fbf9027d1406233"},
+ {file = "pyzstd-0.15.9-cp312-cp312-win_amd64.whl", hash = "sha256:02c95d7109052c985b7d90dac6f6010bc0630227f15aec16302162107137bdbc"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6a8d43a0c294918e3afb7e4b1d8c04d2e4c3ea9ddf05475fdaf366c7e5b3a6"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aed5fc86d0bfc5f16e871cbb35ec93df61476d7fde4c1c6081015a075ecfbc1"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f9eb97fb6fd4551ff9d5012b4fcee9abeea9c8af6b9e3ebc3c76cc2bd0a43a7"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fd7cf79949174d1018b896638f88aea1ff2a969f87a6199ea23b25b506e26c5"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51607d7d44f94a364ef0e3ccf9a92390def0faf6e7572eef082f15c657b5d03a"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4358dd80b315c82d760b44c6df7857c9c898d04e7b0c14abb0eb3692354e9379"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:013321ddaff083b24e43a8b06303446771978343b488ed73adf56c70a46e2783"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4ed01beb31d5177456ec2c4b66591a0df83dbc72df29f05f40502bfefe47bbe4"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:69f12ce4866a3725138e97f22f2c4cb21d3ae18cd422906cd57ed12a9ffd86c5"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:305c232462dbe80d0ee5ec91b1b0ec9153ec6ba6393d5348741af5d30b07ef52"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:9e1097d8b57f64878a3f176f4cd6b9a1bbe9fb2d236f1a85a4357722626d8f25"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6c456882baab2a48a5bfabe458a557af25d0768ff29acbe200461e84c0f697d5"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-win32.whl", hash = "sha256:97e05f66c5847e6889594508298d78ddb84a0115e9234d598415dc5a06d3a4a7"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-win_amd64.whl", hash = "sha256:87a1a4ca93da414f3b6da8131e61aca6d48a4e837fb0b1cbde05ae9d13332317"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:20f2dd56d46441cd9277077060c34c0b9ce3469412665ea5ccd506dd2708d994"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9c5fc29a5b9d61a8f0a3494172107e0e6cf23d0cb800d6285c6722ba7fc3535"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f281cc2f096530c339f122e0d9866545f5592dd9bffe0fade565c2771130a45"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2dd39e12f7467a7422ce50711524759d4d22016714cbae6a7096b954bc2fa32"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d3a1b6fa71a0ae7abc320d9db91b5a96a71eef1dbee0d62a6232b71c97af962"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c31f6dd5bd60688d51487a3f5e2ae29ed1948926e44d7a2316b193b083f80d5d"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dcb2172ca8b62f82af9d1f8db80c21c64c5ba3991935caefde88bb378f0afb51"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f66790e4b2dcfcabc0aa54dd89317ea5671cabf06aa93cbef7cbdd4d2fdb7ee3"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:960ab83a977a44284c4ffab2820ccd6c9b332571a3d622fefa4b29b0a5de72b0"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:12668ceb8329aaa908b4d907d3a77bb748ff28b309c3b105c995a8715d535d2b"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:441078bfd3b508597415338af667c3575980364f1286eedde58291558b9c2832"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:866ba6ce85f337fa1677516217b6f10fc25e19acb6e17a501d5822e66396bdd5"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-win32.whl", hash = "sha256:b4de7741d542a477387299bf9450e8be3e768c352d6b3438254eb02af1e59462"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-win_amd64.whl", hash = "sha256:d0929302d187bfeca335b7f710f774f1b2ea3f610b2a80e8a1ac2da216cd9766"},
+ {file = "pyzstd-0.15.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c46e77c2ad614a0399503dc675d72436cbf6332a20d49a0e5bad03058d6cbfad"},
+ {file = "pyzstd-0.15.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e789e19095b818f7126180b4387c0f01700c3ad2378a4e7649b2ddf4bf47ffbc"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9596aeb8c71192f4fba1ca25cec420da195219398d2df811d5082559efd9561f"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f72f310b10b730cddfb654006ae497e7706c81e6a7642d3da7fd2439df7d88d"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a60ee6836599363a24367cf780ad45446b07eba49ec72d19bad761d5414aca7"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aff1b469187f6c789cdf17cd95c9b24e87396dc86953b1cf38b9a05cea873c80"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d9ec8634ab0cbfbcff535ac07555ebdae0282ad66762f0471fad11c16181e33"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc92a718bccb8ce5c9eb63fca743c38f3fa4c4e47f58f0c4ada51b2474668184"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f2839c13e486e4a23b19b1d2dc4624565cec6c228bbf803c066be1106515966b"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:346f835e368e1051f8ea187ad9b49759cf6249c9ebf2f2a3861e435a568104b8"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:5345c7a697327e2fa7c37534bb2968ea84595d8ec7fc8c4a60216ec1be6e65bd"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:49c57ae18f138a4b66480b2364fe6a0f2345ada919e93fc729c95c6b17ec73a4"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2919afd114fd12309ed2f831ef6e95730ebf13c2a92d258ad055769d00ef4d7a"},
+ {file = "pyzstd-0.15.9-cp38-cp38-win32.whl", hash = "sha256:370b34a7c2f9c53cee494028daa5a7264690e1756a89c3855fd0be5ad298ec30"},
+ {file = "pyzstd-0.15.9-cp38-cp38-win_amd64.whl", hash = "sha256:7ac886e04f253960ae82e38ded8352085c61d78de99412d178a94ecf475b5e5f"},
+ {file = "pyzstd-0.15.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:250dad90140a6faea4cef555f339b6ceaad5cf03ed1127b8d06de214ff0db2e7"},
+ {file = "pyzstd-0.15.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5b517fbbc5d223fc36041673e7c2a0d3a82be6a5464a5f0599069330b76f97d"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ac634753f6d26cba503cea7bb5b350aec7c5366f44fa68c79e9c90be9fd0ebc"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2ae8993f3863632d31ca8921c8a5dc9ecc5551c7b88895cefb5a26d17643391"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7452ae7e6d80e697d78d3f56d1b4d2a350286eea229afb35f55ab88b934b6acd"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae3d0575721a372c20130681bfaf873225fd9e1c290b7d56b7e0c14f413318f6"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29e452caaf0de9cc17319225921d8c28cdc7a879948e990ff1e7735e7f976517"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c41e5457f4de5d38a270bc44619873589bbe6fe251225deec583ed20199df0f3"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f169e166774587227255f6ffe71f5b3303ea73cde0e2c6d52e53b9e12c03d787"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:639935b5b3d9ed3911493504581254b76cb578279302f7f340924ac5bfca4090"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e4e00c1600022b47ef0e9e1f893cb0c2322209ec6c1581a3e3f63ed78330ddf0"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d7ddbf234c9adc72189bb552d830e9a0c2c4401b5baf7b003eacd5c552ddcc00"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3351ad2feb51dcbb936defd47cab00d6f114214f224636503ed08298f30164c9"},
+ {file = "pyzstd-0.15.9-cp39-cp39-win32.whl", hash = "sha256:3bc0e7e2cccf78e562ab416daf68448b6552a5b6450a1ff3e15cabfc19254883"},
+ {file = "pyzstd-0.15.9-cp39-cp39-win_amd64.whl", hash = "sha256:40bdb468281a5cd525e2e990b97344f0974e0589bd1b395501c25471fcd7edda"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9589cb79d4e401630481755c92b072aa7ba5505ec81dec865ef43932ec037e4"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a26df749589d898cd3253d2139eb85b867ddffc49286059c8bdb3cb9ce9b545"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9934277abdddf9c733267e4dcc4886de8a3302d28f390237d447e215e8ce47d"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca19213785f864781848e0216cba07e97f563f60a50bbc7885b54461d8c64873"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:84aa6eecba967bdac167451501dcaceec548d8b8c4ca7fa41ceda4dbfc279297"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:47c2a4c319300c381f194274203f47b12c433e1fd86b90ecdc7fb258c630f93b"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86e0e65e205793b337d62d9764700dfd02b5f83b01e26ad345736e7ac0554ebd"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64564f4c175c5bb8e744de5816d69ee0b940e472160a5e665f30adc412b694f3"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dca286c6c1ca5febf13f5f2ae7e8aa7536e49bd07f4232796651a43ff741ceca"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a594795ef89bd83297c860ff585f2d25580ce9805eb9cc44c831d311e7f1951a"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:4a0dcb32ac4d1d67a77ae6a2d60ea0921af7e682b3427202d8acb8e86642391c"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a90b901ccfd24b028faea19c927ff03f3cfefe82ba0b931fbb8da4ef0664911b"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f60f01884350aec24e7a68f3ad089151b7a636490203c41a1a7c8e0cddd9b8"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1d8b58f00137ccbe8b828a5ede92be3f0115cef75e6bed88d4d0bd1e7a0b1fc"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2b093a74b10232c70b5d29814fcee6544bb6f30e2d922d26db9ab4b4cd00c04"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1dbe76b6d8fe75f6dbec24793fc07b1d1ae9464de9941138d5b9668f7670e6b0"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6b9af8d62c087354abd071e01d9445ea51b31779c8a4a0d5c14ee12caee3d18f"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a4f786f1b1ab39a0908db04ebe5b2c7cbc6f1ce07a27d3a12eb980bffd7fea7d"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cffaab46f9e04856dc3daa6097bfb3d3bea0b1771237e869c57b13f3dcc2c238"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4334e972109bdd17fb40dbdd9fcca6137648cab416fca505a2dcd186f50533"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73877eebbdcb8259cf0099665f8c8274d4273b361371405a611fb6bd9f4d64f6"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:289e25871fe232d2482c0985a75a1faa7c92e10a6c3e3914d165f62d005d0aa6"},
+ {file = "pyzstd-0.15.9.tar.gz", hash = "sha256:cbfdde6c5768ffa5d2f14127bbc1d7c3c2d03c0ceaeb0736946197e06275ccc7"},
+]
+
+[[package]]
+name = "referencing"
+version = "0.31.1"
+description = "JSON Referencing + Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "referencing-0.31.1-py3-none-any.whl", hash = "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d"},
+ {file = "referencing-0.31.1.tar.gz", hash = "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
+[[package]]
+name = "regex"
+version = "2023.10.3"
+description = "Alternative regular expression module, to replace re."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"},
+ {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"},
+ {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"},
+ {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"},
+ {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"},
+ {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"},
+ {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"},
+ {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"},
+ {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"},
+ {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"},
+ {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"},
+ {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"},
+ {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"},
+ {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"},
+ {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"},
+ {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"},
+ {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"},
+ {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"},
+ {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"},
+ {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"},
+ {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"},
+ {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"},
+ {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"},
+ {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"},
+]
+
+[[package]]
+name = "requests"
+version = "2.31.0"
+description = "Python HTTP for Humans."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<3"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+
+[[package]]
+name = "restructuredtext-lint"
+version = "1.4.0"
+description = "reStructuredText linter"
+optional = false
+python-versions = "*"
+files = [
+ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"},
+]
+
+[package.dependencies]
+docutils = ">=0.11,<1.0"
+
+[[package]]
+name = "rfc3339-validator"
+version = "0.1.4"
+description = "A pure python RFC3339 validator"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"},
+ {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"},
+]
+
+[package.dependencies]
+six = "*"
+
+[[package]]
+name = "rfc3986-validator"
+version = "0.1.1"
+description = "Pure python rfc3986 validator"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"},
+ {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"},
+]
+
+[[package]]
+name = "rich"
+version = "13.7.0"
+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"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=2.2.0"
+pygments = ">=2.13.0,<3.0.0"
+
+[package.extras]
+jupyter = ["ipywidgets (>=7.5.1,<9)"]
+
+[[package]]
+name = "rpds-py"
+version = "0.13.2"
+description = "Python bindings to Rust's persistent data structures (rpds)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "rpds_py-0.13.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d"},
+ {file = "rpds_py-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3"},
+ {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7"},
+ {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914"},
+ {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb"},
+ {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1"},
+ {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266"},
+ {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d"},
+ {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f"},
+ {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea"},
+ {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1"},
+ {file = "rpds_py-0.13.2-cp310-none-win32.whl", hash = "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc"},
+ {file = "rpds_py-0.13.2-cp310-none-win_amd64.whl", hash = "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd"},
+ {file = "rpds_py-0.13.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad"},
+ {file = "rpds_py-0.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42"},
+ {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e"},
+ {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568"},
+ {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2"},
+ {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190"},
+ {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0"},
+ {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c"},
+ {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8"},
+ {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e"},
+ {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d"},
+ {file = "rpds_py-0.13.2-cp311-none-win32.whl", hash = "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7"},
+ {file = "rpds_py-0.13.2-cp311-none-win_amd64.whl", hash = "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211"},
+ {file = "rpds_py-0.13.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381"},
+ {file = "rpds_py-0.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b"},
+ {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2"},
+ {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57"},
+ {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a"},
+ {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658"},
+ {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2"},
+ {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee"},
+ {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2"},
+ {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7"},
+ {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60"},
+ {file = "rpds_py-0.13.2-cp312-none-win32.whl", hash = "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d"},
+ {file = "rpds_py-0.13.2-cp312-none-win_amd64.whl", hash = "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27"},
+ {file = "rpds_py-0.13.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1"},
+ {file = "rpds_py-0.13.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba"},
+ {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0"},
+ {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452"},
+ {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1"},
+ {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815"},
+ {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca"},
+ {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083"},
+ {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a"},
+ {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66"},
+ {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b"},
+ {file = "rpds_py-0.13.2-cp38-none-win32.whl", hash = "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab"},
+ {file = "rpds_py-0.13.2-cp38-none-win_amd64.whl", hash = "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1"},
+ {file = "rpds_py-0.13.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c"},
+ {file = "rpds_py-0.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e"},
+ {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4"},
+ {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3"},
+ {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff"},
+ {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a"},
+ {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0"},
+ {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53"},
+ {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b"},
+ {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0"},
+ {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468"},
+ {file = "rpds_py-0.13.2-cp39-none-win32.whl", hash = "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c"},
+ {file = "rpds_py-0.13.2-cp39-none-win_amd64.whl", hash = "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21"},
+ {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007"},
+ {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9"},
+ {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31"},
+ {file = "rpds_py-0.13.2.tar.gz", hash = "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f"},
+]
+
+[[package]]
+name = "s3transfer"
+version = "0.5.2"
+description = "An Amazon S3 Transfer Manager"
+optional = false
+python-versions = ">= 3.6"
+files = [
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
+]
+
+[package.dependencies]
+botocore = ">=1.12.36,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
+
+[[package]]
+name = "safetensors"
+version = "0.4.1"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "safetensors-0.4.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:cba01c6b76e01ec453933b3b3c0157c59b52881c83eaa0f7666244e71aa75fd1"},
+ {file = "safetensors-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a8f6f679d97ea0135c7935c202feefbd042c149aa70ee759855e890c01c7814"},
+ {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbc2ce1f5ae5143a7fb72b71fa71db6a42b4f6cf912aa3acdc6b914084778e68"},
+ {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d87d993eaefe6611a9c241a8bd364a5f1ffed5771c74840363a6c4ed8d868f6"},
+ {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:097e9af2efa8778cd2f0cba451784253e62fa7cc9fc73c0744d27212f7294e25"},
+ {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d10a9f7bae608ccfdc009351f01dc3d8535ff57f9488a58a4c38e45bf954fe93"},
+ {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:270b99885ec14abfd56c1d7f28ada81740a9220b4bae960c3de1c6fe84af9e4d"},
+ {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:285b52a481e7ba93e29ad4ec5841ef2c4479ef0a6c633c4e2629e0508453577b"},
+ {file = "safetensors-0.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c3c9f0ca510e0de95abd6424789dcbc879942a3a4e29b0dfa99d9427bf1da75c"},
+ {file = "safetensors-0.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:88b4653059c903015284a9722f9a46838c654257173b279c8f6f46dbe80b612d"},
+ {file = "safetensors-0.4.1-cp310-none-win32.whl", hash = "sha256:2fe6926110e3d425c4b684a4379b7796fdc26ad7d16922ea1696c8e6ea7e920f"},
+ {file = "safetensors-0.4.1-cp310-none-win_amd64.whl", hash = "sha256:a79e16222106b2f5edbca1b8185661477d8971b659a3c814cc6f15181a9b34c8"},
+ {file = "safetensors-0.4.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:d93321eea0dd7e81b283e47a1d20dee6069165cc158286316d0d06d340de8fe8"},
+ {file = "safetensors-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ff8e41c8037db17de0ea2a23bc684f43eaf623be7d34906fe1ac10985b8365e"},
+ {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39d36f1d88468a87c437a1bc27c502e71b6ca44c385a9117a9f9ba03a75cc9c6"},
+ {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ef010e9afcb4057fb6be3d0a0cfa07aac04fe97ef73fe4a23138d8522ba7c17"},
+ {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b287304f2b2220d51ccb51fd857761e78bcffbeabe7b0238f8dc36f2edfd9542"},
+ {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e09000b2599e1836314430f81a3884c66a5cbabdff5d9f175b5d560d4de38d78"},
+ {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9c80ce0001efa16066358d2dd77993adc25f5a6c61850e4ad096a2232930bce"},
+ {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:413e1f6ac248f7d1b755199a06635e70c3515493d3b41ba46063dec33aa2ebb7"},
+ {file = "safetensors-0.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3ac139377cfe71ba04573f1cda66e663b7c3e95be850e9e6c2dd4b5984bd513"},
+ {file = "safetensors-0.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:04157d008385bea66d12fe90844a80d4a76dc25ec5230b5bd9a630496d1b7c03"},
+ {file = "safetensors-0.4.1-cp311-none-win32.whl", hash = "sha256:5f25297148ec665f0deb8bd67e9564634d8d6841041ab5393ccfe203379ea88b"},
+ {file = "safetensors-0.4.1-cp311-none-win_amd64.whl", hash = "sha256:b2f8877990a72ff595507b80f4b69036a9a1986a641f8681adf3425d97d3d2a5"},
+ {file = "safetensors-0.4.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:eb2c1da1cc39509d1a55620a5f4d14f8911c47a89c926a96e6f4876e864375a3"},
+ {file = "safetensors-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:303d2c0415cf15a28f8d7f17379ea3c34c2b466119118a34edd9965983a1a8a6"},
+ {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb4cb3e37a9b961ddd68e873b29fe9ab4a081e3703412e34aedd2b7a8e9cafd9"},
+ {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae5497adc68669db2fed7cb2dad81e6a6106e79c9a132da3efdb6af1db1014fa"},
+ {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b30abd0cddfe959d1daedf92edcd1b445521ebf7ddefc20860ed01486b33c90"},
+ {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d784a98c492c751f228a4a894c3b8a092ff08b24e73b5568938c28b8c0e8f8df"},
+ {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57a5ab08b0ec7a7caf30d2ac79bb30c89168431aca4f8854464bb9461686925"},
+ {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:edcf3121890b5f0616aa5a54683b1a5d2332037b970e507d6bb7841a3a596556"},
+ {file = "safetensors-0.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fdb58dee173ef33634c3016c459d671ca12d11e6acf9db008261cbe58107e579"},
+ {file = "safetensors-0.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:780dc21eb3fd32ddd0e8c904bdb0290f2454f4ac21ae71e94f9ce72db1900a5a"},
+ {file = "safetensors-0.4.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:48901bd540f8a3c1791314bc5c8a170927bf7f6acddb75bf0a263d081a3637d4"},
+ {file = "safetensors-0.4.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:3b0b7b2d5976fbed8a05e2bbdce5816a59e6902e9e7c7e07dc723637ed539787"},
+ {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f69903ff49cb30b9227fb5d029bea276ea20d04b06803877a420c5b1b74c689"},
+ {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0ddd050e01f3e843aa8c1c27bf68675b8a08e385d0045487af4d70418c3cb356"},
+ {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a82bc2bd7a9a0e08239bdd6d7774d64121f136add93dfa344a2f1a6d7ef35fa"},
+ {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ace9e66a40f98a216ad661245782483cf79cf56eb2b112650bb904b0baa9db5"},
+ {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82cbb8f4d022f2e94498cbefca900698b8ded3d4f85212f47da614001ff06652"},
+ {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:791edc10a3c359a2f5f52d5cddab0df8a45107d91027d86c3d44e57162e5d934"},
+ {file = "safetensors-0.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:83c2cfbe8c6304f0891e7bb378d56f66d2148972eeb5f747cd8a2246886f0d8c"},
+ {file = "safetensors-0.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:04dd14f53f5500eb4c4149674216ba1000670efbcf4b1b5c2643eb244e7882ea"},
+ {file = "safetensors-0.4.1-cp37-none-win32.whl", hash = "sha256:d5b3defa74f3723a388bfde2f5d488742bc4879682bd93267c09a3bcdf8f869b"},
+ {file = "safetensors-0.4.1-cp37-none-win_amd64.whl", hash = "sha256:25a043cbb59d4f75e9dd87fdf5c009dd8830105a2c57ace49b72167dd9808111"},
+ {file = "safetensors-0.4.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:3f6a520af7f2717c5ecba112041f2c8af1ca6480b97bf957aba81ed9642e654c"},
+ {file = "safetensors-0.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c3807ac3b16288dffebb3474b555b56fe466baa677dfc16290dcd02dca1ab228"},
+ {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b58ba13a9e82b4bc3fc221914f6ef237fe6c2adb13cede3ace64d1aacf49610"},
+ {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dac4bb42f8679aadc59bd91a4c5a1784a758ad49d0912995945cd674089f628e"},
+ {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911b48dc09e321a194def3a7431662ff4f03646832f3a8915bbf0f449b8a5fcb"},
+ {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82571d20288c975c1b30b08deb9b1c3550f36b31191e1e81fae87669a92217d0"},
+ {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da52ee0dc8ba03348ffceab767bd8230842fdf78f8a996e2a16445747143a778"},
+ {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2536b11ce665834201072e9397404170f93f3be10cca9995b909f023a04501ee"},
+ {file = "safetensors-0.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:998fbac99ca956c3a09fe07cc0b35fac26a521fa8865a690686d889f0ff4e4a6"},
+ {file = "safetensors-0.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:845be0aafabf2a60c2d482d4e93023fecffe5e5443d801d7a7741bae9de41233"},
+ {file = "safetensors-0.4.1-cp38-none-win32.whl", hash = "sha256:ce7a28bc8af685a69d7e869d09d3e180a275e3281e29cf5f1c7319e231932cc7"},
+ {file = "safetensors-0.4.1-cp38-none-win_amd64.whl", hash = "sha256:e056fb9e22d118cc546107f97dc28b449d88274207dd28872bd668c86216e4f6"},
+ {file = "safetensors-0.4.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:bdc0d039e44a727824639824090bd8869535f729878fa248addd3dc01db30eae"},
+ {file = "safetensors-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c1b1d510c7aba71504ece87bf393ea82638df56303e371e5e2cf09d18977dd7"},
+ {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd0afd95c1e497f520e680ea01e0397c0868a3a3030e128438cf6e9e3fcd671"},
+ {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f603bdd8deac6726d39f41688ed353c532dd53935234405d79e9eb53f152fbfb"},
+ {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8a85e3e47e0d4eebfaf9a58b40aa94f977a56050cb5598ad5396a9ee7c087c6"},
+ {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0ccb5aa0f3be2727117e5631200fbb3a5b3a2b3757545a92647d6dd8be6658f"},
+ {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d784938534e255473155e4d9f276ee69eb85455b6af1292172c731409bf9adee"},
+ {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a257de175c254d39ccd6a21341cd62eb7373b05c1e618a78096a56a857e0c316"},
+ {file = "safetensors-0.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6fd80f7794554091836d4d613d33a7d006e2b8d6ba014d06f97cebdfda744f64"},
+ {file = "safetensors-0.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35803201d980efcf964b75a0a2aee97fe5e9ecc5f3ad676b38fafdfe98e0620d"},
+ {file = "safetensors-0.4.1-cp39-none-win32.whl", hash = "sha256:7ff8a36e0396776d3ed9a106fc9a9d7c55d4439ca9a056a24bf66d343041d3e6"},
+ {file = "safetensors-0.4.1-cp39-none-win_amd64.whl", hash = "sha256:bfa2e20342b81921b98edba52f8deb68843fa9c95250739a56b52ceda5ea5c61"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ae2d5a31cfb8a973a318f7c4d2cffe0bd1fe753cdf7bb41a1939d45a0a06f964"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a45dbf03e8334d3a5dc93687d98b6dc422f5d04c7d519dac09b84a3c87dd7c6"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297b359d91126c0f9d4fd17bae3cfa2fe3a048a6971b8db07db746ad92f850c"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda3d98e2bcece388232cfc551ebf063b55bdb98f65ab54df397da30efc7dcc5"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8934bdfd202ebd0697040a3dff40dd77bc4c5bbf3527ede0532f5e7fb4d970f"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:42c3710cec7e5c764c7999697516370bee39067de0aa089b7e2cfb97ac8c6b20"},
+ {file = "safetensors-0.4.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53134226053e56bd56e73f7db42596e7908ed79f3c9a1016e4c1dade593ac8e5"},
+ {file = "safetensors-0.4.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:257d59e40a1b367cb544122e7451243d65b33c3f34d822a347f4eea6fdf97fdf"},
+ {file = "safetensors-0.4.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d54c2f1826e790d1eb2d2512bfd0ee443f0206b423d6f27095057c7f18a0687"},
+ {file = "safetensors-0.4.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645b3f1138fce6e818e79d4128afa28f0657430764cc045419c1d069ff93f732"},
+ {file = "safetensors-0.4.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9a7ffb1e551c6df51d267f5a751f042b183df22690f6feceac8d27364fd51d7"},
+ {file = "safetensors-0.4.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:44e230fbbe120de564b64f63ef3a8e6ff02840fa02849d9c443d56252a1646d4"},
+ {file = "safetensors-0.4.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:9d16b3b2fcc6fca012c74bd01b5619c655194d3e3c13e4d4d0e446eefa39a463"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5d95ea4d8b32233910734a904123bdd3979c137c461b905a5ed32511defc075f"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:dab431699b5d45e0ca043bc580651ce9583dda594e62e245b7497adb32e99809"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16d8bbb7344e39cb9d4762e85c21df94ebeb03edac923dd94bb9ed8c10eac070"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1faf5111c66a6ba91f85dff2e36edaaf36e6966172703159daeef330de4ddc7b"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:660ca1d8bff6c7bc7c6b30b9b32df74ef3ab668f5df42cefd7588f0d40feadcb"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ae2f67f04ed0bb2e56fd380a8bd3eef03f609df53f88b6f5c7e89c08e52aae00"},
+ {file = "safetensors-0.4.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c8ed5d2c04cdc1afc6b3c28d59580448ac07732c50d94c15e14670f9c473a2ce"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2b6a2814278b6660261aa9a9aae524616de9f1ec364e3716d219b6ed8f91801f"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3cfd1ca35eacc635f0eaa894e5c5ed83ffebd0f95cac298fd430014fa7323631"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4177b456c6b0c722d82429127b5beebdaf07149d265748e97e0a34ff0b3694c8"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:313e8472197bde54e3ec54a62df184c414582979da8f3916981b6a7954910a1b"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fdb4adb76e21bad318210310590de61c9f4adcef77ee49b4a234f9dc48867869"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1d568628e9c43ca15eb96c217da73737c9ccb07520fafd8a1eba3f2750614105"},
+ {file = "safetensors-0.4.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:573b6023a55a2f28085fc0a84e196c779b6cbef4d9e73acea14c8094fee7686f"},
+ {file = "safetensors-0.4.1.tar.gz", hash = "sha256:2304658e6ada81a5223225b4efe84748e760c46079bffedf7e321763cafb36c9"},
+]
+
+[package.extras]
+all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"]
+dev = ["safetensors[all]"]
+jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"]
+numpy = ["numpy (>=1.21.6)"]
+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)"]
+torch = ["safetensors[numpy]", "torch (>=1.10)"]
+
+[[package]]
+name = "scikit-learn"
+version = "1.3.2"
+description = "A set of python modules for machine learning and data mining"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"},
+]
+
+[package.dependencies]
+joblib = ">=1.1.1"
+numpy = ">=1.17.3,<2.0"
+scipy = ">=1.5.0"
+threadpoolctl = ">=2.0.0"
+
+[package.extras]
+benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"]
+docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"]
+examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"]
+tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"]
+
+[[package]]
+name = "scipy"
+version = "1.11.4"
+description = "Fundamental algorithms for scientific computing in Python"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"},
+ {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"},
+ {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"},
+ {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"},
+ {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"},
+ {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"},
+ {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"},
+ {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"},
+ {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"},
+ {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"},
+ {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"},
+ {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"},
+ {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"},
+ {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"},
+ {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"},
+ {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"},
+ {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"},
+ {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"},
+ {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"},
+ {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"},
+ {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"},
+ {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"},
+ {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"},
+ {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"},
+ {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"},
+]
+
+[package.dependencies]
+numpy = ">=1.21.6,<1.28.0"
+
+[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", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
+
+[[package]]
+name = "send2trash"
+version = "1.8.2"
+description = "Send file to trash natively under Mac OS X, Windows and Linux"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+files = [
+ {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"},
+ {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"},
+]
+
+[package.extras]
+nativelib = ["pyobjc-framework-Cocoa", "pywin32"]
+objc = ["pyobjc-framework-Cocoa"]
+win32 = ["pywin32"]
+
+[[package]]
+name = "setuptools"
+version = "69.0.2"
+description = "Easily download, build, install, upgrade, and uninstall Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"},
+ {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"},
+]
+
+[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"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
+[[package]]
+name = "smart-open"
+version = "6.4.0"
+description = "Utils for streaming large files (S3, HDFS, GCS, Azure Blob Storage, gzip, bz2...)"
+optional = false
+python-versions = ">=3.6,<4.0"
+files = [
+ {file = "smart_open-6.4.0-py3-none-any.whl", hash = "sha256:8d3ef7e6997e8e42dd55c74166ed21e6ac70664caa32dd940b26d54a8f6b4142"},
+ {file = "smart_open-6.4.0.tar.gz", hash = "sha256:be3c92c246fbe80ebce8fbacb180494a481a77fcdcb7c1aadb2ea5b9c2bee8b9"},
+]
+
+[package.extras]
+all = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "paramiko", "requests"]
+azure = ["azure-common", "azure-core", "azure-storage-blob"]
+gcs = ["google-cloud-storage (>=2.6.0)"]
+http = ["requests"]
+s3 = ["boto3"]
+ssh = ["paramiko"]
+test = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "moto[server]", "paramiko", "pytest", "pytest-rerunfailures", "requests", "responses"]
+webhdfs = ["requests"]
+
+[[package]]
+name = "smmap"
+version = "5.0.1"
+description = "A pure Python implementation of a sliding window memory map manager"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"},
+ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"},
+]
+
+[[package]]
+name = "sniffio"
+version = "1.3.0"
+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"},
+]
+
+[[package]]
+name = "snowballstemmer"
+version = "2.2.0"
+description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
+optional = false
+python-versions = "*"
+files = [
+ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
+ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.5"
+description = "A modern CSS selector implementation for Beautiful Soup."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
+ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
+]
+
+[[package]]
+name = "spacy"
+version = "3.7.2"
+description = "Industrial-strength Natural Language Processing (NLP) in Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "spacy-3.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4e285366d36c85f784d606a2d966912a18f4d24d47330c1c6acbdd9f19ee373"},
+ {file = "spacy-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f132c05368781be5d3be3d706afce7e7a9a0c9edc0dbb7c616162c37bc386561"},
+ {file = "spacy-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e3767b2cabbe337d62779ae4fdc4d57a39755c17dfc499de3ad2bae622caa43"},
+ {file = "spacy-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a748ade269bdbea9baaa49ec00882404e7e921163cdc14f5612320d0a957dfd"},
+ {file = "spacy-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:66467128e494bfa4dc9c3996e4cbb26bac4741bca4cdd8dd83a6e71182148945"},
+ {file = "spacy-3.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5af30aea578e7414fb0eb4dbad0ff0fa0a7d8e833c3e733eceb2617534714c7d"},
+ {file = "spacy-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7293de33b1e9ede151555070ad0fee3bac98aefcaac9e615eeeb4296846bd479"},
+ {file = "spacy-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26940681cf20c8831c558e2c3d345ff20b5bc3c5e6d41c66172d0c5136042f0b"},
+ {file = "spacy-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a334667625153f7aaf188c20af7e82c886e41a88483a056accba5a7d51095c6"},
+ {file = "spacy-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:43e6147d3583b62a2d3af0cd913ac025068196d587345751e198391ff0b8c1e9"},
+ {file = "spacy-3.7.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2558df8c11905a0f77a2a3639a12ef8a522d171bcd88eaec039bedf6c60d7e01"},
+ {file = "spacy-3.7.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:df1b9c4bbadc89bad10dba226d52c113e231ea6ad35c8a916ab138b31f69fa24"},
+ {file = "spacy-3.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbbe055d2170ac7505a9f580bbdcd2146d0701bdbd6cea2333e18b0db655b97a"},
+ {file = "spacy-3.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d35129b16ae2ca4212bf22a5c88b67b1e019e434fc48b69d3b95f80bc9e14e42"},
+ {file = "spacy-3.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:a7419682aba99624cc4df7df66764b6ec62ff415f32c3682c1af2a37bd11a913"},
+ {file = "spacy-3.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b12ab9c4923ffd38da84baf09464982da44e8275d680fb3c5da2051d7dd7bd2d"},
+ {file = "spacy-3.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c5c9db529dc1caa908813c58ba1643e929d2c811768596a2b64e2e01a882b1"},
+ {file = "spacy-3.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcaad95e3e7d0ea8f381f3e2d9e80b7f346ecb6566de9bd55361736fa563fc22"},
+ {file = "spacy-3.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:5d9b12284871ca5daa7774604a964486957567a86f1af898da0260e94b815e0d"},
+ {file = "spacy-3.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2bd89770f61d5980e788ef382297322cceb7dcc4b848d68cb1da8af7d80d6eb6"},
+ {file = "spacy-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d42f9151a2f01b34227ed31c8db8b7c67889ebcc637eae390faec8093ea1fb12"},
+ {file = "spacy-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3d25d2f22ba1d2dd46d103e4a54826582de2b853b6f95dfb97b005563b38838"},
+ {file = "spacy-3.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:730f23340dd157817d2da6df21f69966791b0bdbd6ea108845a65f3e1c0e981c"},
+ {file = "spacy-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:9c2f3f04b4b894a6c42ee93cec2f2b158f246f344927e65d9d19b72c5a6493ea"},
+ {file = "spacy-3.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b22e0e8dac76740d55556fa13ebb9e1c829779ea0b7ec7a9e04f32efc66f74b9"},
+ {file = "spacy-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ad7f378350104ca1f9e81180485d8b094aad7acb9b4bce84f1387b905cf230a2"},
+ {file = "spacy-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ccbffb7825c08c0586ef7384d0aa23196f9ac106b5c7b3c551907316930f94f"},
+ {file = "spacy-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:111955d7f4786b952672e9c5cfd9f8b74d81e64b62d479f71efe9cfc2a027a1d"},
+ {file = "spacy-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:e8a7291e7e1cfcb6041b26f96d0a66b603725c1beff4e0391c3d9226fae16e04"},
+ {file = "spacy-3.7.2.tar.gz", hash = "sha256:cedf4927bf0d3fec773a6ce48d5d2c91bdb02fed3c7d5ec07bdb873f1126f1a0"},
+]
+
+[package.dependencies]
+catalogue = ">=2.0.6,<2.1.0"
+cymem = ">=2.0.2,<2.1.0"
+jinja2 = "*"
+langcodes = ">=3.2.0,<4.0.0"
+murmurhash = ">=0.28.0,<1.1.0"
+numpy = {version = ">=1.19.0", markers = "python_version >= \"3.9\""}
+packaging = ">=20.0"
+preshed = ">=3.0.2,<3.1.0"
+pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
+requests = ">=2.13.0,<3.0.0"
+setuptools = "*"
+smart-open = ">=5.2.1,<7.0.0"
+spacy-legacy = ">=3.0.11,<3.1.0"
+spacy-loggers = ">=1.0.0,<2.0.0"
+srsly = ">=2.4.3,<3.0.0"
+thinc = ">=8.1.8,<8.3.0"
+tqdm = ">=4.38.0,<5.0.0"
+typer = ">=0.3.0,<0.10.0"
+wasabi = ">=0.9.1,<1.2.0"
+weasel = ">=0.1.0,<0.4.0"
+
+[package.extras]
+apple = ["thinc-apple-ops (>=0.1.0.dev0,<1.0.0)"]
+cuda = ["cupy (>=5.0.0b4,<13.0.0)"]
+cuda-autodetect = ["cupy-wheel (>=11.0.0,<13.0.0)"]
+cuda100 = ["cupy-cuda100 (>=5.0.0b4,<13.0.0)"]
+cuda101 = ["cupy-cuda101 (>=5.0.0b4,<13.0.0)"]
+cuda102 = ["cupy-cuda102 (>=5.0.0b4,<13.0.0)"]
+cuda110 = ["cupy-cuda110 (>=5.0.0b4,<13.0.0)"]
+cuda111 = ["cupy-cuda111 (>=5.0.0b4,<13.0.0)"]
+cuda112 = ["cupy-cuda112 (>=5.0.0b4,<13.0.0)"]
+cuda113 = ["cupy-cuda113 (>=5.0.0b4,<13.0.0)"]
+cuda114 = ["cupy-cuda114 (>=5.0.0b4,<13.0.0)"]
+cuda115 = ["cupy-cuda115 (>=5.0.0b4,<13.0.0)"]
+cuda116 = ["cupy-cuda116 (>=5.0.0b4,<13.0.0)"]
+cuda117 = ["cupy-cuda117 (>=5.0.0b4,<13.0.0)"]
+cuda11x = ["cupy-cuda11x (>=11.0.0,<13.0.0)"]
+cuda12x = ["cupy-cuda12x (>=11.5.0,<13.0.0)"]
+cuda80 = ["cupy-cuda80 (>=5.0.0b4,<13.0.0)"]
+cuda90 = ["cupy-cuda90 (>=5.0.0b4,<13.0.0)"]
+cuda91 = ["cupy-cuda91 (>=5.0.0b4,<13.0.0)"]
+cuda92 = ["cupy-cuda92 (>=5.0.0b4,<13.0.0)"]
+ja = ["sudachidict-core (>=20211220)", "sudachipy (>=0.5.2,!=0.6.1)"]
+ko = ["natto-py (>=0.9.0)"]
+lookups = ["spacy-lookups-data (>=1.0.3,<1.1.0)"]
+th = ["pythainlp (>=2.0)"]
+transformers = ["spacy-transformers (>=1.1.2,<1.4.0)"]
+
+[[package]]
+name = "spacy-legacy"
+version = "3.0.12"
+description = "Legacy registered functions for spaCy backwards compatibility"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "spacy-legacy-3.0.12.tar.gz", hash = "sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774"},
+ {file = "spacy_legacy-3.0.12-py2.py3-none-any.whl", hash = "sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f"},
+]
+
+[[package]]
+name = "spacy-loggers"
+version = "1.0.5"
+description = "Logging utilities for SpaCy"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "spacy-loggers-1.0.5.tar.gz", hash = "sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24"},
+ {file = "spacy_loggers-1.0.5-py3-none-any.whl", hash = "sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645"},
+]
+
+[[package]]
+name = "srsly"
+version = "2.4.8"
+description = "Modern high-performance serialization utilities for Python"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "srsly-2.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:17f3bcb418bb4cf443ed3d4dcb210e491bd9c1b7b0185e6ab10b6af3271e63b2"},
+ {file = "srsly-2.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b070a58e21ab0e878fd949f932385abb4c53dd0acb6d3a7ee75d95d447bc609"},
+ {file = "srsly-2.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98286d20014ed2067ad02b0be1e17c7e522255b188346e79ff266af51a54eb33"},
+ {file = "srsly-2.4.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18685084e2e0cc47c25158cbbf3e44690e494ef77d6418c2aae0598c893f35b0"},
+ {file = "srsly-2.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:980a179cbf4eb5bc56f7507e53f76720d031bcf0cef52cd53c815720eb2fc30c"},
+ {file = "srsly-2.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5472ed9f581e10c32e79424c996cf54c46c42237759f4224806a0cd4bb770993"},
+ {file = "srsly-2.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:50f10afe9230072c5aad9f6636115ea99b32c102f4c61e8236d8642c73ec7a13"},
+ {file = "srsly-2.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c994a89ba247a4d4f63ef9fdefb93aa3e1f98740e4800d5351ebd56992ac75e3"},
+ {file = "srsly-2.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace7ed4a0c20fa54d90032be32f9c656b6d75445168da78d14fe9080a0c208ad"},
+ {file = "srsly-2.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:7a919236a090fb93081fbd1cec030f675910f3863825b34a9afbcae71f643127"},
+ {file = "srsly-2.4.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7583c03d114b4478b7a357a1915305163e9eac2dfe080da900555c975cca2a11"},
+ {file = "srsly-2.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:94ccdd2f6db824c31266aaf93e0f31c1c43b8bc531cd2b3a1d924e3c26a4f294"},
+ {file = "srsly-2.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db72d2974f91aee652d606c7def98744ca6b899bd7dd3009fd75ebe0b5a51034"},
+ {file = "srsly-2.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a60c905fd2c15e848ce1fc315fd34d8a9cc72c1dee022a0d8f4c62991131307"},
+ {file = "srsly-2.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:e0b8d5722057000694edf105b8f492e7eb2f3aa6247a5f0c9170d1e0d074151c"},
+ {file = "srsly-2.4.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:196b4261f9d6372d1d3d16d1216b90c7e370b4141471322777b7b3c39afd1210"},
+ {file = "srsly-2.4.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4750017e6d78590b02b12653e97edd25aefa4734281386cc27501d59b7481e4e"},
+ {file = "srsly-2.4.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa034cd582ba9e4a120c8f19efa263fcad0f10fc481e73fb8c0d603085f941c4"},
+ {file = "srsly-2.4.8-cp36-cp36m-win_amd64.whl", hash = "sha256:5a78ab9e9d177ee8731e950feb48c57380036d462b49e3fb61a67ce529ff5f60"},
+ {file = "srsly-2.4.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:087e36439af517e259843df93eb34bb9e2d2881c34fa0f541589bcfbc757be97"},
+ {file = "srsly-2.4.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad141d8a130cb085a0ed3a6638b643e2b591cb98a4591996780597a632acfe20"},
+ {file = "srsly-2.4.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d05367b2571c0d08d00459636b951e3ca2a1e9216318c157331f09c33489d3"},
+ {file = "srsly-2.4.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3fd661a1c4848deea2849b78f432a70c75d10968e902ca83c07c89c9b7050ab8"},
+ {file = "srsly-2.4.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec37233fe39af97b00bf20dc2ceda04d39b9ea19ce0ee605e16ece9785e11f65"},
+ {file = "srsly-2.4.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2fd4bc081f1d6a6063396b6d97b00d98e86d9d3a3ac2949dba574a84e148080"},
+ {file = "srsly-2.4.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7347cff1eb4ef3fc335d9d4acc89588051b2df43799e5d944696ef43da79c873"},
+ {file = "srsly-2.4.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9dc1da5cc94d77056b91ba38365c72ae08556b6345bef06257c7e9eccabafe"},
+ {file = "srsly-2.4.8-cp38-cp38-win_amd64.whl", hash = "sha256:dc0bf7b6f23c9ecb49ec0924dc645620276b41e160e9b283ed44ca004c060d79"},
+ {file = "srsly-2.4.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff8df21d00d73c371bead542cefef365ee87ca3a5660de292444021ff84e3b8c"},
+ {file = "srsly-2.4.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ac3e340e65a9fe265105705586aa56054dc3902789fcb9a8f860a218d6c0a00"},
+ {file = "srsly-2.4.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06d1733f4275eff4448e96521cc7dcd8fdabd68ba9b54ca012dcfa2690db2644"},
+ {file = "srsly-2.4.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be5b751ad88fdb58fb73871d456248c88204f213aaa3c9aab49b6a1802b3fa8d"},
+ {file = "srsly-2.4.8-cp39-cp39-win_amd64.whl", hash = "sha256:822a38b8cf112348f3accbc73274a94b7bf82515cb14a85ba586d126a5a72851"},
+ {file = "srsly-2.4.8.tar.gz", hash = "sha256:b24d95a65009c2447e0b49cda043ac53fecf4f09e358d87a57446458f91b8a91"},
+]
+
+[package.dependencies]
+catalogue = ">=2.0.3,<2.1.0"
+
+[[package]]
+name = "stack-data"
+version = "0.6.3"
+description = "Extract data from python stack frames and tracebacks for informative displays"
+optional = false
+python-versions = "*"
+files = [
+ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
+ {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
+]
+
+[package.dependencies]
+asttokens = ">=2.1.0"
+executing = ">=1.2.0"
+pure-eval = "*"
+
+[package.extras]
+tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
+
+[[package]]
+name = "starlette"
+version = "0.27.0"
+description = "The little ASGI library that shines."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"},
+ {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"},
+]
+
+[package.dependencies]
+anyio = ">=3.4.0,<5"
+typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"]
+
+[[package]]
+name = "stevedore"
+version = "5.1.0"
+description = "Manage dynamic plugins for Python applications"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"},
+ {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"},
+]
+
+[package.dependencies]
+pbr = ">=2.0.0,<2.1.0 || >2.1.0"
+
+[[package]]
+name = "terminado"
+version = "0.18.0"
+description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"},
+ {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"},
+]
+
+[package.dependencies]
+ptyprocess = {version = "*", markers = "os_name != \"nt\""}
+pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""}
+tornado = ">=6.1.0"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
+test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"]
+typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"]
+
+[[package]]
+name = "texttable"
+version = "1.7.0"
+description = "module to create simple ASCII tables"
+optional = false
+python-versions = "*"
+files = [
+ {file = "texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917"},
+ {file = "texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638"},
+]
+
+[[package]]
+name = "thinc"
+version = "8.2.1"
+description = "A refreshing functional take on deep learning, compatible with your favorite libraries"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "thinc-8.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67948bbcf86c3ace8838ca4cdb72977b051d8ee024eeb631d94467be18b15271"},
+ {file = "thinc-8.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e1a558b323f15f60bd79ba3cb95f78945e76748684db00052587270217b96a5"},
+ {file = "thinc-8.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca97679f14f3cd73be76375d6792ac2685c7eca50260cef1810415a2c75ac6c5"},
+ {file = "thinc-8.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:228dabcb8667ff19b2576718e4201b203c3f78dfbed4fa79caab8eef6d5fed48"},
+ {file = "thinc-8.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b02dadc3e41dd5cfd515f0c60aa3e5c472e02c12613a1bb9d837ce5f49cf9d34"},
+ {file = "thinc-8.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0afbcd243d27c076b8c47aded8e5e0aff2ff683af6b95a39839fe3aea862cfd9"},
+ {file = "thinc-8.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4704354879abb052fbd2c658cd6df20d7bba40790ded0e81e994c879849b62f4"},
+ {file = "thinc-8.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d6257369950002abe09d64b4f161d10d73af5df3764aea89f70cae018cca14b"},
+ {file = "thinc-8.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a2ce2f93a06f8e56796fd2b9d237b6f6ef36ccd9dec66cb38d0092a3947c875"},
+ {file = "thinc-8.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bbefd9939302ebed6d48f57b959be899b23a0c85f1afaf50c82e7b493e5de04"},
+ {file = "thinc-8.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:70fabf9e3d7f4da9804be9d29800dab7506cac12598735edb05ed1cec7b2ee50"},
+ {file = "thinc-8.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0fe6f36faa5a0a69d267d7196d821a9730b3bf1817941db2a83780a199599cd5"},
+ {file = "thinc-8.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a1bc995cace52503c906b87ff0cf428b94435b8b70539c6e6ad29b526925c5"},
+ {file = "thinc-8.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be1f169f01451010822cde5052db3fee25a0793abebe8fbd48d02955a33d0692"},
+ {file = "thinc-8.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:9cf766fac7e845e96e509ac9545ea1a60034a069aee3d75068b6e46da084c206"},
+ {file = "thinc-8.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0ad99b6d1f7c149137497c6ae9345304fd7465c0c290c00cedd504ff5ae5485d"},
+ {file = "thinc-8.2.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:beda7380017df1fbdf8de1733851464886283786c3c9149e2ac7cef612eff6ed"},
+ {file = "thinc-8.2.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e6ae6309f110440bcbd6a03b5b4b940d7c607afd2027a6b638336cc42a2171"},
+ {file = "thinc-8.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:aaad5532c3abd2fe69500426a102a3b53725a78eba5ba6867bed9e6b8de0bcba"},
+ {file = "thinc-8.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c32c1e1e60b5e676f1f618915fbb20547b573998693704d0b4987d972e35a62"},
+ {file = "thinc-8.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eae5a3415ff9be0fa21671a58166e82fe6c9ee832252779fd92c31c03692fb7"},
+ {file = "thinc-8.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79e66eed14c2e7b333d69b376f8a091efad366e172b11e39c04814b54969b399"},
+ {file = "thinc-8.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8a1a2ef7061e23507f8172adb7978f7b7bc0bd4ccb266149de7065ee5331e1ea"},
+ {file = "thinc-8.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0216e17be5ddcc1014af55d2e02388698fb64dbc9f32a4782df0a3860615057"},
+ {file = "thinc-8.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:16e7c0988df852cbae40ac03f45e11e3c39300b05dff87267c6fc13108723985"},
+ {file = "thinc-8.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:637fafb7d3b51f2aa611371761578fe9999d2675f4fc87eb09e736648d12be30"},
+ {file = "thinc-8.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c27bab1026284fba355eda7d83ebc0612ace437fb50ddc9d390e71d732b67e20"},
+ {file = "thinc-8.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:88dab842c68c8e9f0b75a7b4352b53eaa385db2a1de91e276219bfcfda27e47b"},
+ {file = "thinc-8.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5978a97b35a36adb133a83b9fc6cbb9f0c364f8db8525fa0ef5c4fc03f25b889"},
+ {file = "thinc-8.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8181d86b1c8de8dae154ad02399a8d59beb62881c172926594a5f3d7dc0e625"},
+ {file = "thinc-8.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab83ade836933e34a82c61ff9fe0cb3ea9103165935ce9ea12102aff270dad9"},
+ {file = "thinc-8.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19387a23ef2ce2714572040c15f0896b6e0d3751e37ccc1d927c0447f8eac7a1"},
+ {file = "thinc-8.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:229efc84666901730e5575d5ec3c852d02009478411b24c0640f45b42e87a21c"},
+ {file = "thinc-8.2.1.tar.gz", hash = "sha256:cd7fdb3d883a15e6906254e7fb0162f69878e9ccdd1f8519db6ffbfe46bf6f49"},
+]
+
+[package.dependencies]
+blis = ">=0.7.8,<0.8.0"
+catalogue = ">=2.0.4,<2.1.0"
+confection = ">=0.0.1,<1.0.0"
+cymem = ">=2.0.2,<2.1.0"
+murmurhash = ">=1.0.2,<1.1.0"
+numpy = {version = ">=1.19.0", markers = "python_version >= \"3.9\""}
+packaging = ">=20.0"
+preshed = ">=3.0.2,<3.1.0"
+pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
+setuptools = "*"
+srsly = ">=2.4.0,<3.0.0"
+wasabi = ">=0.8.1,<1.2.0"
+
+[package.extras]
+cuda = ["cupy (>=5.0.0b4)"]
+cuda-autodetect = ["cupy-wheel (>=11.0.0)"]
+cuda100 = ["cupy-cuda100 (>=5.0.0b4)"]
+cuda101 = ["cupy-cuda101 (>=5.0.0b4)"]
+cuda102 = ["cupy-cuda102 (>=5.0.0b4)"]
+cuda110 = ["cupy-cuda110 (>=5.0.0b4)"]
+cuda111 = ["cupy-cuda111 (>=5.0.0b4)"]
+cuda112 = ["cupy-cuda112 (>=5.0.0b4)"]
+cuda113 = ["cupy-cuda113 (>=5.0.0b4)"]
+cuda114 = ["cupy-cuda114 (>=5.0.0b4)"]
+cuda115 = ["cupy-cuda115 (>=5.0.0b4)"]
+cuda116 = ["cupy-cuda116 (>=5.0.0b4)"]
+cuda117 = ["cupy-cuda117 (>=5.0.0b4)"]
+cuda11x = ["cupy-cuda11x (>=11.0.0)"]
+cuda80 = ["cupy-cuda80 (>=5.0.0b4)"]
+cuda90 = ["cupy-cuda90 (>=5.0.0b4)"]
+cuda91 = ["cupy-cuda91 (>=5.0.0b4)"]
+cuda92 = ["cupy-cuda92 (>=5.0.0b4)"]
+datasets = ["ml-datasets (>=0.2.0,<0.3.0)"]
+mxnet = ["mxnet (>=1.5.1,<1.6.0)"]
+tensorflow = ["tensorflow (>=2.0.0,<2.6.0)"]
+torch = ["torch (>=1.6.0)"]
+
+[[package]]
+name = "threadpoolctl"
+version = "3.2.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"},
+]
+
+[[package]]
+name = "tinycss2"
+version = "1.2.1"
+description = "A tiny CSS parser"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"},
+ {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"},
+]
+
+[package.dependencies]
+webencodings = ">=0.4"
+
+[package.extras]
+doc = ["sphinx", "sphinx_rtd_theme"]
+test = ["flake8", "isort", "pytest"]
+
+[[package]]
+name = "tokenize-rt"
+version = "5.2.0"
+description = "A wrapper around the stdlib `tokenize` which roundtrips."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "tokenize_rt-5.2.0-py2.py3-none-any.whl", hash = "sha256:b79d41a65cfec71285433511b50271b05da3584a1da144a0752e9c621a285289"},
+ {file = "tokenize_rt-5.2.0.tar.gz", hash = "sha256:9fe80f8a5c1edad2d3ede0f37481cc0cc1538a2f442c9c2f9e4feacd2792d054"},
+]
+
+[[package]]
+name = "tokenizers"
+version = "0.15.0"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tokenizers-0.15.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:cd3cd0299aaa312cd2988957598f80becd04d5a07338741eca076057a2b37d6e"},
+ {file = "tokenizers-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a922c492c721744ee175f15b91704be2d305569d25f0547c77cd6c9f210f9dc"},
+ {file = "tokenizers-0.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:331dd786d02fc38698f835fff61c99480f98b73ce75a4c65bd110c9af5e4609a"},
+ {file = "tokenizers-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88dd0961c437d413ab027f8b115350c121d49902cfbadf08bb8f634b15fa1814"},
+ {file = "tokenizers-0.15.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6fdcc55339df7761cd52e1fbe8185d3b3963bc9e3f3545faa6c84f9e8818259a"},
+ {file = "tokenizers-0.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1480b0051d8ab5408e8e4db2dc832f7082ea24aa0722c427bde2418c6f3bd07"},
+ {file = "tokenizers-0.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9855e6c258918f9cf62792d4f6ddfa6c56dccd8c8118640f867f6393ecaf8bd7"},
+ {file = "tokenizers-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9529fe75efcd54ba8d516aa725e1851df9199f0669b665c55e90df08f5af86"},
+ {file = "tokenizers-0.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8edcc90a36eab0705fe9121d6c77c6e42eeef25c7399864fd57dfb27173060bf"},
+ {file = "tokenizers-0.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae17884aafb3e94f34fb7cfedc29054f5f54e142475ebf8a265a4e388fee3f8b"},
+ {file = "tokenizers-0.15.0-cp310-none-win32.whl", hash = "sha256:9a3241acdc9b44cff6e95c4a55b9be943ef3658f8edb3686034d353734adba05"},
+ {file = "tokenizers-0.15.0-cp310-none-win_amd64.whl", hash = "sha256:4b31807cb393d6ea31926b307911c89a1209d5e27629aa79553d1599c8ffdefe"},
+ {file = "tokenizers-0.15.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:af7e9be8c05d30bb137b9fd20f9d99354816599e5fd3d58a4b1e28ba3b36171f"},
+ {file = "tokenizers-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c3d7343fa562ea29661783344a2d83662db0d3d17a6fa6a403cac8e512d2d9fd"},
+ {file = "tokenizers-0.15.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:32371008788aeeb0309a9244809a23e4c0259625e6b74a103700f6421373f395"},
+ {file = "tokenizers-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9db64c7c9954fbae698884c5bb089764edc549731e5f9b7fa1dd4e4d78d77f"},
+ {file = "tokenizers-0.15.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbed5944c31195514669cf6381a0d8d47f164943000d10f93d6d02f0d45c25e0"},
+ {file = "tokenizers-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aab16c4a26d351d63e965b0c792f5da7227a37b69a6dc6d922ff70aa595b1b0c"},
+ {file = "tokenizers-0.15.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c2b60b12fdd310bf85ce5d7d3f823456b9b65eed30f5438dd7761879c495983"},
+ {file = "tokenizers-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0344d6602740e44054a9e5bbe9775a5e149c4dddaff15959bb07dcce95a5a859"},
+ {file = "tokenizers-0.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4525f6997d81d9b6d9140088f4f5131f6627e4c960c2c87d0695ae7304233fc3"},
+ {file = "tokenizers-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:65975094fef8cc68919644936764efd2ce98cf1bacbe8db2687155d2b0625bee"},
+ {file = "tokenizers-0.15.0-cp311-none-win32.whl", hash = "sha256:ff5d2159c5d93015f5a4542aac6c315506df31853123aa39042672031768c301"},
+ {file = "tokenizers-0.15.0-cp311-none-win_amd64.whl", hash = "sha256:2dd681b53cf615e60a31a115a3fda3980e543d25ca183797f797a6c3600788a3"},
+ {file = "tokenizers-0.15.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:c9cce6ee149a3d703f86877bc2a6d997e34874b2d5a2d7839e36b2273f31d3d9"},
+ {file = "tokenizers-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a0a94bc3370e6f1cc8a07a8ae867ce13b7c1b4291432a773931a61f256d44ea"},
+ {file = "tokenizers-0.15.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:309cfcccfc7e502cb1f1de2c9c1c94680082a65bfd3a912d5a5b2c90c677eb60"},
+ {file = "tokenizers-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8413e994dd7d875ab13009127fc85633916c71213917daf64962bafd488f15dc"},
+ {file = "tokenizers-0.15.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0ebf9430f901dbdc3dcb06b493ff24a3644c9f88c08e6a1d6d0ae2228b9b818"},
+ {file = "tokenizers-0.15.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10361e9c7864b22dd791ec5126327f6c9292fb1d23481d4895780688d5e298ac"},
+ {file = "tokenizers-0.15.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:babe42635b8a604c594bdc56d205755f73414fce17ba8479d142a963a6c25cbc"},
+ {file = "tokenizers-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3768829861e964c7a4556f5f23307fce6a23872c2ebf030eb9822dbbbf7e9b2a"},
+ {file = "tokenizers-0.15.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9c91588a630adc88065e1c03ac6831e3e2112558869b9ebcb2b8afd8a14c944d"},
+ {file = "tokenizers-0.15.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:77606994e793ca54ecf3a3619adc8a906a28ca223d9354b38df41cb8766a0ed6"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:6fe143939f3b596681922b2df12a591a5b010e7dcfbee2202482cd0c1c2f2459"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:b7bee0f1795e3e3561e9a557061b1539e5255b8221e3f928f58100282407e090"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5d37e7f4439b4c46192ab4f2ff38ab815e4420f153caa13dec9272ef14403d34"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caadf255cf7f951b38d10097836d1f3bcff4aeaaffadfdf748bab780bf5bff95"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:05accb9162bf711a941b1460b743d62fec61c160daf25e53c5eea52c74d77814"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26a2ef890740127cb115ee5260878f4a677e36a12831795fd7e85887c53b430b"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e54c5f26df14913620046b33e822cb3bcd091a332a55230c0e63cc77135e2169"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669b8ed653a578bcff919566631156f5da3aab84c66f3c0b11a6281e8b4731c7"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0ea480d943297df26f06f508dab6e012b07f42bf3dffdd36e70799368a5f5229"},
+ {file = "tokenizers-0.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bc80a0a565ebfc7cd89de7dd581da8c2b3238addfca6280572d27d763f135f2f"},
+ {file = "tokenizers-0.15.0-cp37-none-win32.whl", hash = "sha256:cdd945e678bbdf4517d5d8de66578a5030aeefecdb46f5320b034de9cad8d4dd"},
+ {file = "tokenizers-0.15.0-cp37-none-win_amd64.whl", hash = "sha256:1ab96ab7dc706e002c32b2ea211a94c1c04b4f4de48354728c3a6e22401af322"},
+ {file = "tokenizers-0.15.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:f21c9eb71c9a671e2a42f18b456a3d118e50c7f0fc4dd9fa8f4eb727fea529bf"},
+ {file = "tokenizers-0.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a5f4543a35889679fc3052086e69e81880b2a5a28ff2a52c5a604be94b77a3f"},
+ {file = "tokenizers-0.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f8aa81afec893e952bd39692b2d9ef60575ed8c86fce1fd876a06d2e73e82dca"},
+ {file = "tokenizers-0.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1574a5a4af22c3def93fe8fe4adcc90a39bf5797ed01686a4c46d1c3bc677d2f"},
+ {file = "tokenizers-0.15.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c7982fd0ec9e9122d03b209dac48cebfea3de0479335100ef379a9a959b9a5a"},
+ {file = "tokenizers-0.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d16b647032df2ce2c1f9097236e046ea9fedd969b25637b9d5d734d78aa53b"},
+ {file = "tokenizers-0.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b3cdf29e6f9653da330515dc8fa414be5a93aae79e57f8acc50d4028dd843edf"},
+ {file = "tokenizers-0.15.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7286f3df10de840867372e3e64b99ef58c677210e3ceb653cd0e740a5c53fe78"},
+ {file = "tokenizers-0.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aabc83028baa5a36ce7a94e7659250f0309c47fa4a639e5c2c38e6d5ea0de564"},
+ {file = "tokenizers-0.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:72f78b0e0e276b1fc14a672fa73f3acca034ba8db4e782124a2996734a9ba9cf"},
+ {file = "tokenizers-0.15.0-cp38-none-win32.whl", hash = "sha256:9680b0ecc26e7e42f16680c1aa62e924d58d1c2dd992707081cc10a374896ea2"},
+ {file = "tokenizers-0.15.0-cp38-none-win_amd64.whl", hash = "sha256:f17cbd88dab695911cbdd385a5a7e3709cc61dff982351f5d1b5939f074a2466"},
+ {file = "tokenizers-0.15.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:3661862df7382c5eb23ac4fbf7c75e69b02dc4f5784e4c5a734db406b5b24596"},
+ {file = "tokenizers-0.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3045d191dad49647f5a5039738ecf1c77087945c7a295f7bcf051c37067e883"},
+ {file = "tokenizers-0.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9fcaad9ab0801f14457d7c820d9f246b5ab590c407fc6b073819b1573097aa7"},
+ {file = "tokenizers-0.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79f17027f24fe9485701c8dbb269b9c713954ec3bdc1e7075a66086c0c0cd3c"},
+ {file = "tokenizers-0.15.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01a3aa332abc4bee7640563949fcfedca4de8f52691b3b70f2fc6ca71bfc0f4e"},
+ {file = "tokenizers-0.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05b83896a893cdfedad8785250daa3ba9f0504848323471524d4783d7291661e"},
+ {file = "tokenizers-0.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbbf2489fcf25d809731ba2744ff278dd07d9eb3f8b7482726bd6cae607073a4"},
+ {file = "tokenizers-0.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab806ad521a5e9de38078b7add97589c313915f6f5fec6b2f9f289d14d607bd6"},
+ {file = "tokenizers-0.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a522612d5c88a41563e3463226af64e2fa00629f65cdcc501d1995dd25d23f5"},
+ {file = "tokenizers-0.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e58a38c4e6075810bdfb861d9c005236a72a152ebc7005941cc90d1bbf16aca9"},
+ {file = "tokenizers-0.15.0-cp39-none-win32.whl", hash = "sha256:b8034f1041fd2bd2b84ff9f4dc4ae2e1c3b71606820a9cd5c562ebd291a396d1"},
+ {file = "tokenizers-0.15.0-cp39-none-win_amd64.whl", hash = "sha256:edde9aa964145d528d0e0dbf14f244b8a85ebf276fb76869bc02e2530fa37a96"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:309445d10d442b7521b98083dc9f0b5df14eca69dbbfebeb98d781ee2cef5d30"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d3125a6499226d4d48efc54f7498886b94c418e93a205b673bc59364eecf0804"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ed56ddf0d54877bb9c6d885177db79b41576e61b5ef6defeb579dcb803c04ad5"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b22cd714706cc5b18992a232b023f736e539495f5cc61d2d28d176e55046f6c"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac2719b1e9bc8e8e7f6599b99d0a8e24f33d023eb8ef644c0366a596f0aa926"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:85ddae17570ec7e5bfaf51ffa78d044f444a8693e1316e1087ee6150596897ee"},
+ {file = "tokenizers-0.15.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76f1bed992e396bf6f83e3df97b64ff47885e45e8365f8983afed8556a0bc51f"},
+ {file = "tokenizers-0.15.0-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3bb0f4df6dce41a1c7482087b60d18c372ef4463cb99aa8195100fcd41e0fd64"},
+ {file = "tokenizers-0.15.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:22c27672c27a059a5f39ff4e49feed8c7f2e1525577c8a7e3978bd428eb5869d"},
+ {file = "tokenizers-0.15.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78104f5d035c9991f92831fc0efe9e64a05d4032194f2a69f67aaa05a4d75bbb"},
+ {file = "tokenizers-0.15.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a40b73dc19d82c3e3ffb40abdaacca8fbc95eeb26c66b7f9f860aebc07a73998"},
+ {file = "tokenizers-0.15.0-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d801d1368188c74552cd779b1286e67cb9fd96f4c57a9f9a2a09b6def9e1ab37"},
+ {file = "tokenizers-0.15.0-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82641ffb13a4da1293fcc9f437d457647e60ed0385a9216cd135953778b3f0a1"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:160f9d1810f2c18fffa94aa98bf17632f6bd2dabc67fcb01a698ca80c37d52ee"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d7d6eea831ed435fdeeb9bcd26476226401d7309d115a710c65da4088841948"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f6456bec6c557d63d8ec0023758c32f589e1889ed03c055702e84ce275488bed"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eef39a502fad3bf104b9e1906b4fb0cee20e44e755e51df9a98f8922c3bf6d4"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1e4664c5b797e093c19b794bbecc19d2367e782b4a577d8b7c1821db5dc150d"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ca003fb5f3995ff5cf676db6681b8ea5d54d3b30bea36af1120e78ee1a4a4cdf"},
+ {file = "tokenizers-0.15.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7f17363141eb0c53752c89e10650b85ef059a52765d0802ba9613dbd2d21d425"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:8a765db05581c7d7e1280170f2888cda351760d196cc059c37ea96f121125799"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2a0dd641a72604486cd7302dd8f87a12c8a9b45e1755e47d2682733f097c1af5"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a1a3c973e4dc97797fc19e9f11546c95278ffc55c4492acb742f69e035490bc"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4fab75642aae4e604e729d6f78e0addb9d7e7d49e28c8f4d16b24da278e5263"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65f80be77f6327a86d8fd35a4467adcfe6174c159b4ab52a1a8dd4c6f2d7d9e1"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a8da7533dbe66b88afd430c56a2f2ce1fd82e2681868f857da38eeb3191d7498"},
+ {file = "tokenizers-0.15.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa8eb4584fc6cbe6a84d7a7864be3ed28e23e9fd2146aa8ef1814d579df91958"},
+ {file = "tokenizers-0.15.0.tar.gz", hash = "sha256:10c7e6e7b4cabd757da59e93f5f8d1126291d16f8b54f28510825ef56a3e5d0e"},
+]
+
+[package.dependencies]
+huggingface_hub = ">=0.16.4,<1.0"
+
+[package.extras]
+dev = ["tokenizers[testing]"]
+docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"]
+testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+
+[[package]]
+name = "torch"
+version = "1.13.1"
+description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "torch-1.13.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:fd12043868a34a8da7d490bf6db66991108b00ffbeecb034228bfcbbd4197143"},
+ {file = "torch-1.13.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d9fe785d375f2e26a5d5eba5de91f89e6a3be5d11efb497e76705fdf93fa3c2e"},
+ {file = "torch-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:98124598cdff4c287dbf50f53fb455f0c1e3a88022b39648102957f3445e9b76"},
+ {file = "torch-1.13.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:393a6273c832e047581063fb74335ff50b4c566217019cc6ace318cd79eb0566"},
+ {file = "torch-1.13.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:0122806b111b949d21fa1a5f9764d1fd2fcc4a47cb7f8ff914204fd4fc752ed5"},
+ {file = "torch-1.13.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:22128502fd8f5b25ac1cd849ecb64a418382ae81dd4ce2b5cebaa09ab15b0d9b"},
+ {file = "torch-1.13.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:76024be052b659ac1304ab8475ab03ea0a12124c3e7626282c9c86798ac7bc11"},
+ {file = "torch-1.13.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:ea8dda84d796094eb8709df0fcd6b56dc20b58fdd6bc4e8d7109930dafc8e419"},
+ {file = "torch-1.13.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2ee7b81e9c457252bddd7d3da66fb1f619a5d12c24d7074de91c4ddafb832c93"},
+ {file = "torch-1.13.1-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:0d9b8061048cfb78e675b9d2ea8503bfe30db43d583599ae8626b1263a0c1380"},
+ {file = "torch-1.13.1-cp37-none-macosx_11_0_arm64.whl", hash = "sha256:f402ca80b66e9fbd661ed4287d7553f7f3899d9ab54bf5c67faada1555abde28"},
+ {file = "torch-1.13.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:727dbf00e2cf858052364c0e2a496684b9cb5aa01dc8a8bc8bbb7c54502bdcdd"},
+ {file = "torch-1.13.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:df8434b0695e9ceb8cc70650afc1310d8ba949e6db2a0525ddd9c3b2b181e5fe"},
+ {file = "torch-1.13.1-cp38-cp38-win_amd64.whl", hash = "sha256:5e1e722a41f52a3f26f0c4fcec227e02c6c42f7c094f32e49d4beef7d1e213ea"},
+ {file = "torch-1.13.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:33e67eea526e0bbb9151263e65417a9ef2d8fa53cbe628e87310060c9dcfa312"},
+ {file = "torch-1.13.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:eeeb204d30fd40af6a2d80879b46a7efbe3cf43cdbeb8838dd4f3d126cc90b2b"},
+ {file = "torch-1.13.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:50ff5e76d70074f6653d191fe4f6a42fdbe0cf942fbe2a3af0b75eaa414ac038"},
+ {file = "torch-1.13.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:2c3581a3fd81eb1f0f22997cddffea569fea53bafa372b2c0471db373b26aafc"},
+ {file = "torch-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:0aa46f0ac95050c604bcf9ef71da9f1172e5037fdf2ebe051962d47b123848e7"},
+ {file = "torch-1.13.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:6930791efa8757cb6974af73d4996b6b50c592882a324b8fb0589c6a9ba2ddaf"},
+ {file = "torch-1.13.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:e0df902a7c7dd6c795698532ee5970ce898672625635d885eade9976e5a04949"},
+]
+
+[package.dependencies]
+nvidia-cublas-cu11 = {version = "11.10.3.66", markers = "platform_system == \"Linux\""}
+nvidia-cuda-nvrtc-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\""}
+nvidia-cuda-runtime-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\""}
+nvidia-cudnn-cu11 = {version = "8.5.0.96", markers = "platform_system == \"Linux\""}
+typing-extensions = "*"
+
+[package.extras]
+opt-einsum = ["opt-einsum (>=3.3)"]
+
+[[package]]
+name = "tornado"
+version = "6.4"
+description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
+optional = false
+python-versions = ">= 3.8"
+files = [
+ {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"},
+ {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"},
+ {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"},
+ {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"},
+ {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"},
+ {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"},
+ {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"},
+ {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"},
+ {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"},
+ {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"},
+ {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"},
+]
+
+[[package]]
+name = "tqdm"
+version = "4.66.1"
+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"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"]
+notebook = ["ipywidgets (>=6)"]
+slack = ["slack-sdk"]
+telegram = ["requests"]
+
+[[package]]
+name = "traitlets"
+version = "5.14.0"
+description = "Traitlets Python configuration system"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"},
+ {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"},
+]
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
+test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"]
+
+[[package]]
+name = "transformers"
+version = "4.35.2"
+description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "transformers-4.35.2-py3-none-any.whl", hash = "sha256:9dfa76f8692379544ead84d98f537be01cd1070de75c74efb13abcbc938fbe2f"},
+ {file = "transformers-4.35.2.tar.gz", hash = "sha256:2d125e197d77b0cdb6c9201df9fa7e2101493272e448b9fba9341c695bee2f52"},
+]
+
+[package.dependencies]
+filelock = "*"
+huggingface-hub = ">=0.16.4,<1.0"
+numpy = ">=1.17"
+packaging = ">=20.0"
+pyyaml = ">=5.1"
+regex = "!=2019.12.17"
+requests = "*"
+safetensors = ">=0.3.1"
+tokenizers = ">=0.14,<0.19"
+tqdm = ">=4.27"
+
+[package.extras]
+accelerate = ["accelerate (>=0.20.3)"]
+agents = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.10,!=1.12.0)"]
+all = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision"]
+audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+codecarbon = ["codecarbon (==1.2.0)"]
+deepspeed = ["accelerate (>=0.20.3)", "deepspeed (>=0.9.3)"]
+deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.20.3)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"]
+dev = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.14,<0.19)", "urllib3 (<2.0.0)"]
+dev-torch = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "accelerate (>=0.20.3)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"]
+docs = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision"]
+docs-specific = ["hf-doc-builder"]
+flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"]
+flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+ftfy = ["ftfy"]
+integrations = ["optuna", "ray[tune]", "sigopt"]
+ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"]
+modelcreation = ["cookiecutter (==1.7.3)"]
+natten = ["natten (>=0.14.6)"]
+onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"]
+onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
+optuna = ["optuna"]
+quality = ["GitPython (<3.1.19)", "black (>=23.1,<24.0)", "datasets (!=2.5.0)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "ruff (>=0.0.241,<=0.0.259)", "urllib3 (<2.0.0)"]
+ray = ["ray[tune]"]
+retrieval = ["datasets (!=2.5.0)", "faiss-cpu"]
+sagemaker = ["sagemaker (>=2.31.0)"]
+sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"]
+serving = ["fastapi", "pydantic (<2)", "starlette", "uvicorn"]
+sigopt = ["sigopt"]
+sklearn = ["scikit-learn"]
+speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
+testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "tensorboard", "timeout-decorator"]
+tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx"]
+tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx"]
+tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"]
+timm = ["timm"]
+tokenizers = ["tokenizers (>=0.14,<0.19)"]
+torch = ["accelerate (>=0.20.3)", "torch (>=1.10,!=1.12.0)"]
+torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"]
+torch-vision = ["Pillow (<10.0.0)", "torchvision"]
+torchhub = ["filelock", "huggingface-hub (>=0.16.4,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "tqdm (>=4.27)"]
+video = ["av (==9.2.0)", "decord (==0.6.0)"]
+vision = ["Pillow (<10.0.0)"]
+
+[[package]]
+name = "typer"
+version = "0.9.0"
+description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"},
+ {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"},
+]
+
+[package.dependencies]
+click = ">=7.1.1,<9.0.0"
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"]
+dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"]
+doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"]
+test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"]
+
+[[package]]
+name = "types-python-dateutil"
+version = "2.8.19.14"
+description = "Typing stubs for python-dateutil"
+optional = false
+python-versions = "*"
+files = [
+ {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"},
+ {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"},
+]
+
+[[package]]
+name = "types-requests"
+version = "2.31.0.6"
+description = "Typing stubs for requests"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"},
+ {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"},
+]
+
+[package.dependencies]
+types-urllib3 = "*"
+
+[[package]]
+name = "types-urllib3"
+version = "1.26.25.14"
+description = "Typing stubs for urllib3"
+optional = false
+python-versions = "*"
+files = [
+ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"},
+ {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"},
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.8.0"
+description = "Backported and Experimental Type Hints for Python 3.8+"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
+ {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
+]
+
+[[package]]
+name = "tzdata"
+version = "2023.3"
+description = "Provider of IANA time zone data"
+optional = false
+python-versions = ">=2"
+files = [
+ {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
+ {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
+]
+
+[[package]]
+name = "ujson"
+version = "5.8.0"
+description = "Ultra fast JSON encoder and decoder for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"},
+ {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"},
+ {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"},
+ {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"},
+ {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"},
+ {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"},
+ {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"},
+ {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"},
+ {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"},
+ {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"},
+ {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"},
+ {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"},
+ {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"},
+ {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"},
+ {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"},
+ {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"},
+ {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"},
+ {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"},
+ {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"},
+ {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"},
+ {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"},
+ {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"},
+ {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"},
+ {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"},
+ {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"},
+ {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"},
+ {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"},
+ {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"},
+ {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"},
+ {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"},
+ {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"},
+ {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"},
+ {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"},
+ {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"},
+ {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"},
+ {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"},
+ {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"},
+ {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"},
+ {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"},
+ {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"},
+ {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"},
+ {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"},
+ {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"},
+ {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"},
+ {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"},
+ {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"},
+ {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"},
+ {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"},
+ {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"},
+ {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"},
+ {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"},
+]
+
+[[package]]
+name = "uri-template"
+version = "1.3.0"
+description = "RFC 6570 URI Template Processor"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"},
+ {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"},
+]
+
+[package.extras]
+dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"]
+
+[[package]]
+name = "urllib3"
+version = "1.26.18"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+ {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
+ {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
+]
+
+[package.extras]
+brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[[package]]
+name = "uvicorn"
+version = "0.24.0.post1"
+description = "The lightning-fast ASGI server."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "uvicorn-0.24.0.post1-py3-none-any.whl", hash = "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e"},
+ {file = "uvicorn-0.24.0.post1.tar.gz", hash = "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e"},
+]
+
+[package.dependencies]
+click = ">=7.0"
+colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""}
+h11 = ">=0.8"
+httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""}
+python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
+pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
+typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
+websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
+
+[package.extras]
+standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
+
+[[package]]
+name = "uvloop"
+version = "0.19.0"
+description = "Fast implementation of asyncio event loop on top of libuv"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"},
+ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"},
+ {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"},
+ {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"},
+ {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"},
+ {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"},
+ {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"},
+ {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"},
+ {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"},
+ {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"},
+ {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"},
+ {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"},
+ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"},
+ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"},
+ {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"},
+ {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"},
+ {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"},
+ {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"},
+ {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"},
+ {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"},
+ {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"},
+ {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"},
+ {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"},
+ {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"},
+ {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"},
+ {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"},
+ {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"},
+ {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"},
+ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"},
+ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"},
+ {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"},
+]
+
+[package.extras]
+docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
+test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"]
+
+[[package]]
+name = "virtualenv"
+version = "20.25.0"
+description = "Virtual Python Environment builder"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"},
+ {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"},
+]
+
+[package.dependencies]
+distlib = ">=0.3.7,<1"
+filelock = ">=3.12.2,<4"
+platformdirs = ">=3.9.1,<5"
+
+[package.extras]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
+test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"]
+
+[[package]]
+name = "wasabi"
+version = "1.1.2"
+description = "A lightweight console printing and formatting toolkit"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "wasabi-1.1.2-py3-none-any.whl", hash = "sha256:0a3f933c4bf0ed3f93071132c1b87549733256d6c8de6473c5f7ed2e171b5cf9"},
+ {file = "wasabi-1.1.2.tar.gz", hash = "sha256:1aaef3aceaa32edb9c91330d29d3936c0c39fdb965743549c173cb54b16c30b5"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\" and python_version >= \"3.7\""}
+
+[[package]]
+name = "watchfiles"
+version = "0.21.0"
+description = "Simple, modern and high performance file watching and code reload in python."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"},
+ {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"},
+ {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"},
+ {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"},
+ {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"},
+ {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"},
+ {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"},
+ {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"},
+ {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"},
+ {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"},
+ {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"},
+ {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"},
+ {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"},
+ {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"},
+ {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"},
+ {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"},
+ {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"},
+ {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"},
+ {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"},
+ {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"},
+ {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"},
+ {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"},
+ {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"},
+ {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"},
+ {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"},
+ {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"},
+ {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"},
+ {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"},
+ {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"},
+ {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"},
+ {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"},
+ {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"},
+ {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"},
+]
+
+[package.dependencies]
+anyio = ">=3.0.0"
+
+[[package]]
+name = "wcwidth"
+version = "0.2.12"
+description = "Measures the displayed width of unicode strings in a terminal"
+optional = false
+python-versions = "*"
+files = [
+ {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"},
+ {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"},
+]
+
+[[package]]
+name = "weasel"
+version = "0.3.4"
+description = "Weasel: A small and easy workflow system"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "weasel-0.3.4-py3-none-any.whl", hash = "sha256:ee48a944f051d007201c2ea1661d0c41035028c5d5a8bcb29a0b10f1100206ae"},
+ {file = "weasel-0.3.4.tar.gz", hash = "sha256:eb16f92dc9f1a3ffa89c165e3a9acd28018ebb656e0da4da02c0d7d8ae3f6178"},
+]
+
+[package.dependencies]
+cloudpathlib = ">=0.7.0,<0.17.0"
+confection = ">=0.0.4,<0.2.0"
+packaging = ">=20.0"
+pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
+requests = ">=2.13.0,<3.0.0"
+smart-open = ">=5.2.1,<7.0.0"
+srsly = ">=2.4.3,<3.0.0"
+typer = ">=0.3.0,<0.10.0"
+wasabi = ">=0.9.1,<1.2.0"
+
+[[package]]
+name = "webcolors"
+version = "1.13"
+description = "A library for working with the color formats defined by HTML and CSS."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"},
+ {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"},
+]
+
+[package.extras]
+docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"]
+tests = ["pytest", "pytest-cov"]
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+optional = false
+python-versions = "*"
+files = [
+ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+
+[[package]]
+name = "websocket-client"
+version = "1.6.4"
+description = "WebSocket client for Python with low level API options"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"},
+ {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"},
+]
+
+[package.extras]
+docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"]
+optional = ["python-socks", "wsaccel"]
+test = ["websockets"]
+
+[[package]]
+name = "websockets"
+version = "12.0"
+description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"},
+ {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"},
+ {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"},
+ {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"},
+ {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"},
+ {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"},
+ {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"},
+ {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"},
+ {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"},
+ {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"},
+ {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"},
+ {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"},
+ {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"},
+ {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"},
+ {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"},
+ {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"},
+ {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"},
+ {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"},
+ {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"},
+ {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"},
+ {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"},
+ {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"},
+ {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"},
+ {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"},
+ {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"},
+ {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"},
+ {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"},
+]
+
+[[package]]
+name = "wemake-python-styleguide"
+version = "0.18.0"
+description = "The strictest and most opinionated python linter ever"
+optional = false
+python-versions = ">=3.8.1,<4.0"
+files = [
+ {file = "wemake_python_styleguide-0.18.0-py3-none-any.whl", hash = "sha256:2219be145185edcd5e01f4ce49e3dea11acc34f2c377face0c175bb6ea6ac988"},
+ {file = "wemake_python_styleguide-0.18.0.tar.gz", hash = "sha256:69139858cf5b2a9ba09dac136e2873a4685515768f68fdef2684ebefd7b1dafd"},
+]
+
+[package.dependencies]
+astor = ">=0.8,<0.9"
+attrs = "*"
+darglint = ">=1.2,<2.0"
+flake8 = ">5"
+flake8-bandit = ">=4.1,<5.0"
+flake8-broken-line = ">=1.0,<2.0"
+flake8-bugbear = ">=23.5,<24.0"
+flake8-commas = ">=2.0,<3.0"
+flake8-comprehensions = ">=3.1,<4.0"
+flake8-debugger = ">=4.0,<5.0"
+flake8-docstrings = ">=1.3,<2.0"
+flake8-eradicate = ">=1.5,<2.0"
+flake8-isort = ">=6.0,<7.0"
+flake8-quotes = ">=3.0,<4.0"
+flake8-rst-docstrings = ">=0.3,<0.4"
+flake8-string-format = ">=0.3,<0.4"
+pep8-naming = ">=0.13,<0.14"
+pygments = ">=2.4,<3.0"
+setuptools = "*"
+typing_extensions = ">=4.0,<5.0"
+
+[[package]]
+name = "wheel"
+version = "0.42.0"
+description = "A built-package format for Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "wheel-0.42.0-py3-none-any.whl", hash = "sha256:177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d"},
+ {file = "wheel-0.42.0.tar.gz", hash = "sha256:c45be39f7882c9d34243236f2d63cbd58039e360f85d0913425fbd7ceea617a8"},
+]
+
+[package.extras]
+test = ["pytest (>=6.0.0)", "setuptools (>=65)"]
+
+[[package]]
+name = "win32-setctime"
+version = "1.1.0"
+description = "A small Python utility to set file creation time on Windows"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"},
+ {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"},
+]
+
+[package.extras]
+dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
+
+[[package]]
+name = "xxhash"
+version = "3.4.1"
+description = "Python binding for xxHash"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "xxhash-3.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:91dbfa55346ad3e18e738742236554531a621042e419b70ad8f3c1d9c7a16e7f"},
+ {file = "xxhash-3.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:665a65c2a48a72068fcc4d21721510df5f51f1142541c890491afc80451636d2"},
+ {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb11628470a6004dc71a09fe90c2f459ff03d611376c1debeec2d648f44cb693"},
+ {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bef2a7dc7b4f4beb45a1edbba9b9194c60a43a89598a87f1a0226d183764189"},
+ {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0f7b2d547d72c7eda7aa817acf8791f0146b12b9eba1d4432c531fb0352228"},
+ {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00f2fdef6b41c9db3d2fc0e7f94cb3db86693e5c45d6de09625caad9a469635b"},
+ {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23cfd9ca09acaf07a43e5a695143d9a21bf00f5b49b15c07d5388cadf1f9ce11"},
+ {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6a9ff50a3cf88355ca4731682c168049af1ca222d1d2925ef7119c1a78e95b3b"},
+ {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f1d7c69a1e9ca5faa75546fdd267f214f63f52f12692f9b3a2f6467c9e67d5e7"},
+ {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:672b273040d5d5a6864a36287f3514efcd1d4b1b6a7480f294c4b1d1ee1b8de0"},
+ {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4178f78d70e88f1c4a89ff1ffe9f43147185930bb962ee3979dba15f2b1cc799"},
+ {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9804b9eb254d4b8cc83ab5a2002128f7d631dd427aa873c8727dba7f1f0d1c2b"},
+ {file = "xxhash-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c09c49473212d9c87261d22c74370457cfff5db2ddfc7fd1e35c80c31a8c14ce"},
+ {file = "xxhash-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ebbb1616435b4a194ce3466d7247df23499475c7ed4eb2681a1fa42ff766aff6"},
+ {file = "xxhash-3.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:25dc66be3db54f8a2d136f695b00cfe88018e59ccff0f3b8f545869f376a8a46"},
+ {file = "xxhash-3.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58c49083801885273e262c0f5bbeac23e520564b8357fbb18fb94ff09d3d3ea5"},
+ {file = "xxhash-3.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b526015a973bfbe81e804a586b703f163861da36d186627e27524f5427b0d520"},
+ {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36ad4457644c91a966f6fe137d7467636bdc51a6ce10a1d04f365c70d6a16d7e"},
+ {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:248d3e83d119770f96003271fe41e049dd4ae52da2feb8f832b7a20e791d2920"},
+ {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2070b6d5bbef5ee031666cf21d4953c16e92c2f8a24a94b5c240f8995ba3b1d0"},
+ {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2746035f518f0410915e247877f7df43ef3372bf36cfa52cc4bc33e85242641"},
+ {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ba6181514681c2591840d5632fcf7356ab287d4aff1c8dea20f3c78097088"},
+ {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aac5010869240e95f740de43cd6a05eae180c59edd182ad93bf12ee289484fa"},
+ {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4cb11d8debab1626181633d184b2372aaa09825bde709bf927704ed72765bed1"},
+ {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b29728cff2c12f3d9f1d940528ee83918d803c0567866e062683f300d1d2eff3"},
+ {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a15cbf3a9c40672523bdb6ea97ff74b443406ba0ab9bca10ceccd9546414bd84"},
+ {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e66df260fed01ed8ea790c2913271641c58481e807790d9fca8bfd5a3c13844"},
+ {file = "xxhash-3.4.1-cp311-cp311-win32.whl", hash = "sha256:e867f68a8f381ea12858e6d67378c05359d3a53a888913b5f7d35fbf68939d5f"},
+ {file = "xxhash-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:200a5a3ad9c7c0c02ed1484a1d838b63edcf92ff538770ea07456a3732c577f4"},
+ {file = "xxhash-3.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:1d03f1c0d16d24ea032e99f61c552cb2b77d502e545187338bea461fde253583"},
+ {file = "xxhash-3.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4bbba9b182697a52bc0c9f8ec0ba1acb914b4937cd4a877ad78a3b3eeabefb3"},
+ {file = "xxhash-3.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9fd28a9da300e64e434cfc96567a8387d9a96e824a9be1452a1e7248b7763b78"},
+ {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6066d88c9329ab230e18998daec53d819daeee99d003955c8db6fc4971b45ca3"},
+ {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93805bc3233ad89abf51772f2ed3355097a5dc74e6080de19706fc447da99cd3"},
+ {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64da57d5ed586ebb2ecdde1e997fa37c27fe32fe61a656b77fabbc58e6fbff6e"},
+ {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a97322e9a7440bf3c9805cbaac090358b43f650516486746f7fa482672593df"},
+ {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe750d512982ee7d831838a5dee9e9848f3fb440e4734cca3f298228cc957a6"},
+ {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fd79d4087727daf4d5b8afe594b37d611ab95dc8e29fe1a7517320794837eb7d"},
+ {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:743612da4071ff9aa4d055f3f111ae5247342931dedb955268954ef7201a71ff"},
+ {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b41edaf05734092f24f48c0958b3c6cbaaa5b7e024880692078c6b1f8247e2fc"},
+ {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a90356ead70d715fe64c30cd0969072de1860e56b78adf7c69d954b43e29d9fa"},
+ {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac56eebb364e44c85e1d9e9cc5f6031d78a34f0092fea7fc80478139369a8b4a"},
+ {file = "xxhash-3.4.1-cp312-cp312-win32.whl", hash = "sha256:911035345932a153c427107397c1518f8ce456f93c618dd1c5b54ebb22e73747"},
+ {file = "xxhash-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:f31ce76489f8601cc7b8713201ce94b4bd7b7ce90ba3353dccce7e9e1fee71fa"},
+ {file = "xxhash-3.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:b5beb1c6a72fdc7584102f42c4d9df232ee018ddf806e8c90906547dfb43b2da"},
+ {file = "xxhash-3.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6d42b24d1496deb05dee5a24ed510b16de1d6c866c626c2beb11aebf3be278b9"},
+ {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b685fab18876b14a8f94813fa2ca80cfb5ab6a85d31d5539b7cd749ce9e3624"},
+ {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419ffe34c17ae2df019a4685e8d3934d46b2e0bbe46221ab40b7e04ed9f11137"},
+ {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e041ce5714f95251a88670c114b748bca3bf80cc72400e9f23e6d0d59cf2681"},
+ {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc860d887c5cb2f524899fb8338e1bb3d5789f75fac179101920d9afddef284b"},
+ {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:312eba88ffe0a05e332e3a6f9788b73883752be63f8588a6dc1261a3eaaaf2b2"},
+ {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e01226b6b6a1ffe4e6bd6d08cfcb3ca708b16f02eb06dd44f3c6e53285f03e4f"},
+ {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9f3025a0d5d8cf406a9313cd0d5789c77433ba2004b1c75439b67678e5136537"},
+ {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:6d3472fd4afef2a567d5f14411d94060099901cd8ce9788b22b8c6f13c606a93"},
+ {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:43984c0a92f06cac434ad181f329a1445017c33807b7ae4f033878d860a4b0f2"},
+ {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a55e0506fdb09640a82ec4f44171273eeabf6f371a4ec605633adb2837b5d9d5"},
+ {file = "xxhash-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:faec30437919555b039a8bdbaba49c013043e8f76c999670aef146d33e05b3a0"},
+ {file = "xxhash-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c9e1b646af61f1fc7083bb7b40536be944f1ac67ef5e360bca2d73430186971a"},
+ {file = "xxhash-3.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:961d948b7b1c1b6c08484bbce3d489cdf153e4122c3dfb07c2039621243d8795"},
+ {file = "xxhash-3.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:719a378930504ab159f7b8e20fa2aa1896cde050011af838af7e7e3518dd82de"},
+ {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74fb5cb9406ccd7c4dd917f16630d2e5e8cbbb02fc2fca4e559b2a47a64f4940"},
+ {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dab508ac39e0ab988039bc7f962c6ad021acd81fd29145962b068df4148c476"},
+ {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c59f3e46e7daf4c589e8e853d700ef6607afa037bfad32c390175da28127e8c"},
+ {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cc07256eff0795e0f642df74ad096f8c5d23fe66bc138b83970b50fc7f7f6c5"},
+ {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9f749999ed80f3955a4af0eb18bb43993f04939350b07b8dd2f44edc98ffee9"},
+ {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7688d7c02149a90a3d46d55b341ab7ad1b4a3f767be2357e211b4e893efbaaf6"},
+ {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a8b4977963926f60b0d4f830941c864bed16aa151206c01ad5c531636da5708e"},
+ {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8106d88da330f6535a58a8195aa463ef5281a9aa23b04af1848ff715c4398fb4"},
+ {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4c76a77dbd169450b61c06fd2d5d436189fc8ab7c1571d39265d4822da16df22"},
+ {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11f11357c86d83e53719c592021fd524efa9cf024dc7cb1dfb57bbbd0d8713f2"},
+ {file = "xxhash-3.4.1-cp38-cp38-win32.whl", hash = "sha256:0c786a6cd74e8765c6809892a0d45886e7c3dc54de4985b4a5eb8b630f3b8e3b"},
+ {file = "xxhash-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:aabf37fb8fa27430d50507deeab2ee7b1bcce89910dd10657c38e71fee835594"},
+ {file = "xxhash-3.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6127813abc1477f3a83529b6bbcfeddc23162cece76fa69aee8f6a8a97720562"},
+ {file = "xxhash-3.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef2e194262f5db16075caea7b3f7f49392242c688412f386d3c7b07c7733a70a"},
+ {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71be94265b6c6590f0018bbf73759d21a41c6bda20409782d8117e76cd0dfa8b"},
+ {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10e0a619cdd1c0980e25eb04e30fe96cf8f4324758fa497080af9c21a6de573f"},
+ {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa122124d2e3bd36581dd78c0efa5f429f5220313479fb1072858188bc2d5ff1"},
+ {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17032f5a4fea0a074717fe33477cb5ee723a5f428de7563e75af64bfc1b1e10"},
+ {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca7783b20e3e4f3f52f093538895863f21d18598f9a48211ad757680c3bd006f"},
+ {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d77d09a1113899fad5f354a1eb4f0a9afcf58cefff51082c8ad643ff890e30cf"},
+ {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:21287bcdd299fdc3328cc0fbbdeaa46838a1c05391264e51ddb38a3f5b09611f"},
+ {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:dfd7a6cc483e20b4ad90224aeb589e64ec0f31e5610ab9957ff4314270b2bf31"},
+ {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:543c7fcbc02bbb4840ea9915134e14dc3dc15cbd5a30873a7a5bf66039db97ec"},
+ {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fe0a98d990e433013f41827b62be9ab43e3cf18e08b1483fcc343bda0d691182"},
+ {file = "xxhash-3.4.1-cp39-cp39-win32.whl", hash = "sha256:b9097af00ebf429cc7c0e7d2fdf28384e4e2e91008130ccda8d5ae653db71e54"},
+ {file = "xxhash-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:d699b921af0dcde50ab18be76c0d832f803034d80470703700cb7df0fbec2832"},
+ {file = "xxhash-3.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:2be491723405e15cc099ade1280133ccfbf6322d2ef568494fb7d07d280e7eee"},
+ {file = "xxhash-3.4.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:431625fad7ab5649368c4849d2b49a83dc711b1f20e1f7f04955aab86cd307bc"},
+ {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc6dbd5fc3c9886a9e041848508b7fb65fd82f94cc793253990f81617b61fe49"},
+ {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ff8dbd0ec97aec842476cb8ccc3e17dd288cd6ce3c8ef38bff83d6eb927817"},
+ {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef73a53fe90558a4096e3256752268a8bdc0322f4692ed928b6cd7ce06ad4fe3"},
+ {file = "xxhash-3.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:450401f42bbd274b519d3d8dcf3c57166913381a3d2664d6609004685039f9d3"},
+ {file = "xxhash-3.4.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a162840cf4de8a7cd8720ff3b4417fbc10001eefdd2d21541a8226bb5556e3bb"},
+ {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b736a2a2728ba45017cb67785e03125a79d246462dfa892d023b827007412c52"},
+ {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0ae4c2e7698adef58710d6e7a32ff518b66b98854b1c68e70eee504ad061d8"},
+ {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6322c4291c3ff174dcd104fae41500e75dad12be6f3085d119c2c8a80956c51"},
+ {file = "xxhash-3.4.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:dd59ed668801c3fae282f8f4edadf6dc7784db6d18139b584b6d9677ddde1b6b"},
+ {file = "xxhash-3.4.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92693c487e39523a80474b0394645b393f0ae781d8db3474ccdcead0559ccf45"},
+ {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4603a0f642a1e8d7f3ba5c4c25509aca6a9c1cc16f85091004a7028607ead663"},
+ {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa45e8cbfbadb40a920fe9ca40c34b393e0b067082d94006f7f64e70c7490a6"},
+ {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:595b252943b3552de491ff51e5bb79660f84f033977f88f6ca1605846637b7c6"},
+ {file = "xxhash-3.4.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:562d8b8f783c6af969806aaacf95b6c7b776929ae26c0cd941d54644ea7ef51e"},
+ {file = "xxhash-3.4.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:41ddeae47cf2828335d8d991f2d2b03b0bdc89289dc64349d712ff8ce59d0647"},
+ {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c44d584afdf3c4dbb3277e32321d1a7b01d6071c1992524b6543025fb8f4206f"},
+ {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7bddb3a5b86213cc3f2c61500c16945a1b80ecd572f3078ddbbe68f9dabdfb"},
+ {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ecb6c987b62437c2f99c01e97caf8d25660bf541fe79a481d05732e5236719c"},
+ {file = "xxhash-3.4.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:696b4e18b7023527d5c50ed0626ac0520edac45a50ec7cf3fc265cd08b1f4c03"},
+ {file = "xxhash-3.4.1.tar.gz", hash = "sha256:0379d6cf1ff987cd421609a264ce025e74f346e3e145dd106c0cc2e3ec3f99a9"},
+]
+
+[[package]]
+name = "yarl"
+version = "1.9.3"
+description = "Yet another URL library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32435d134414e01d937cd9d6cc56e8413a8d4741dea36af5840c7750f04d16ab"},
+ {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a5211de242754b5e612557bca701f39f8b1a9408dff73c6db623f22d20f470e"},
+ {file = "yarl-1.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:525cd69eff44833b01f8ef39aa33a9cc53a99ff7f9d76a6ef6a9fb758f54d0ff"},
+ {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc94441bcf9cb8c59f51f23193316afefbf3ff858460cb47b5758bf66a14d130"},
+ {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e36021db54b8a0475805acc1d6c4bca5d9f52c3825ad29ae2d398a9d530ddb88"},
+ {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0f17d1df951336a02afc8270c03c0c6e60d1f9996fcbd43a4ce6be81de0bd9d"},
+ {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5f3faeb8100a43adf3e7925d556801d14b5816a0ac9e75e22948e787feec642"},
+ {file = "yarl-1.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aed37db837ecb5962469fad448aaae0f0ee94ffce2062cf2eb9aed13328b5196"},
+ {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:721ee3fc292f0d069a04016ef2c3a25595d48c5b8ddc6029be46f6158d129c92"},
+ {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b8bc5b87a65a4e64bc83385c05145ea901b613d0d3a434d434b55511b6ab0067"},
+ {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:dd952b9c64f3b21aedd09b8fe958e4931864dba69926d8a90c90d36ac4e28c9a"},
+ {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:c405d482c320a88ab53dcbd98d6d6f32ada074f2d965d6e9bf2d823158fa97de"},
+ {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9df9a0d4c5624790a0dea2e02e3b1b3c69aed14bcb8650e19606d9df3719e87d"},
+ {file = "yarl-1.9.3-cp310-cp310-win32.whl", hash = "sha256:d34c4f80956227f2686ddea5b3585e109c2733e2d4ef12eb1b8b4e84f09a2ab6"},
+ {file = "yarl-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:cf7a4e8de7f1092829caef66fd90eaf3710bc5efd322a816d5677b7664893c93"},
+ {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d61a0ca95503867d4d627517bcfdc28a8468c3f1b0b06c626f30dd759d3999fd"},
+ {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73cc83f918b69110813a7d95024266072d987b903a623ecae673d1e71579d566"},
+ {file = "yarl-1.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d81657b23e0edb84b37167e98aefb04ae16cbc5352770057893bd222cdc6e45f"},
+ {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a1a8443091c7fbc17b84a0d9f38de34b8423b459fb853e6c8cdfab0eacf613"},
+ {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe34befb8c765b8ce562f0200afda3578f8abb159c76de3ab354c80b72244c41"},
+ {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c757f64afe53a422e45e3e399e1e3cf82b7a2f244796ce80d8ca53e16a49b9f"},
+ {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a57b41a0920b9a220125081c1e191b88a4cdec13bf9d0649e382a822705c65"},
+ {file = "yarl-1.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632c7aeb99df718765adf58eacb9acb9cbc555e075da849c1378ef4d18bf536a"},
+ {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b0b8c06afcf2bac5a50b37f64efbde978b7f9dc88842ce9729c020dc71fae4ce"},
+ {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1d93461e2cf76c4796355494f15ffcb50a3c198cc2d601ad8d6a96219a10c363"},
+ {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4003f380dac50328c85e85416aca6985536812c082387255c35292cb4b41707e"},
+ {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4d6d74a97e898c1c2df80339aa423234ad9ea2052f66366cef1e80448798c13d"},
+ {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b61e64b06c3640feab73fa4ff9cb64bd8182de52e5dc13038e01cfe674ebc321"},
+ {file = "yarl-1.9.3-cp311-cp311-win32.whl", hash = "sha256:29beac86f33d6c7ab1d79bd0213aa7aed2d2f555386856bb3056d5fdd9dab279"},
+ {file = "yarl-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7271d6bd8838c49ba8ae647fc06469137e1c161a7ef97d778b72904d9b68696"},
+ {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dd318e6b75ca80bff0b22b302f83a8ee41c62b8ac662ddb49f67ec97e799885d"},
+ {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4b1efb11a8acd13246ffb0bee888dd0e8eb057f8bf30112e3e21e421eb82d4a"},
+ {file = "yarl-1.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c6f034386e5550b5dc8ded90b5e2ff7db21f0f5c7de37b6efc5dac046eb19c10"},
+ {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd49a908cb6d387fc26acee8b7d9fcc9bbf8e1aca890c0b2fdfd706057546080"},
+ {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa4643635f26052401750bd54db911b6342eb1a9ac3e74f0f8b58a25d61dfe41"},
+ {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e741bd48e6a417bdfbae02e088f60018286d6c141639359fb8df017a3b69415a"},
+ {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c86d0d0919952d05df880a1889a4f0aeb6868e98961c090e335671dea5c0361"},
+ {file = "yarl-1.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d5434b34100b504aabae75f0622ebb85defffe7b64ad8f52b8b30ec6ef6e4b9"},
+ {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79e1df60f7c2b148722fb6cafebffe1acd95fd8b5fd77795f56247edaf326752"},
+ {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:44e91a669c43f03964f672c5a234ae0d7a4d49c9b85d1baa93dec28afa28ffbd"},
+ {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3cfa4dbe17b2e6fca1414e9c3bcc216f6930cb18ea7646e7d0d52792ac196808"},
+ {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:88d2c3cc4b2f46d1ba73d81c51ec0e486f59cc51165ea4f789677f91a303a9a7"},
+ {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cccdc02e46d2bd7cb5f38f8cc3d9db0d24951abd082b2f242c9e9f59c0ab2af3"},
+ {file = "yarl-1.9.3-cp312-cp312-win32.whl", hash = "sha256:96758e56dceb8a70f8a5cff1e452daaeff07d1cc9f11e9b0c951330f0a2396a7"},
+ {file = "yarl-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:c4472fe53ebf541113e533971bd8c32728debc4c6d8cc177f2bff31d011ec17e"},
+ {file = "yarl-1.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:126638ab961633f0940a06e1c9d59919003ef212a15869708dcb7305f91a6732"},
+ {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c99ddaddb2fbe04953b84d1651149a0d85214780e4d0ee824e610ab549d98d92"},
+ {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dab30b21bd6fb17c3f4684868c7e6a9e8468078db00f599fb1c14e324b10fca"},
+ {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:828235a2a169160ee73a2fcfb8a000709edf09d7511fccf203465c3d5acc59e4"},
+ {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc391e3941045fd0987c77484b2799adffd08e4b6735c4ee5f054366a2e1551d"},
+ {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51382c72dd5377861b573bd55dcf680df54cea84147c8648b15ac507fbef984d"},
+ {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:28a108cb92ce6cf867690a962372996ca332d8cda0210c5ad487fe996e76b8bb"},
+ {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8f18a7832ff85dfcd77871fe677b169b1bc60c021978c90c3bb14f727596e0ae"},
+ {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:7eaf13af79950142ab2bbb8362f8d8d935be9aaf8df1df89c86c3231e4ff238a"},
+ {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:66a6dbf6ca7d2db03cc61cafe1ee6be838ce0fbc97781881a22a58a7c5efef42"},
+ {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a0a4f3aaa18580038cfa52a7183c8ffbbe7d727fe581300817efc1e96d1b0e9"},
+ {file = "yarl-1.9.3-cp37-cp37m-win32.whl", hash = "sha256:946db4511b2d815979d733ac6a961f47e20a29c297be0d55b6d4b77ee4b298f6"},
+ {file = "yarl-1.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2dad8166d41ebd1f76ce107cf6a31e39801aee3844a54a90af23278b072f1ccf"},
+ {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bb72d2a94481e7dc7a0c522673db288f31849800d6ce2435317376a345728225"},
+ {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a172c3d5447b7da1680a1a2d6ecdf6f87a319d21d52729f45ec938a7006d5d8"},
+ {file = "yarl-1.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2dc72e891672343b99db6d497024bf8b985537ad6c393359dc5227ef653b2f17"},
+ {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8d51817cf4b8d545963ec65ff06c1b92e5765aa98831678d0e2240b6e9fd281"},
+ {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53ec65f7eee8655bebb1f6f1607760d123c3c115a324b443df4f916383482a67"},
+ {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cfd77e8e5cafba3fb584e0f4b935a59216f352b73d4987be3af51f43a862c403"},
+ {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e73db54c967eb75037c178a54445c5a4e7461b5203b27c45ef656a81787c0c1b"},
+ {file = "yarl-1.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09c19e5f4404574fcfb736efecf75844ffe8610606f3fccc35a1515b8b6712c4"},
+ {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6280353940f7e5e2efaaabd686193e61351e966cc02f401761c4d87f48c89ea4"},
+ {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c25ec06e4241e162f5d1f57c370f4078797ade95c9208bd0c60f484834f09c96"},
+ {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7217234b10c64b52cc39a8d82550342ae2e45be34f5bff02b890b8c452eb48d7"},
+ {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4ce77d289f8d40905c054b63f29851ecbfd026ef4ba5c371a158cfe6f623663e"},
+ {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f74b015c99a5eac5ae589de27a1201418a5d9d460e89ccb3366015c6153e60a"},
+ {file = "yarl-1.9.3-cp38-cp38-win32.whl", hash = "sha256:8a2538806be846ea25e90c28786136932ec385c7ff3bc1148e45125984783dc6"},
+ {file = "yarl-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:6465d36381af057d0fab4e0f24ef0e80ba61f03fe43e6eeccbe0056e74aadc70"},
+ {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2f3c8822bc8fb4a347a192dd6a28a25d7f0ea3262e826d7d4ef9cc99cd06d07e"},
+ {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7831566595fe88ba17ea80e4b61c0eb599f84c85acaa14bf04dd90319a45b90"},
+ {file = "yarl-1.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff34cb09a332832d1cf38acd0f604c068665192c6107a439a92abfd8acf90fe2"},
+ {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe8080b4f25dfc44a86bedd14bc4f9d469dfc6456e6f3c5d9077e81a5fedfba7"},
+ {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8535e111a064f3bdd94c0ed443105934d6f005adad68dd13ce50a488a0ad1bf3"},
+ {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d155a092bf0ebf4a9f6f3b7a650dc5d9a5bbb585ef83a52ed36ba46f55cc39d"},
+ {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778df71c8d0c8c9f1b378624b26431ca80041660d7be7c3f724b2c7a6e65d0d6"},
+ {file = "yarl-1.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f9cafaf031c34d95c1528c16b2fa07b710e6056b3c4e2e34e9317072da5d1a"},
+ {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ca6b66f69e30f6e180d52f14d91ac854b8119553b524e0e28d5291a724f0f423"},
+ {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0e7e83f31e23c5d00ff618045ddc5e916f9e613d33c5a5823bc0b0a0feb522f"},
+ {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:af52725c7c39b0ee655befbbab5b9a1b209e01bb39128dce0db226a10014aacc"},
+ {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0ab5baaea8450f4a3e241ef17e3d129b2143e38a685036b075976b9c415ea3eb"},
+ {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d350388ba1129bc867c6af1cd17da2b197dff0d2801036d2d7d83c2d771a682"},
+ {file = "yarl-1.9.3-cp39-cp39-win32.whl", hash = "sha256:e2a16ef5fa2382af83bef4a18c1b3bcb4284c4732906aa69422cf09df9c59f1f"},
+ {file = "yarl-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d92d897cb4b4bf915fbeb5e604c7911021a8456f0964f3b8ebbe7f9188b9eabb"},
+ {file = "yarl-1.9.3-py3-none-any.whl", hash = "sha256:271d63396460b6607b588555ea27a1a02b717ca2e3f2cf53bdde4013d7790929"},
+ {file = "yarl-1.9.3.tar.gz", hash = "sha256:4a14907b597ec55740f63e52d7fee0e9ee09d5b9d57a4f399a7423268e457b57"},
+]
+
+[package.dependencies]
+idna = ">=2.0"
+multidict = ">=4.0"
+
+[[package]]
+name = "zipp"
+version = "3.17.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"},
+ {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"},
+]
+
+[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 = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"]
+
+[metadata]
+lock-version = "2.0"
+python-versions = ">=3.9,<3.11"
+content-hash = "50e096a0f6b9f172864aaaefedf573d858078d6b34a4eb07d9487da430ea2f81"
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..4a4d2e0
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,90 @@
+[tool.poetry]
+name = "emma-datasets"
+version = "1.35.0"
+description = ""
+authors = [
+ "Amit Parekh ",
+ "Alessandro Suglia ",
+]
+readme = "README.md"
+repository = "https://github.com/emma-heriot-watt/datasets"
+
+packages = [{ include = "emma_datasets", from = "src" }]
+
+
+[tool.poe]
+envfile = ".env"
+
+[tool.poe.tasks]
+
+[tool.poe.tasks.format]
+help = "Format using the pre-commit hooks"
+cmd = "pre-commit run --all-files"
+
+[tool.poe.tasks.typecheck]
+help = "Check types with mypy"
+cmd = "mypy ."
+
+[tool.poe.tasks.lint]
+help = "Lint with flake8"
+cmd = "flake8 ."
+
+[tool.poe.tasks.test]
+help = "Run the fast Python tests"
+cmd = "pytest --cov=src -m 'not slow'"
+
+[tool.poe.tasks.test-everything]
+help = "Run all the tests and get the coverage"
+cmd = "pytest -v --junitxml=pytest.xml --cov=src -m 'not slow and not multiprocessing'"
+
+[tool.poetry.dependencies]
+python = ">=3.9,<3.11"
+pydantic = { extras = ["dotenv"], version = ">=1.8.2,<2" }
+rich = ">=12.4.4"
+numpy = ">=1.22.3"
+orjson = ">=3.6.8"
+Pillow = ">=9.1.1"
+py7zr = ">=0.18.6"
+boto3 = "1.23.3"
+overrides = ">=6.1.0"
+typer = ">=0.4.0"
+datasets = ">=2.2.2"
+requests = ">=2.27.1"
+pandas = ">=1.4.3"
+emma-common = { git = "https://github.com/emma-heriot-watt/common.git" }
+faiss-cpu = ">=1.7.3"
+torch = ">=1.11.0,!=1.13.0,<2"
+spacy = "3.7.2"
+en-core-web-sm = { url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl" }
+transformers = ">=4.18.0"
+
+[tool.poetry.group.dev.dependencies]
+wemake-python-styleguide = ">=0.16.1"
+mypy = ">=0.950"
+pytest = ">=7.1.2"
+ipykernel = ">=6.13.0"
+pre-commit = ">=2.19.0"
+poethepoet = ">=0.13.1"
+pytest-cov = ">=3.0.0"
+jupyterlab = ">=3.3.3"
+isort = ">=5.10.1"
+black = { extras = ["jupyter"], version = ">=22.3" }
+pytest-cases = ">=3.6.13"
+deepdiff = ">=5.8.1"
+scikit-learn = ">=1.2.0"
+types-requests = ">=2.27.29"
+bandit = "!=1.7.4,!=1.7.5"
+
+[tool.black]
+line-length = 99
+
+[tool.isort]
+profile = "black"
+combine_as_imports = true
+lines_after_imports = 2
+line_length = 99
+known_first_party = ["emma_datasets"]
+
+[build-system]
+requires = ["poetry-core>=1.0.0", "setuptools"]
+build-backend = "poetry.core.masonry.api"
diff --git a/pytest.ini b/pytest.ini
new file mode 100644
index 0000000..e367cf0
--- /dev/null
+++ b/pytest.ini
@@ -0,0 +1,12 @@
+[pytest]
+
+testpaths =
+ tests
+
+filterwarnings =
+ ignore::UserWarning
+ ignore::DeprecationWarning
+
+markers =
+ slow: mark test as slow
+ multiprocessing: mark test as using multiprocessing
diff --git a/scripts/.gitkeep b/scripts/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/emma_datasets/__init__.py b/src/emma_datasets/__init__.py
new file mode 100644
index 0000000..43bc893
--- /dev/null
+++ b/src/emma_datasets/__init__.py
@@ -0,0 +1 @@
+from emma_datasets._version import __version__
diff --git a/src/emma_datasets/__main__.py b/src/emma_datasets/__main__.py
new file mode 100644
index 0000000..796eb78
--- /dev/null
+++ b/src/emma_datasets/__main__.py
@@ -0,0 +1,22 @@
+import rich_click as click
+import typer
+
+from emma_datasets.commands.create_downstream_dbs import app as create_downstream_dbs_cli
+from emma_datasets.commands.download_datasets import download_datasets
+from emma_datasets.commands.extract_annotations import app as extract_annotations_cli
+from emma_datasets.commands.organise_all_datasets import organise_datasets
+
+
+click.rich_click.USE_RICH_MARKUP = True
+click.rich_click.USE_MARKDOWN = True
+click.rich_click.SHOW_ARGUMENTS = True
+click.rich_click.GROUP_ARGUMENTS_OPTIONS = False
+
+app = typer.Typer(add_completion=False, no_args_is_help=True)
+app.add_typer(extract_annotations_cli, name="extract")
+app.add_typer(create_downstream_dbs_cli, name="downstream")
+app.command(name="organise")(organise_datasets)
+app.command(name="download")(download_datasets)
+
+if __name__ == "__main__":
+ app()
diff --git a/src/emma_datasets/_version.py b/src/emma_datasets/_version.py
new file mode 100644
index 0000000..41de282
--- /dev/null
+++ b/src/emma_datasets/_version.py
@@ -0,0 +1,7 @@
+# Store the version here so:
+# 1) we don't load dependencies by storing it in __init__.py
+# 2) we can import it in setup.py for the same reason
+# 3) we can import it into your module module
+#
+# This is automatic, therefore DO NOT manually change this file!
+__version__ = "1.35.0"
diff --git a/src/emma_datasets/augmentations/__init__.py b/src/emma_datasets/augmentations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/__init__.py b/src/emma_datasets/augmentations/simbot_augmentators/__init__.py
new file mode 100644
index 0000000..5604407
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/__init__.py
@@ -0,0 +1,12 @@
+from emma_datasets.augmentations.simbot_augmentators.break_augmentator import BreakAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clean_augmentator import CleanAugmentation
+from emma_datasets.augmentations.simbot_augmentators.fill_augmentator import FillPourAugmentation
+from emma_datasets.augmentations.simbot_augmentators.goto_augmentator import GoToAugmentation
+from emma_datasets.augmentations.simbot_augmentators.open_close_augmentator import (
+ OpenCloseAugmentation,
+)
+from emma_datasets.augmentations.simbot_augmentators.pickup_augmentator import PickupAugmentation
+from emma_datasets.augmentations.simbot_augmentators.place_augmentator import PlaceAugmentation
+from emma_datasets.augmentations.simbot_augmentators.scan_augmentator import ScanAugmentation
+from emma_datasets.augmentations.simbot_augmentators.search_augmentator import SearchAugmentation
+from emma_datasets.augmentations.simbot_augmentators.toggle_augmentator import ToggleAugmentation
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/action_creators.py b/src/emma_datasets/augmentations/simbot_augmentators/action_creators.py
new file mode 100644
index 0000000..e725aac
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/action_creators.py
@@ -0,0 +1,238 @@
+import os
+import random
+from typing import Any, Union
+
+from emma_datasets.datamodels.datasets.utils.simbot_utils.paraphrasers import (
+ BaseParaphraser,
+ BreakParaphraser,
+ CleanParaphraser,
+ CloseParaphraser,
+ FillParaphraser,
+ GotoParaphraser,
+ InventoryObjectGenerator,
+ OpenParaphraser,
+ PickupParaphraser,
+ PlaceParaphraser,
+ PourParaphraser,
+ ScanParaphraser,
+ SearchParaphraser,
+ ToggleParaphraser,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+)
+
+
+class BaseActionCreator:
+ """General action creator."""
+
+ def __init__(self) -> None:
+ self.action_type = "Base"
+ self.paraphraser: BaseParaphraser
+ self._inventory_object_generator = InventoryObjectGenerator()
+
+ def __call__(self, augmentation_instruction: AugmentationInstruction) -> dict[str, Any]:
+ """Create an instruction dict from an augmentation instruction."""
+ synthetic_action = self._create_synthetic_action(augmentation_instruction)
+ instruction_dict = self._create_synthetic_instruction(
+ augmentation_instruction, synthetic_action
+ )
+ return instruction_dict
+
+ def _create_mission_id(self, augmentation_instruction: AugmentationInstruction) -> str:
+ image_name = self._flat_image_name(augmentation_instruction.image_name)
+ return f"{self.action_type}_{augmentation_instruction.annotation_id}_{image_name}"
+
+ def _flat_image_name(self, image_name: str) -> str:
+ return "__".join(image_name.split(os.sep))
+
+ def _create_synthetic_action(
+ self, augmentation_instruction: AugmentationInstruction
+ ) -> dict[str, Any]:
+ attributes: Union[list[dict[str, Any]], dict[str, Any]]
+ # This is currently only for the search action
+ if isinstance(augmentation_instruction.attributes, list):
+ attributes = [attribute.dict() for attribute in augmentation_instruction.attributes]
+ else:
+ attributes = augmentation_instruction.attributes.dict()
+
+ image_name = self._flat_image_name(augmentation_instruction.image_name)
+ colorimages = [image_name]
+
+ synthetic_action = {
+ "id": 0,
+ "type": self.action_type,
+ self.action_type.lower(): {
+ "object": {
+ "id": augmentation_instruction.object_id,
+ "colorImageIndex": augmentation_instruction.image_index,
+ "mask": augmentation_instruction.bbox,
+ "attributes": attributes,
+ },
+ },
+ "colorImages": colorimages,
+ "final": True,
+ }
+ return synthetic_action
+
+ def _create_synthetic_instruction(
+ self,
+ augmentation_instruction: AugmentationInstruction,
+ synthetic_action: dict[str, Any],
+ ) -> dict[str, Any]:
+ # This is currently only for the search action
+ if isinstance(augmentation_instruction.attributes, list):
+ object_ids = augmentation_instruction.object_id
+ search_object_initial_candidate_idx = random.randint(0, len(object_ids) - 1)
+ object_id = object_ids[search_object_initial_candidate_idx]
+
+ attributes = augmentation_instruction.attributes
+ object_attributes = attributes[search_object_initial_candidate_idx]
+ synthetic_action[self.action_type.lower()]["selected_object"] = {
+ "id": object_id,
+ "attributes": object_attributes.dict(),
+ }
+ else:
+ object_id = augmentation_instruction.object_id # type: ignore[assignment]
+ object_attributes = augmentation_instruction.attributes
+
+ inventory_object_id = None
+ if self.paraphraser.requires_inventory:
+ inventory_object_id = self._inventory_object_generator(action_type=self.action_type)
+
+ synthetic_instruction = {
+ "instruction": self.paraphraser(object_id, object_attributes, inventory_object_id),
+ "actions": [0],
+ }
+ mission_id = self._create_mission_id(augmentation_instruction)
+
+ instruction_dict = {
+ "instruction": synthetic_instruction,
+ "actions": [synthetic_action],
+ "mission_id": mission_id,
+ "annotation_id": 0,
+ "instruction_id": 0,
+ "synthetic": True,
+ "room_name": augmentation_instruction.room_name,
+ "paraphrasable": True,
+ }
+ return instruction_dict
+
+
+class ToggleActionCreator(BaseActionCreator):
+ """Toggle action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Toggle"
+ self.paraphraser = ToggleParaphraser(object_synonyms)
+
+
+class ScanActionCreator(BaseActionCreator):
+ """Scan action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Scan"
+ self.paraphraser = ScanParaphraser(object_synonyms)
+
+
+class GotoActionCreator(BaseActionCreator):
+ """Goto action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Goto"
+ self.paraphraser = GotoParaphraser(object_synonyms)
+
+
+class SearchActionCreator(BaseActionCreator):
+ """Search action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Search"
+ self.paraphraser = SearchParaphraser(object_synonyms)
+
+ def __call__(self, augmentation_instruction: AugmentationInstruction) -> dict[str, Any]:
+ """Create the search instruction dictionary."""
+ instruction_dict = super().__call__(augmentation_instruction=augmentation_instruction)
+ instruction_dict["positive"] = augmentation_instruction.augmentation_metadata["positive"] # type: ignore[index]
+ return instruction_dict
+
+ def _create_mission_id(self, augmentation_instruction: AugmentationInstruction) -> str:
+ image_name = self._flat_image_name(augmentation_instruction.image_name)
+ positive = augmentation_instruction.augmentation_metadata["positive"] # type: ignore[index]
+ return f"{self.action_type}_ispositive{positive}_{augmentation_instruction.annotation_id}_{image_name}"
+
+
+class OpenActionCreator(BaseActionCreator):
+ """Open action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Open"
+ self.paraphraser = OpenParaphraser(object_synonyms)
+
+
+class CloseActionCreator(BaseActionCreator):
+ """Close action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Close"
+ self.paraphraser = CloseParaphraser(object_synonyms)
+
+
+class BreakActionCreator(BaseActionCreator):
+ """Break action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Break"
+ self.paraphraser = BreakParaphraser(object_synonyms)
+
+
+class CleanActionCreator(BaseActionCreator):
+ """Clean action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Clean"
+ self.paraphraser = CleanParaphraser(object_synonyms)
+
+
+class FillActionCreator(BaseActionCreator):
+ """Fill action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Fill"
+ self.paraphraser = FillParaphraser(object_synonyms)
+
+
+class PourActionCreator(BaseActionCreator):
+ """Pour action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Pour"
+ self.paraphraser = PourParaphraser(object_synonyms)
+
+
+class PickupActionCreator(BaseActionCreator):
+ """Pickup action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Pickup"
+ self.paraphraser = PickupParaphraser(object_synonyms)
+
+
+class PlaceActionCreator(BaseActionCreator):
+ """Place action class."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__()
+ self.action_type = "Place"
+ self.paraphraser = PlaceParaphraser(object_synonyms)
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/base_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/base_augmentator.py
new file mode 100644
index 0000000..d9ccee0
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/base_augmentator.py
@@ -0,0 +1,315 @@
+import abc
+import csv
+import logging
+import random
+from collections import defaultdict
+from pathlib import Path
+from typing import Any, Optional
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common import Settings, use_rich_for_logging
+from emma_datasets.constants.simbot.simbot import get_arena_definitions
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.object_features_processing import (
+ compute_bbox_area,
+ compute_bbox_center_coords,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+use_rich_for_logging()
+logger = logging.getLogger(__name__)
+
+
+class BaseAugmentation(abc.ABC):
+ """Base class for object augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ ) -> None:
+ self.root_vision_path = root_vision_path
+ self.action_type = "Base"
+ self.max_examples_per_class = 1
+ self.action_objects: list[str] = []
+ self._assets_to_labels = get_arena_definitions()["asset_to_label"]
+ self._labels_to_assets = defaultdict(list)
+ for asset, object_label in self._assets_to_labels.items():
+ self._labels_to_assets[object_label].append(asset)
+ label_to_index = get_arena_definitions()["label_to_idx"]
+ self._index_to_label = {index: label for label, index in label_to_index.items()}
+
+ self._object_color_map = {
+ "Embiggenator Monitor": ["pink", "purple"],
+ "Freeze Ray Monitor": ["blue"],
+ "Freeze Ray Shelf": ["blue"],
+ "Gravity Monitor": ["green"],
+ "Portal Generator Monitor": ["black"],
+ "Laser Monitor": ["red"],
+ "Laser Shelf": ["red"],
+ }
+
+ self._special_object_type_map = {
+ "AP_Prop_Shelf_Wall_04": "Freeze Ray Shelf",
+ "AP_Prop_Shelf_Wall_FreezeRay": "Freeze Ray Shelf",
+ "AP_Prop_Shelf_Wall_Laser": "Laser Shelf",
+ "V_Monitor_Embiggenator": "Embiggenator Monitor",
+ "V_Monitor_FreezeRay": "Freeze Ray Monitor",
+ "V_Monitor_Gravity": "Gravity Monitor",
+ "V_Monitor_Laser": "Laser Monitor",
+ "V_Monitor_Portal": "Portal Generator Monitor",
+ "Bookshelf_Wooden_01": "Bookshelf",
+ "TAMPrototypeHead_01": "Emotion Tester",
+ "PackingBox": "Packing Box",
+ "CandyJar_01": "Candy Jar",
+ }
+ self._special_object_class_map = {
+ object_class: object_type
+ for object_type, object_class in self._special_object_type_map.items()
+ }
+
+ self._object_to_special_object_map = dict(self._special_object_type_map.items())
+
+ self.report_path = report_path
+ with open(self.report_path, "w") as csvfile:
+ writer = csv.writer(csvfile)
+ writer.writerow(["action", "object", "total", "min area", "mean area", "max area"])
+
+ self.diverse_image_selector = diverse_image_selector
+
+ @abc.abstractmethod
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Creates new annotations for a given object."""
+ raise NotImplementedError("Do not call BaseAugmentation class")
+
+ @classmethod
+ def from_yaml_config(
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ *args: Any,
+ ) -> "BaseAugmentation":
+ """Initiate from config."""
+ raise NotImplementedError("Do not call BaseAugmentation class")
+
+ def post_process_metadata(
+ self,
+ action_type_metadata: dict[str, Any],
+ class_thresholds: dict[str, list[int]],
+ ) -> dict[str, Any]:
+ """Post-process any annotation."""
+ return action_type_metadata
+
+ def _downsample_augmentation_metadata(
+ self,
+ action_type_metadata: dict[str, Any],
+ ) -> dict[str, Any]:
+ """Downsamples the dataset using a fixed maximum number of examples per object."""
+ final_metadata: dict[str, Any] = {}
+ action_metadata_grouped_per_object_class: dict[str, Any] = {}
+
+ for key, annotation in action_type_metadata.items():
+ action = annotation["actions"][0][self.action_type.lower()]
+ object_id = action["object"]["id"]
+
+ object_asset = get_object_asset_from_object_id(object_id, self._assets_to_labels)
+ object_class = self._special_object_type_map.get(
+ object_asset, self._assets_to_labels[object_asset]
+ )
+
+ instructions = action_metadata_grouped_per_object_class.get(object_class, [])
+ instructions.append({key: annotation})
+ action_metadata_grouped_per_object_class[object_class] = instructions
+
+ for _, object_class_metadata in action_metadata_grouped_per_object_class.items():
+ images = [
+ instance["actions"][0]["colorImages"][0]
+ for metadata in object_class_metadata
+ for instance in metadata.values()
+ ]
+ _, selected_indices = self.diverse_image_selector(
+ images, centroids=self.max_examples_per_class
+ )
+ for idx in selected_indices:
+ final_metadata.update(object_class_metadata[idx])
+
+ return final_metadata
+
+ def _should_ignore_annotation_for_image(
+ self,
+ annotation: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ class_thresholds: dict[str, list[int]],
+ ) -> bool:
+ """Check basic stuff to verify that an annotation is valid for an augmentation.
+
+ An annotation is valid if 1) the object class is not `Unassigned`, 2) the object is in the
+ actionable objects, and 3) the area bounding box of the object is within the object class
+ thresholds.
+ """
+ image_annotation = annotation["image_annotation"]
+ object_type = image_annotation["object_type"]
+ if object_type == "Unassigned" or not object_type:
+ return True
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ # Ignore objects that are not specified
+ if readable_name not in self.action_objects:
+ return True
+
+ # Ignore too small objects
+ bbox = self._get_bbox(image_annotation)
+ if compute_bbox_area(bbox) < class_thresholds[object_class][0]: # noqa: WPS531
+ return True
+ return False
+
+ def _merge_instructions(
+ self, action_instructions_dict: dict[str, Any], annotation_id: int
+ ) -> list[dict[str, Any]]:
+ """Merge the instructions into a list.
+
+ Create additional instructions determined by the object attributes.
+ """
+ action_instructions = []
+ for _, object_instructions in action_instructions_dict.items():
+ if len(object_instructions) > 1:
+ instructions, annotation_id = self._get_instructions_from_attributes(
+ object_instructions, annotation_id
+ )
+ action_instructions.extend(instructions)
+ else:
+ action_instructions.extend(object_instructions)
+ return [dict(instruction) for instruction in action_instructions]
+
+ def _compute_distance_to_object(
+ self, object_annotation: dict[str, Any], robot_position: NDArray[np.float32]
+ ) -> np.float32:
+ object_position = np.array(
+ [
+ object_annotation["position"]["x"],
+ object_annotation["position"]["y"],
+ object_annotation["position"]["z"],
+ ]
+ )
+ distance_to_object = np.linalg.norm(robot_position - object_position)
+ return distance_to_object
+
+ def _get_instructions_from_attributes(
+ self,
+ instruction_list: list[AugmentationInstruction],
+ annotation_id: int,
+ ) -> tuple[list[AugmentationInstruction], int]:
+ instructions = []
+ bbox_centers = [
+ compute_bbox_center_coords(instruction.bbox) for instruction in instruction_list # type: ignore[arg-type]
+ ]
+
+ left2right = np.argsort([bbox_center[0] for bbox_center in bbox_centers])
+ left_instruction = AugmentationInstruction(
+ action_type=instruction_list[left2right[0]].action_type,
+ object_id=instruction_list[left2right[0]].object_id,
+ attributes=SimBotObjectAttributes(
+ readable_name=instruction_list[left2right[0]].attributes.readable_name,
+ color=instruction_list[left2right[0]].attributes.color,
+ location="left",
+ ),
+ bbox=instruction_list[left2right[0]].bbox,
+ image_name=instruction_list[left2right[0]].image_name,
+ annotation_id=annotation_id,
+ )
+ instructions.append(left_instruction)
+ annotation_id += 1
+
+ right_instruction = AugmentationInstruction(
+ action_type=instruction_list[left2right[-1]].action_type,
+ object_id=instruction_list[left2right[-1]].object_id,
+ attributes=SimBotObjectAttributes(
+ readable_name=instruction_list[left2right[-1]].attributes.readable_name,
+ color=instruction_list[left2right[-1]].attributes.color,
+ location="right",
+ ),
+ bbox=instruction_list[left2right[-1]].bbox,
+ image_name=instruction_list[left2right[-1]].image_name,
+ annotation_id=annotation_id,
+ )
+
+ instructions.append(right_instruction)
+ annotation_id += 1
+
+ return instructions, annotation_id
+
+ def _get_bbox(self, image_annotation: dict[str, Any]) -> list[int]:
+ return image_annotation["bbox"]
+
+ def _get_color(self, readable_name: str) -> Optional[str]:
+ colors = self._object_color_map.get(readable_name, None)
+ if colors is None:
+ return None
+ return random.choice(colors)
+
+ def _make_report(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> None:
+ report_dict = defaultdict(list)
+ for _, annotation in action_metadata.items():
+ action_object_metadata = annotation["actions"][-1][self.action_type.lower()]
+ if self.action_type == "Search":
+ object_id = action_object_metadata["selected_object"]["id"]
+ mask_idx = action_object_metadata["object"]["id"].index(object_id)
+ bbox = action_object_metadata["object"]["mask"][mask_idx]
+ readable_name = action_object_metadata["selected_object"]["attributes"][
+ "readable_name"
+ ]
+ else:
+ bbox = action_object_metadata["object"]["mask"]
+ readable_name = action_object_metadata["object"]["attributes"]["readable_name"]
+ area = compute_bbox_area(bbox)
+ report_dict[readable_name].append(area)
+
+ rows = []
+ sorted_readable_names = sorted(report_dict.keys())
+ for readable_name in sorted_readable_names: # noqa: WPS440
+ areas = report_dict[readable_name]
+ object_asset = self._special_object_class_map.get(readable_name, readable_name)
+ object_class = self._assets_to_labels.get(object_asset, object_asset)
+ min_threshold = class_thresholds[object_class][0]
+ action_msg = f"{self.action_type} {readable_name}:"
+ area_msg = f"Total {len(areas)} Min {np.min(areas)} Mean {np.mean(areas)} Max {np.max(areas)} Min Thresh {min_threshold}" # noqa: WPS221
+ logger.info(f"{action_msg} {area_msg}")
+
+ rows.append(
+ [
+ self.action_type,
+ readable_name,
+ len(areas),
+ np.min(areas),
+ np.mean(areas),
+ np.max(areas),
+ ]
+ )
+
+ with open(self.report_path, "a") as csvfile:
+ writer = csv.writer(csvfile)
+ writer.writerows(rows)
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/break_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/break_augmentator.py
new file mode 100644
index 0000000..4c1966e
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/break_augmentator.py
@@ -0,0 +1,128 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class BreakAugmentation(BaseAugmentation):
+ """Break Augmentation."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ break_classes: list[str],
+ action_type: str = "Break",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ self.action_objects = break_classes
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ break_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ if should_ignore_ann:
+ continue
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+
+ is_breakable = "BREAKABLE" in object_annotation["supportedStates"]
+ is_broken = object_annotation["currentStates"].get("Broken", False)
+ can_break_object = all(
+ [is_breakable, not is_broken, distance_to_object <= self.min_interaction_distance]
+ )
+
+ if can_break_object:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ break_instructions_dict[object_class].append(instruction)
+
+ break_instructions = self._merge_instructions(break_instructions_dict, annotation_id)
+ return break_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ break_classes: list[str],
+ action_type: str = "Break",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ break_classes=break_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the break action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/clean_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/clean_augmentator.py
new file mode 100644
index 0000000..71d16a2
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/clean_augmentator.py
@@ -0,0 +1,138 @@
+import random
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class CleanAugmentation(BaseAugmentation):
+ """Clean Augmentation."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ cleanable_object_types: list[str],
+ cleaning_classes: list[str],
+ action_type: str = "Clean",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 1000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # DIRTY interactable uses CLEAN on KitchenCounterSink_01 that is TOGGLED, resulting in DIRTY being set to false
+ self.action_objects = cleaning_classes
+ self.cleanable_object_types = cleanable_object_types
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ clean_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ if should_ignore_ann or not object_annotation["currentStates"]["FILLED"]:
+ continue
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+ if distance_to_object <= self.min_interaction_distance:
+ cleaning_object_type = random.choice(self.cleanable_object_types)
+ cleaning_object_asset = get_object_asset_from_object_id(
+ object_type, self._assets_to_labels
+ )
+ cleaning_object_class = self._assets_to_labels[object_asset]
+ cleaning_readable_name = self._special_object_type_map.get(
+ cleaning_object_asset, cleaning_object_class
+ )
+
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=cleaning_object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=cleaning_readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+
+ annotation_id += 1
+ clean_instructions_dict[object_class].append(instruction)
+
+ clean_instructions = self._merge_instructions(clean_instructions_dict, annotation_id)
+ return clean_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ cleanable_object_types: list[str],
+ cleaning_classes: list[str],
+ action_type: str = "Clean",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 1000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ cleanable_object_types=cleanable_object_types,
+ cleaning_classes=cleaning_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the clean action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/clip_image_diversity.py b/src/emma_datasets/augmentations/simbot_augmentators/clip_image_diversity.py
new file mode 100644
index 0000000..9a94edd
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/clip_image_diversity.py
@@ -0,0 +1,264 @@
+import os
+from argparse import ArgumentParser
+from pathlib import Path
+from typing import Optional, Union
+
+import faiss
+import torch
+from PIL import Image
+from torch.utils.data import DataLoader, Dataset
+from transformers import AutoProcessor, CLIPVisionModel
+
+from emma_datasets.common import get_progress
+
+
+class CLIProcessor:
+ """CLIP processor class.
+
+ Used to select diverse images by performing kmeans on their CLIP embeddings.
+ """
+
+ def __init__(
+ self, image_encodings_path: Path = Path("/home/ubuntu/data/clip_features/") # noqa: WPS404
+ ) -> None:
+ self.image_encodings_path = image_encodings_path
+
+ def __call__(self, image_names: list[str], centroids: int = 16) -> tuple[list[str], list[int]]:
+ """Select the centroid-most diverse images."""
+ # If the number of images is less than the number of centroids, return all the images.
+ if len(image_names) <= centroids:
+ return image_names, list(range(len(image_names)))
+
+ image_encodings = []
+ for image_name in image_names:
+ image_encoding_basename = f"{os.path.splitext(image_name)[0]}.pt"
+ image_encoding_path = self.image_encodings_path.joinpath(image_encoding_basename)
+ image_encoding = torch.load(image_encoding_path)
+ image_encodings.append(image_encoding)
+
+ tensor_image_encodings = torch.stack(image_encodings)
+ means = tensor_image_encodings.mean(dim=1, keepdim=True)
+ stds = tensor_image_encodings.std(dim=1, keepdim=True)
+ normalized_data = (tensor_image_encodings - means) / stds
+
+ kmeans = faiss.Kmeans(
+ normalized_data.shape[1],
+ centroids,
+ verbose=False,
+ min_points_per_centroid=1,
+ )
+ kmeans.train(normalized_data)
+
+ index = faiss.IndexFlatL2(normalized_data.shape[1])
+ index.add(normalized_data)
+ _, indices = index.search(kmeans.centroids, 1)
+
+ indices = indices.squeeze()
+ return [image_names[idx] for idx in indices.squeeze()], indices.tolist()
+
+
+class CLIPDataset(Dataset[tuple[torch.Tensor, str]]):
+ """Placeholder dataset to get CLIP embeddings."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ metadata_files: list[Path],
+ output_dir: Path,
+ processor: AutoProcessor,
+ ) -> None:
+ self.root_vision_path = root_vision_path
+ self.metadata_files = metadata_files
+ self.output_dir = output_dir
+ self.processor = processor
+
+ def __len__(self) -> int:
+ """Dataset length."""
+ return len(self.metadata_files)
+
+ def __getitem__(self, idx: int) -> tuple[torch.Tensor, str]:
+ """Get an item from dataset."""
+ metadata_json_path = self.metadata_files[idx]
+ full_image_name = metadata_json_path.parent.joinpath(
+ f"{metadata_json_path.stem.split('_')[0]}_color.png",
+ )
+ image_name = str(full_image_name.relative_to(self.root_vision_path))
+
+ image = Image.open(full_image_name)
+ output_pt = os.path.splitext(str(image_name).replace(os.sep, "__"))[0]
+ output_pt = os.path.join(self.output_dir, f"{output_pt}.pt")
+ inputs = self.processor(images=image, return_tensors="pt")
+ return inputs, output_pt
+
+
+class CLIPFeatureExtractor:
+ """CLIP feature extractor."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ metadata_file: Path,
+ output_dir: Path,
+ dataset_version: str,
+ batch_size: int,
+ num_workers: int,
+ model_name: str,
+ limit_examples: Optional[int],
+ ):
+ output_dir.mkdir(parents=True, exist_ok=True)
+
+ self.model = CLIPVisionModel.from_pretrained(model_name)
+ self.model = self.model.eval()
+ self.processor = AutoProcessor.from_pretrained(model_name)
+
+ self.metadata_files = load_all_metadata_files(
+ root_vision_path, metadata_file, limit_examples, dataset_version
+ )
+ self.bsz = batch_size
+ self.dataset = CLIPDataset(
+ root_vision_path, self.metadata_files, output_dir, self.processor
+ )
+ self.dataloader = DataLoader(
+ self.dataset, batch_size=batch_size, num_workers=num_workers, shuffle=False
+ )
+
+ def run(self) -> None:
+ """Run the feature extractor."""
+ progress = get_progress()
+ task_id = progress.add_task(
+ "Encoding images with CLIP",
+ visible=True,
+ start=True,
+ total=int(len(self.dataset) // self.bsz),
+ comment="",
+ )
+ with progress:
+ for batch in self.dataloader:
+ inputs, output_pt_files = batch
+ inputs["pixel_values"] = inputs["pixel_values"].squeeze(1)
+
+ with torch.no_grad():
+ outputs = self.model(**inputs)
+
+ batch_encodings = outputs.pooler_output
+ for image_encoding, output_pt_file in zip(batch_encodings, output_pt_files):
+ torch.save(image_encoding, output_pt_file)
+ progress.advance(task_id)
+
+
+def get_metadata_version(root_file_path: Union[str, Path]) -> str:
+ """Get the version from a metadata filepath."""
+ return str(root_file_path).split("object_detection_data_")[1][:2]
+
+
+def load_all_metadata_files(
+ root_vision_path: Path,
+ metadata_file: Path,
+ limit_examples: Optional[int] = None,
+ dataset_version: Optional[str] = None,
+) -> list[Path]:
+ """Reads all the available image annotation files."""
+ with open(metadata_file) as f:
+ annotation_files = f.readlines()
+ annotation_files = sorted([line.strip() for line in annotation_files])
+ metadata_files_temp = sorted(
+ [root_vision_path.joinpath(line.strip()) for line in annotation_files]
+ )
+ if dataset_version is not None:
+ metadata_files_temp = [
+ metadata_file
+ for metadata_file in metadata_files_temp
+ if get_metadata_version(metadata_file) == dataset_version
+ ]
+
+ if limit_examples is not None:
+ metadata_files_temp = metadata_files_temp[:limit_examples]
+
+ metadata_files = []
+
+ progress = get_progress()
+ task_id = progress.add_task(
+ f"Loading metadata from file {metadata_file}",
+ visible=True,
+ start=True,
+ total=len(metadata_files_temp),
+ comment="",
+ )
+ with progress:
+ for meta_path in metadata_files_temp:
+ img_num = meta_path.name.split("_")[0]
+ subroot_dir = meta_path.parent
+ image_path = subroot_dir.joinpath(f"{img_num}_color.png")
+ image_seg_path = subroot_dir.joinpath(f"{img_num}_seg.png")
+ if image_path.exists() and image_seg_path.exists():
+ metadata_files.append(Path(meta_path))
+ progress.advance(task_id)
+
+ return metadata_files
+
+
+if __name__ == "__main__":
+ parser = ArgumentParser()
+
+ parser.add_argument(
+ "--root_vision_path",
+ type=Path,
+ help="Path to the root directory containing the vision datasets",
+ default=Path("/home/ubuntu/data/object_detection"),
+ )
+
+ parser.add_argument(
+ "--input_metadata_txt_path",
+ type=Path,
+ help="Path to the root directory containing the vision datasets",
+ default=Path(
+ "/home/ubuntu/data/datav2_collapsev4_isvalidv4_rgv1.12_classfiltered_train_09_09_2022/metadata_train.txt"
+ ),
+ )
+
+ parser.add_argument(
+ "--output_dir",
+ type=Path,
+ help="Path to the output directory containing the clip features",
+ default=Path("/home/ubuntu/data/clip_features"),
+ )
+
+ parser.add_argument(
+ "--limit_examples",
+ type=int,
+ help="Limit of examples",
+ )
+ parser.add_argument(
+ "--dataset_version",
+ type=str,
+ help="Use only examples from a specific dataset version",
+ )
+
+ parser.add_argument(
+ "--num_workers",
+ type=int,
+ default=0,
+ help="Number of workers",
+ )
+
+ parser.add_argument(
+ "--batch_size",
+ type=int,
+ default=16, # noqa: WPS432
+ help="Number of workers",
+ )
+
+ args = parser.parse_args()
+
+ feature_extractor = CLIPFeatureExtractor(
+ root_vision_path=args.root_vision_path,
+ metadata_file=args.input_metadata_txt_path,
+ output_dir=args.output_dir,
+ dataset_version=args.dataset_version,
+ batch_size=args.batch_size,
+ num_workers=args.num_workers,
+ model_name="openai/clip-vit-large-patch14",
+ limit_examples=args.limit_examples,
+ )
+
+ feature_extractor.run()
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/fill_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/fill_augmentator.py
new file mode 100644
index 0000000..19ac67d
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/fill_augmentator.py
@@ -0,0 +1,153 @@
+import random
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.object_features_processing import (
+ compute_bbox_area,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class FillPourAugmentation(BaseAugmentation):
+ """FillPour Augmentation."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ fillable_object_types: list[str],
+ filling_classes: list[str],
+ action_type: str = "Fill",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # Fillable interactable with FILLED set to false uses FILL on KitchenCounterSink_01 that has TOGGLED set to true, resulting in fillable interactable having FILLED set to true
+ self.fillable_object_types = fillable_object_types
+ self.filling_classes = filling_classes
+
+ def __call__( # noqa: WPS231
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ clean_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+ if object_type == "Unassigned" or not object_type:
+ continue
+
+ # Ignore empty sink images
+ if not object_annotation["currentStates"]["FILLED"]:
+ continue
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ # Ignore objects that are not specified for the Fill action
+ if self.action_type == "Fill" and readable_name not in self.filling_classes:
+ continue
+
+ # Ignore objects that are not specified for the Fill action
+ if self.action_type == "Pour" and object_type not in self.fillable_object_types:
+ continue
+
+ # Ignore too small objects
+ bbox = self._get_bbox(image_annotation)
+ if compute_bbox_area(bbox) < class_thresholds[object_class][0]:
+ continue
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+ if distance_to_object <= self.min_interaction_distance:
+ if self.action_type == "Fill":
+ object_type = random.choice(self.fillable_object_types)
+ object_asset = get_object_asset_from_object_id(
+ object_type, self._assets_to_labels
+ )
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+
+ annotation_id += 1
+ clean_instructions_dict[object_class].append(instruction)
+
+ clean_instructions = self._merge_instructions(clean_instructions_dict, annotation_id)
+ return clean_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ fillable_object_types: list[str],
+ filling_classes: list[str],
+ action_type: str = "Fill",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ fillable_object_types=fillable_object_types,
+ filling_classes=filling_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the fill action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/goto_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/goto_augmentator.py
new file mode 100644
index 0000000..56fde70
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/goto_augmentator.py
@@ -0,0 +1,124 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class GoToAugmentation(BaseAugmentation):
+ """Goto Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ goto_classes: list[str],
+ action_type: str = "Goto",
+ min_interaction_distance: float = 2.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # Force goto special monitors
+ self.action_objects = goto_classes
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ navigation_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ if should_ignore_ann:
+ continue
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+ if distance_to_object > self.min_interaction_distance:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ navigation_instructions_dict[object_class].append(instruction)
+
+ navigation_instructions = self._merge_instructions(
+ navigation_instructions_dict, annotation_id
+ )
+ return navigation_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ goto_classes: list[str],
+ action_type: str = "Goto",
+ min_interaction_distance: float = 2.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ goto_classes=goto_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the goto action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/open_close_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/open_close_augmentator.py
new file mode 100644
index 0000000..ede060d
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/open_close_augmentator.py
@@ -0,0 +1,131 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class OpenCloseAugmentation(BaseAugmentation):
+ """OpenClose Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ action_type_classes: list[str],
+ action_type: str = "Open",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_objects = action_type_classes
+ self.action_type = action_type
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ open_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+
+ if should_ignore_ann:
+ continue
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ if self._should_skip(object_annotation):
+ continue
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+
+ if distance_to_object <= self.min_interaction_distance:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._object_color_map.get(object_class, None), # type: ignore[arg-type]
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ open_instructions_dict[object_class].append(instruction)
+
+ open_instructions = self._merge_instructions(open_instructions_dict, annotation_id)
+ return open_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ action_type_classes: list[str],
+ action_type: str = "Open",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ action_type_classes=action_type_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the open and close actions."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
+
+ def _should_skip(self, object_annotation: dict[str, Any]) -> bool:
+ if self.action_type == "Open" and object_annotation["currentStates"]["OPENED"]:
+ return True
+
+ return self.action_type == "Close" and not object_annotation["currentStates"]["OPENED"]
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/pickup_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/pickup_augmentator.py
new file mode 100644
index 0000000..6eb8116
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/pickup_augmentator.py
@@ -0,0 +1,123 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class PickupAugmentation(BaseAugmentation):
+ """Pickup Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ pickup_classes: list[str],
+ action_type: str = "Pickup",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # Force pickup special monitors
+ self.action_objects = pickup_classes
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ pickup_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ if should_ignore_ann:
+ continue
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+
+ if distance_to_object <= self.min_interaction_distance:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ pickup_instructions_dict[object_class].append(instruction)
+
+ pickup_instructions = self._merge_instructions(pickup_instructions_dict, annotation_id)
+ return pickup_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ pickup_classes: list[str],
+ action_type: str = "Pickup",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ pickup_classes=pickup_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the pickup action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/place_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/place_augmentator.py
new file mode 100644
index 0000000..f18e504
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/place_augmentator.py
@@ -0,0 +1,137 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class PlaceAugmentation(BaseAugmentation):
+ """Place Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ place_classes: list[str],
+ container_classes: list[str],
+ action_type: str = "Place",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # Force place special monitors
+ self.reptacles = place_classes
+ self.containers = container_classes
+ self.action_objects = place_classes + container_classes
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ place_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ if should_ignore_ann:
+ continue
+
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ # If an object is a `container` aka a microwave or a time machine ensure that it is open first
+ closed_object = (
+ readable_name in self.containers
+ and not object_annotation["currentStates"]["OPENED"]
+ )
+ if closed_object:
+ continue
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+
+ if distance_to_object <= self.min_interaction_distance:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ place_instructions_dict[object_class].append(instruction)
+
+ place_instructions = self._merge_instructions(place_instructions_dict, annotation_id)
+ return place_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ place_classes: list[str],
+ container_classes: list[str],
+ action_type: str = "Place",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ place_classes=place_classes,
+ container_classes=container_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the place action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/scan_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/scan_augmentator.py
new file mode 100644
index 0000000..1e79f78
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/scan_augmentator.py
@@ -0,0 +1,123 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class ScanAugmentation(BaseAugmentation):
+ """Scan Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ scan_classes: list[str],
+ action_type: str = "Scan",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # Force scan special monitors
+ self.action_objects = scan_classes
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ scan_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ if should_ignore_ann:
+ continue
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+
+ if distance_to_object <= self.min_interaction_distance:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ scan_instructions_dict[object_class].append(instruction)
+
+ scan_instructions = self._merge_instructions(scan_instructions_dict, annotation_id)
+ return scan_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ scan_classes: list[str],
+ action_type: str = "Scan",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ scan_classes=scan_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the scan action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/search_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/search_augmentator.py
new file mode 100644
index 0000000..2ace36d
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/search_augmentator.py
@@ -0,0 +1,278 @@
+import random
+from copy import deepcopy
+from pathlib import Path
+from typing import Any, Optional
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.constants.simbot.simbot import get_objects_asset_synonyms
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.object_features_processing import (
+ compute_bbox_area,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.paraphrasers import SearchParaphraser
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class SearchAugmentation(BaseAugmentation):
+ """Search Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ search_classes: list[str],
+ action_type: str = "Search",
+ min_interaction_distance: float = 0,
+ max_negative_examples_per_room: int = 150,
+ max_examples_per_object: int = 4000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+
+ # Force search special monitors
+ self.search_objects = search_classes
+ self.max_negative_examples_per_room = max_negative_examples_per_room
+ self.max_examples_per_object = max_examples_per_object
+ self.action_type = action_type
+
+ self._paraphraser = SearchParaphraser(get_objects_asset_synonyms())
+
+ def __call__( # noqa: WPS231
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ objects_in_image = {search_object: False for search_object in self.search_objects}
+
+ search_object_ids = []
+ search_object_bboxes = []
+ search_object_attributes = []
+ for _, annotation in annotations.items():
+ image_annotation = annotation["image_annotation"]
+ object_type = image_annotation["object_type"]
+ object_annotation = annotation["object_annotation"]
+ if object_type == "Unassigned" or not object_type:
+ continue
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ # Ignore objects that are not specified
+ if readable_name not in self.search_objects:
+ continue
+
+ objects_in_image[readable_name] = True
+
+ # Ignore too small objects
+ bbox = self._get_bbox(image_annotation)
+ if compute_bbox_area(bbox) < class_thresholds[object_class][0]:
+ continue
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+ if distance_to_object <= self.min_interaction_distance:
+ continue
+
+ search_object_ids.append(object_type)
+ search_object_bboxes.append(self._get_bbox(image_annotation))
+ search_object_attributes.append(
+ SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ )
+ )
+
+ instructions = []
+ if search_object_ids:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=search_object_ids,
+ attributes=search_object_attributes,
+ bbox=search_object_bboxes,
+ image_name=image_name,
+ annotation_id=0,
+ room_name=room_name,
+ augmentation_metadata={"positive": True},
+ )
+ instructions.append(instruction)
+
+ negative_instruction = self._get_negative_instance(
+ objects_in_image=objects_in_image,
+ room_name=room_name,
+ image_name=image_name,
+ )
+
+ if negative_instruction is not None:
+ instructions.append(negative_instruction)
+ return instructions
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ search_classes: list[str],
+ action_type: str = "Search",
+ min_interaction_distance: float = 0,
+ max_negative_examples_per_room: int = 150,
+ max_examples_per_object: int = 4000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ search_classes=search_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_negative_examples_per_room=max_negative_examples_per_room,
+ max_examples_per_object=max_examples_per_object,
+ )
+
+ def post_process_metadata( # noqa: WPS231
+ self, search_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the search actions.
+
+ This basically downsamples the negative examples in the dataset using a fixed maximum
+ number of negative examples per room.
+ """
+ final_metadata: dict[str, Any] = {}
+ action_metadata_grouped_per_object_class: dict[str, Any] = {}
+
+ idx = 0
+ for key, annotation in search_metadata.items():
+ if not annotation["positive"]:
+ continue
+ action = annotation["actions"][0][self.action_type.lower()]
+
+ object_ids = action["object"]["id"]
+ for object_id, object_attributes in zip(object_ids, action["object"]["attributes"]):
+ object_asset = get_object_asset_from_object_id(object_id, self._assets_to_labels)
+ object_class = self._special_object_type_map.get(
+ object_asset, self._assets_to_labels[object_asset]
+ )
+
+ instructions = action_metadata_grouped_per_object_class.get(object_class, [])
+ temp_annotation = deepcopy(annotation)
+ temp_annotation["actions"][0][self.action_type.lower()]["selected_object"] = {
+ "id": object_id,
+ "attributes": object_attributes,
+ }
+ temp_annotation["instruction"]["instruction"] = self._paraphraser(
+ object_id=object_id,
+ attributes=SimBotObjectAttributes.parse_obj(object_attributes),
+ )
+ instructions.append({f"{key}_{idx}": temp_annotation})
+ action_metadata_grouped_per_object_class[object_class] = instructions
+ idx += 1
+
+ for object_metadata in action_metadata_grouped_per_object_class.values():
+ images = [
+ instance["actions"][0]["colorImages"][0]
+ for metadata in object_metadata
+ for instance in metadata.values()
+ ]
+ _, selected_indices = self.diverse_image_selector(
+ images, centroids=self.max_examples_per_object
+ )
+
+ for select_index in selected_indices:
+ final_metadata.update(object_metadata[select_index])
+
+ self._make_report(final_metadata, class_thresholds)
+
+ negative_metadata_grouped_by_room = self._negative_room_metadata(search_metadata)
+
+ for _, room_metadata in negative_metadata_grouped_by_room.items():
+ random.shuffle(room_metadata)
+ for room_annotation in room_metadata[: self.max_negative_examples_per_room]:
+ final_metadata.update(room_annotation)
+
+ return final_metadata
+
+ def _get_negative_instance(
+ self, objects_in_image: dict[str, Any], image_name: str, room_name: str
+ ) -> Optional[AugmentationInstruction]:
+ negative_search_object_ids = []
+ negative_search_object_attributes = []
+ # If there is a searchable object that was not present, this is a negative example
+ if all(not is_present for _, is_present in objects_in_image.items()):
+ for search_object in objects_in_image:
+ search_object_id = self._special_object_class_map.get(search_object, None)
+ if search_object_id is None:
+ search_object_id = self._labels_to_assets[search_object][0]
+
+ negative_search_object_ids.append(search_object_id)
+ negative_search_object_attributes.append(
+ SimBotObjectAttributes(
+ readable_name=search_object,
+ color=self._get_color(search_object),
+ )
+ )
+
+ if negative_search_object_ids:
+ return AugmentationInstruction(
+ action_type="Search",
+ object_id=negative_search_object_ids,
+ attributes=negative_search_object_attributes,
+ bbox=None,
+ image_name=image_name,
+ annotation_id=0,
+ room_name=room_name,
+ augmentation_metadata={"positive": False},
+ )
+ return None
+
+ def _negative_room_metadata(self, search_metadata: dict[str, Any]) -> dict[str, Any]:
+ idx = 0
+ negative_metadata_grouped_by_room: dict[str, Any] = {}
+ for key, annotation in search_metadata.items():
+ if annotation["positive"]:
+ continue
+
+ room = annotation["room_name"]
+ action = annotation["actions"][0][self.action_type.lower()]
+
+ object_ids = action["object"]["id"]
+ for object_id, object_attributes in zip(object_ids, action["object"]["attributes"]):
+ instructions = negative_metadata_grouped_by_room.get(room, [])
+ new_annotation = deepcopy(annotation)
+ new_annotation["actions"][0][self.action_type.lower()]["selected_object"] = {
+ "id": object_id,
+ "attributes": object_attributes,
+ }
+ new_annotation["instruction"]["instruction"] = self._paraphraser(
+ object_id=object_id,
+ attributes=SimBotObjectAttributes.parse_obj(object_attributes),
+ )
+ instructions.append({f"{key}_{idx}": new_annotation})
+ negative_metadata_grouped_by_room[room] = instructions
+ idx += 1
+
+ negative_metadata = negative_metadata_grouped_by_room.get(room, [])
+ negative_metadata.append({key: annotation})
+ negative_metadata_grouped_by_room[room] = negative_metadata
+ return negative_metadata_grouped_by_room
diff --git a/src/emma_datasets/augmentations/simbot_augmentators/toggle_augmentator.py b/src/emma_datasets/augmentations/simbot_augmentators/toggle_augmentator.py
new file mode 100644
index 0000000..aa4f521
--- /dev/null
+++ b/src/emma_datasets/augmentations/simbot_augmentators/toggle_augmentator.py
@@ -0,0 +1,123 @@
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+from numpy.typing import NDArray
+
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ AugmentationInstruction,
+ SimBotObjectAttributes,
+)
+
+
+settings = Settings()
+
+
+class ToggleAugmentation(BaseAugmentation):
+ """Toggle Augmentations."""
+
+ def __init__(
+ self,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ toggle_classes: list[str],
+ action_type: str = "Toggle",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> None:
+ super().__init__(root_vision_path, report_path, diverse_image_selector)
+ self.min_interaction_distance = min_interaction_distance
+ self.max_examples_per_class = max_examples_per_class
+ self.action_type = action_type
+
+ # Force toggle special monitors
+ self.action_objects = toggle_classes
+
+ def __call__(
+ self,
+ annotations: dict[str, Any],
+ robot_position: NDArray[np.float32],
+ image_name: str,
+ class_thresholds: dict[str, list[int]],
+ room_name: str,
+ ) -> list[AugmentationInstruction]:
+ """Get new annotations for the selected classes."""
+ toggle_instructions_dict = defaultdict(list)
+ annotation_id = 0
+ for _, annotation in annotations.items():
+ should_ignore_ann = self._should_ignore_annotation_for_image(
+ annotation, robot_position, class_thresholds
+ )
+ if should_ignore_ann:
+ continue
+ image_annotation = annotation["image_annotation"]
+ object_annotation = annotation["object_annotation"]
+ object_type = image_annotation["object_type"]
+
+ object_asset = get_object_asset_from_object_id(object_type, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+ readable_name = self._special_object_type_map.get(object_asset, object_class)
+
+ distance_to_object = self._compute_distance_to_object(
+ object_annotation, robot_position
+ )
+
+ if distance_to_object <= self.min_interaction_distance:
+ instruction = AugmentationInstruction(
+ action_type=self.action_type,
+ object_id=object_type,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ color=self._get_color(readable_name),
+ distance=distance_to_object, # type: ignore[arg-type]
+ ),
+ bbox=self._get_bbox(image_annotation),
+ image_name=image_name,
+ annotation_id=annotation_id,
+ room_name=room_name,
+ )
+ annotation_id += 1
+ toggle_instructions_dict[object_class].append(instruction)
+
+ toggle_instructions = self._merge_instructions(toggle_instructions_dict, annotation_id)
+ return toggle_instructions # type: ignore[return-value]
+
+ @classmethod
+ def from_yaml_config( # type: ignore[override]
+ cls,
+ root_vision_path: Path,
+ report_path: Path,
+ diverse_image_selector: CLIProcessor,
+ toggle_classes: list[str],
+ action_type: str = "Toggle",
+ min_interaction_distance: float = 1.5,
+ max_examples_per_class: int = 5000,
+ ) -> BaseAugmentation:
+ """Instantiate the class."""
+ return cls(
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ toggle_classes=toggle_classes,
+ action_type=action_type,
+ min_interaction_distance=min_interaction_distance,
+ max_examples_per_class=max_examples_per_class,
+ )
+
+ def post_process_metadata(
+ self, action_metadata: dict[str, Any], class_thresholds: dict[str, list[int]]
+ ) -> dict[str, Any]:
+ """Post process the metadata for the toggle action."""
+ downsampled_metadata = self._downsample_augmentation_metadata(
+ action_type_metadata=action_metadata
+ )
+ self._make_report(downsampled_metadata, class_thresholds)
+ return downsampled_metadata
diff --git a/src/emma_datasets/commands/__init__.py b/src/emma_datasets/commands/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/emma_datasets/commands/create_downstream_dbs.py b/src/emma_datasets/commands/create_downstream_dbs.py
new file mode 100644
index 0000000..5f71ec4
--- /dev/null
+++ b/src/emma_datasets/commands/create_downstream_dbs.py
@@ -0,0 +1,493 @@
+from itertools import groupby
+from pathlib import Path
+from typing import Optional, Union
+
+import numpy as np
+import typer
+
+from emma_datasets.common import Settings
+from emma_datasets.datamodels import DatasetName, DatasetSplit
+from emma_datasets.datamodels.datasets import (
+ CocoInstance,
+ SimBotInstructionInstance,
+ SimBotMissionInstance,
+ TeachEdhInstance,
+ VQAv2Instance,
+ WinogroundInstance,
+)
+from emma_datasets.datamodels.datasets.ego4d import (
+ Ego4DMomentsInstance,
+ Ego4DNLQInstance,
+ Ego4DVQInstance,
+ load_ego4d_annotations,
+)
+from emma_datasets.datamodels.datasets.epic_kitchens import EpicKitchensInstance
+from emma_datasets.datamodels.datasets.nlvr import NlvrInstance
+from emma_datasets.datamodels.datasets.refcoco import RefCocoInstance, load_refcoco_annotations
+from emma_datasets.datamodels.datasets.simbot import (
+ load_simbot_action_annotations,
+ load_simbot_annotations,
+ load_simbot_clarification_annotations,
+ load_simbot_planner_annotations,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ SimBotPlannerInstance,
+)
+from emma_datasets.datamodels.datasets.vqa_v2 import (
+ get_vqa_v2_annotation_paths,
+ load_vqa_v2_annotations,
+ load_vqa_visual_genome_annotations,
+ resplit_vqa_v2_annotations,
+)
+from emma_datasets.io import read_csv, read_json, read_txt
+from emma_datasets.pipeline import DownstreamDbCreator
+
+
+settings = Settings()
+
+
+app = typer.Typer(
+ add_completion=False,
+ no_args_is_help=True,
+ short_help="Create DBs for downstream datasets.",
+ help="Create DBs for datasets that are being used for downstream evaluation of the model.",
+)
+
+
+@app.callback()
+def callback() -> None:
+ """Empty callback to ensure that each command function is separate.
+
+ https://typer.tiangolo.com/tutorial/commands/one-or-multiple/#one-command-and-one-callback
+ """
+ pass # noqa: WPS420
+
+
+@app.command("teach-edh")
+def create_teach_edh_instances(
+ teach_edh_instances_base_dir: Path = settings.paths.teach_edh_instances,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+ divided_val_seen_path: Path = settings.paths.teach.joinpath( # noqa: WPS404
+ "divided_val_seen.txt"
+ ),
+ divided_val_unseen_path: Path = settings.paths.teach.joinpath( # noqa: WPS404
+ "divided_val_unseen.txt"
+ ),
+ divided_test_seen_path: Path = settings.paths.teach.joinpath( # noqa: WPS404
+ "divided_test_seen.txt"
+ ),
+ divided_test_unseen_path: Path = settings.paths.teach.joinpath( # noqa: WPS404
+ "divided_test_unseen.txt"
+ ),
+) -> None:
+ """Create DB files for TEACh EDH Instances."""
+ edh_instance_dir_paths = {
+ DatasetSplit.train: list(teach_edh_instances_base_dir.joinpath("train").iterdir()),
+ DatasetSplit.valid_seen: [
+ teach_edh_instances_base_dir.joinpath("valid_seen", json_file)
+ for json_file in read_txt(divided_val_seen_path)
+ ],
+ DatasetSplit.valid_unseen: [
+ teach_edh_instances_base_dir.joinpath("valid_unseen", json_file)
+ for json_file in read_txt(divided_val_unseen_path)
+ ],
+ DatasetSplit.test_seen: [
+ teach_edh_instances_base_dir.joinpath("valid_seen", json_file)
+ for json_file in read_txt(divided_test_seen_path)
+ ],
+ DatasetSplit.test_unseen: [
+ teach_edh_instances_base_dir.joinpath("valid_unseen", json_file)
+ for json_file in read_txt(divided_test_unseen_path)
+ ],
+ }
+ DownstreamDbCreator.from_one_instance_per_json(
+ dataset_name=DatasetName.teach,
+ source_per_split=edh_instance_dir_paths,
+ instance_model_type=TeachEdhInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("coco-captioning")
+def create_coco_captioning_instances(
+ train_ids_path: Path,
+ dev_ids_path: Path,
+ test_ids_path: Path,
+ restval_ids_path: Path,
+ is_example_id: bool,
+ captions_train_path: Path = settings.paths.coco.joinpath( # noqa: WPS404
+ "captions_train2017.json"
+ ),
+ captions_val_path: Path = settings.paths.coco.joinpath( # noqa: WPS404
+ "captions_val2017.json"
+ ),
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for COCO Instances."""
+ train_annotations = read_json(captions_train_path)["annotations"]
+ val_annotations = read_json(captions_val_path)["annotations"]
+
+ all_ann = train_annotations + val_annotations
+ all_ann = sorted(all_ann, key=lambda x: x["image_id"])
+
+ if is_example_id:
+ # convert example to image ids
+ train_cap_ids = np.load(train_ids_path)
+ train_image_ids = np.array(
+ list({example["image_id"] for example in all_ann if example["id"] in train_cap_ids})
+ )
+ dev_cap_ids = np.load(dev_ids_path)
+ dev_image_ids = np.array(
+ list({example["image_id"] for example in all_ann if example["id"] in dev_cap_ids})
+ )
+ test_cap_ids = np.load(test_ids_path)
+ test_image_ids = np.array(
+ list({example["image_id"] for example in all_ann if example["id"] in test_cap_ids})
+ )
+ restval_cap_ids = np.load(restval_ids_path)
+ restval_image_ids = np.array(
+ list({example["image_id"] for example in all_ann if example["id"] in restval_cap_ids})
+ )
+ else:
+ train_image_ids = np.load(train_ids_path)
+ dev_image_ids = np.load(dev_ids_path)
+ test_image_ids = np.load(test_ids_path)
+ restval_image_ids = np.load(restval_ids_path)
+
+ grouped_annotations: dict[int, dict[str, Union[str, list[str]]]] = {} # noqa: WPS234
+ groups = groupby(all_ann, key=lambda x: x["image_id"])
+ for image_id, grouped_image_annotations in groups:
+ image_annotations = list(grouped_image_annotations)
+ grouped_annotations[image_id] = {
+ "image_id": str(image_id),
+ "captions_id": [str(example["id"]) for example in image_annotations],
+ "captions": [example["caption"] for example in image_annotations],
+ }
+
+ coco_captioning_splits: dict[ # noqa: WPS234
+ DatasetSplit, list[dict[str, Union[str, list[str]]]]
+ ] = {
+ DatasetSplit.train: [
+ ann for img_id, ann in grouped_annotations.items() if img_id in train_image_ids
+ ],
+ DatasetSplit.valid: [
+ ann for img_id, ann in grouped_annotations.items() if img_id in dev_image_ids
+ ],
+ DatasetSplit.test: [
+ ann for img_id, ann in grouped_annotations.items() if img_id in test_image_ids
+ ],
+ DatasetSplit.restval: [
+ ann for img_id, ann in grouped_annotations.items() if img_id in restval_image_ids
+ ],
+ }
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.coco,
+ source_per_split=coco_captioning_splits,
+ instance_model_type=CocoInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("nlvr")
+def create_nlvr_instances(
+ nlvr_instances_base_dir: Path = settings.paths.nlvr,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for NLVR^2."""
+ nlvr_dir_paths = {
+ DatasetSplit.train: nlvr_instances_base_dir.joinpath("train.jsonl"),
+ DatasetSplit.valid_seen: nlvr_instances_base_dir.joinpath("balanced_dev.jsonl"),
+ DatasetSplit.valid_unseen: nlvr_instances_base_dir.joinpath("balanced_test1.jsonl"),
+ }
+
+ DownstreamDbCreator.from_jsonl(
+ dataset_name=DatasetName.nlvr,
+ source_per_split=nlvr_dir_paths,
+ instance_model_type=NlvrInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("vqa-v2")
+def create_vqa_v2_instances(
+ vqa_v2_instances_base_dir: Path = settings.paths.vqa_v2,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+ resplit_trainval: bool = False,
+ include_visual_genome: bool = False,
+) -> None:
+ """Create DB files for VQA-v2."""
+ vqa_v2_dir_paths = get_vqa_v2_annotation_paths(vqa_v2_instances_base_dir)
+
+ source_per_split = {}
+ for split_paths in vqa_v2_dir_paths:
+ source_per_split[split_paths.split] = load_vqa_v2_annotations(
+ questions_path=split_paths.questions_path, answers_path=split_paths.answers_path
+ )
+ if resplit_trainval:
+ train_annotations, valid_annotations = resplit_vqa_v2_annotations(
+ vqa_v2_instances_base_dir,
+ train_annotations=source_per_split[DatasetSplit.train],
+ valid_annotations=source_per_split[DatasetSplit.valid],
+ )
+ source_per_split[DatasetSplit.train] = train_annotations
+ source_per_split[DatasetSplit.valid] = valid_annotations
+
+ if include_visual_genome:
+ source_per_split[DatasetSplit.train].extend(
+ load_vqa_visual_genome_annotations(vqa_v2_instances_base_dir)
+ )
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.vqa_v2,
+ source_per_split=source_per_split,
+ instance_model_type=VQAv2Instance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("ego4d_nlq")
+def create_ego4d_nlq_instances(
+ ego4d_nlq_instances_base_dir: Path = settings.paths.ego4d_annotations,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Ego4D Natural Language queries."""
+ ego4d_nlq_paths = {
+ DatasetSplit.train: ego4d_nlq_instances_base_dir.joinpath("nlq_train.json"),
+ DatasetSplit.valid: ego4d_nlq_instances_base_dir.joinpath("nlq_val.json"),
+ DatasetSplit.test: ego4d_nlq_instances_base_dir.joinpath("nlq_test_unannotated.json"),
+ }
+
+ source_per_split = {}
+
+ for split, split_path in ego4d_nlq_paths.items():
+ source_per_split[split] = load_ego4d_annotations(split_path)
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.ego4d_nlq,
+ source_per_split=source_per_split,
+ instance_model_type=Ego4DNLQInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("ego4d_moments")
+def create_ego4d_moments_instances(
+ ego4d_moments_instances_base_dir: Path = settings.paths.ego4d_annotations,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Ego4D vq queries."""
+ ego4d_moments_paths = {
+ DatasetSplit.train: ego4d_moments_instances_base_dir.joinpath("moments_train.json"),
+ DatasetSplit.valid: ego4d_moments_instances_base_dir.joinpath("moments_val.json"),
+ DatasetSplit.test: ego4d_moments_instances_base_dir.joinpath(
+ "moments_test_unannotated.json"
+ ),
+ }
+
+ source_per_split = {}
+
+ for split, split_path in ego4d_moments_paths.items():
+ source_per_split[split] = load_ego4d_annotations(split_path)
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.ego4d_vq,
+ source_per_split=source_per_split,
+ instance_model_type=Ego4DMomentsInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("ego4d_vq")
+def create_ego4d_vq_instances(
+ ego4d_vq_instances_base_dir: Path = settings.paths.ego4d_annotations,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Ego4D Visual Queries."""
+ ego4d_vq_paths = {
+ DatasetSplit.train: ego4d_vq_instances_base_dir.joinpath("vq_train.json"),
+ DatasetSplit.valid: ego4d_vq_instances_base_dir.joinpath("vq_val.json"),
+ DatasetSplit.test: ego4d_vq_instances_base_dir.joinpath("vq_test_unannotated.json"),
+ }
+
+ source_per_split = {}
+
+ for split, split_path in ego4d_vq_paths.items():
+ source_per_split[split] = load_ego4d_annotations(split_path)
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.ego4d_vq,
+ source_per_split=source_per_split,
+ instance_model_type=Ego4DVQInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("winoground")
+def create_winoground_instances(
+ hf_auth_token: Optional[str] = typer.Option( # noqa: WPS404
+ None,
+ envvar="HF_AUTH_TOKEN",
+ help="Hugging Face authentication token. You can also specify this using the `HF_AUTH_TOKEN` environment variable.",
+ ),
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Creates instances db for the Winoground benchmark."""
+ DownstreamDbCreator.from_huggingface(
+ huggingface_dataset_identifier="facebook/winoground",
+ dataset_name=DatasetName.winoground,
+ instance_model_type=WinogroundInstance,
+ output_dir=output_dir,
+ hf_auth_token=hf_auth_token,
+ ).run(num_workers=num_workers)
+
+
+@app.command("refcoco")
+def create_refcoco_instances(
+ refcoco_instances_base_dir: Path = settings.paths.refcoco,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for RefCOCOg (UMD)."""
+ source_per_split = load_refcoco_annotations(refcoco_instances_base_dir)
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.refcoco,
+ source_per_split=source_per_split,
+ instance_model_type=RefCocoInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("simbot-missions")
+def create_simbot_mission_instances(
+ simbot_instances_base_dir: Path = settings.paths.simbot,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Alexa Prize SimBot mission data."""
+ source_per_split = load_simbot_annotations(simbot_instances_base_dir)
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.simbot_missions,
+ source_per_split=source_per_split,
+ instance_model_type=SimBotMissionInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("simbot-instructions")
+def create_simbot_instruction_instances(
+ simbot_instances_base_dir: Path = settings.paths.simbot,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+ train_num_additional_synthetic_instructions: int = 20000,
+ valid_num_additional_synthetic_instructions: int = -1,
+) -> None:
+ """Create DB files for Alexa Prize SimBot mission data."""
+ source_per_split = load_simbot_annotations(
+ simbot_instances_base_dir,
+ annotation_type="instructions",
+ train_num_additional_synthetic_instructions=train_num_additional_synthetic_instructions,
+ valid_num_additional_synthetic_instructions=valid_num_additional_synthetic_instructions,
+ )
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.simbot_instructions,
+ source_per_split=source_per_split,
+ instance_model_type=SimBotInstructionInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("simbot-actions")
+def create_simbot_action_level_instances(
+ simbot_instances_base_dir: Path = settings.paths.simbot,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Alexa Prize SimBot mission data."""
+ db_file_name = f"{DatasetName.simbot_instructions.name}"
+ source_per_split = load_simbot_action_annotations(output_dir, db_file_name)
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.simbot_actions,
+ source_per_split=source_per_split,
+ instance_model_type=SimBotInstructionInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("simbot-clarifications")
+def create_simbot_clarification_instances(
+ simbot_instances_base_dir: Path = settings.paths.simbot,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Alexa Prize SimBot clarification data."""
+ db_file_name = f"{DatasetName.simbot_instructions.name}"
+ source_per_split = load_simbot_clarification_annotations(output_dir, db_file_name)
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.simbot_clarifications,
+ source_per_split=source_per_split,
+ instance_model_type=SimBotInstructionInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("epic-kitchens")
+def create_epic_kitchens_instances(
+ epic_kitchens_instances_base_dir: Path = settings.paths.epic_kitchens,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Epic-Kitchens."""
+ epic_kitchens_paths = {
+ DatasetSplit.train: epic_kitchens_instances_base_dir.joinpath("EPIC_100_train.csv"),
+ DatasetSplit.valid: epic_kitchens_instances_base_dir.joinpath("EPIC_100_validation.csv"),
+ DatasetSplit.test: epic_kitchens_instances_base_dir.joinpath(
+ "EPIC_100_test_timestamps.csv"
+ ),
+ }
+
+ source_per_split = {}
+
+ for split, split_path in epic_kitchens_paths.items():
+ split_annotations = read_csv(split_path)
+ source_per_split[split] = split_annotations
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.epic_kitchens,
+ source_per_split=source_per_split,
+ instance_model_type=EpicKitchensInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+@app.command("simbot-planner")
+def create_simbot_high_level_planner_data(
+ simbot_instances_base_dir: Path = settings.paths.simbot,
+ alfred_data_dir: Path = settings.paths.alfred_data,
+ output_dir: Path = settings.paths.databases,
+ num_workers: Optional[int] = None,
+) -> None:
+ """Create DB files for Alexa Prize SimBot mission data."""
+ source_per_split = load_simbot_planner_annotations(simbot_instances_base_dir, alfred_data_dir)
+
+ DownstreamDbCreator.from_one_instance_per_dict(
+ dataset_name=DatasetName.simbot_planner,
+ source_per_split=source_per_split,
+ instance_model_type=SimBotPlannerInstance,
+ output_dir=output_dir,
+ ).run(num_workers)
+
+
+if __name__ == "__main__":
+ app()
diff --git a/src/emma_datasets/commands/create_pretraining_instances.py b/src/emma_datasets/commands/create_pretraining_instances.py
new file mode 100644
index 0000000..9421734
--- /dev/null
+++ b/src/emma_datasets/commands/create_pretraining_instances.py
@@ -0,0 +1,44 @@
+from multiprocessing.pool import Pool
+from typing import Optional
+
+from rich.progress import Progress
+
+from emma_datasets.common import Settings, get_progress, use_rich_for_logging
+from emma_datasets.db import DatasetDb
+from emma_datasets.parsers.instance_creators import PretrainInstanceCreator
+from emma_datasets.pipeline import MetadataParser
+
+
+BATCH_SIZE = 4096
+use_rich_for_logging()
+settings = Settings()
+settings.paths.create_dirs()
+
+
+instances_db_path = settings.paths.databases.joinpath("instances.db")
+
+
+def create_pretraining_instances(
+ num_workers: Optional[int] = None, progress: Optional[Progress] = None
+) -> None:
+ """Create all the pretraining instances."""
+ progress = progress if progress else get_progress()
+
+ with progress:
+ metadata_parser = MetadataParser(progress)
+ instance_creator = PretrainInstanceCreator(progress, should_compress=True)
+
+ metadata_groups = metadata_parser.get_all_metadata_groups()
+
+ db = DatasetDb(instances_db_path, readonly=False, batch_size=BATCH_SIZE)
+ process_pool = Pool(num_workers)
+
+ with db, process_pool: # noqa: WPS316
+ instances_iterator = instance_creator(metadata_groups, progress, process_pool)
+
+ for i, instance in enumerate(instances_iterator):
+ db[(i, f"pretrain_{i}")] = instance
+
+
+if __name__ == "__main__":
+ create_pretraining_instances()
diff --git a/src/emma_datasets/commands/create_simbot_augmentations_from_vision_data.py b/src/emma_datasets/commands/create_simbot_augmentations_from_vision_data.py
new file mode 100644
index 0000000..c2b1fe4
--- /dev/null
+++ b/src/emma_datasets/commands/create_simbot_augmentations_from_vision_data.py
@@ -0,0 +1,541 @@
+import json
+import math
+import os
+import shutil
+from argparse import ArgumentParser
+from collections import defaultdict
+from collections.abc import Iterator
+from pathlib import Path
+from typing import Any, Optional, Union
+
+import numpy as np
+import torch
+from numpy.typing import NDArray
+from rich.progress import Progress, TaskID
+from torch.utils.data import DataLoader, IterableDataset
+
+from emma_datasets.augmentations.simbot_augmentators import (
+ BreakAugmentation,
+ CleanAugmentation,
+ FillPourAugmentation,
+ GoToAugmentation,
+ OpenCloseAugmentation,
+ PickupAugmentation,
+ PlaceAugmentation,
+ ScanAugmentation,
+ SearchAugmentation,
+ ToggleAugmentation,
+)
+from emma_datasets.augmentations.simbot_augmentators.action_creators import (
+ BaseActionCreator,
+ BreakActionCreator,
+ CleanActionCreator,
+ CloseActionCreator,
+ FillActionCreator,
+ GotoActionCreator,
+ OpenActionCreator,
+ PickupActionCreator,
+ PlaceActionCreator,
+ PourActionCreator,
+ ScanActionCreator,
+ SearchActionCreator,
+ ToggleActionCreator,
+)
+from emma_datasets.augmentations.simbot_augmentators.base_augmentator import BaseAugmentation
+from emma_datasets.augmentations.simbot_augmentators.clip_image_diversity import CLIProcessor
+from emma_datasets.common import Settings, get_progress
+from emma_datasets.constants.simbot.simbot import get_class_thresholds, get_objects_asset_synonyms
+
+
+settings = Settings()
+
+
+class AugmentationVisionDataset(IterableDataset[dict[Any, Any]]):
+ """Create additional trajectory data.
+
+ Args:
+ output_json_file: Output json file containing the augmentation dataset
+ output_image_dir: Output directory containing the images for the augmentation dataset
+ metadata_files: Path to metadata files used to create the augmentation dataset. These are read from the metadata_train.txt
+ augmentations: A list of available object augmentations.
+ action_creators: A list of available action creators. Each action creator is applied to to each object augmentation
+ dataset_version: Should be > v4 as previous versions have different json format
+ min_bbox_area: The minimum area for a bounding box.
+ """
+
+ def __init__(
+ self,
+ output_json_file: Path,
+ output_image_dir: Path,
+ root_vision_path: Path,
+ metadata_files: list[Path],
+ vision_data_augmentations: dict[str, BaseAugmentation],
+ action_creators: list[BaseActionCreator],
+ min_bbox_area: float = 10,
+ ) -> None:
+ self.output_json_file = output_json_file
+ self.output_image_dir = output_image_dir
+ self.output_image_dir.mkdir(parents=True, exist_ok=True)
+ self.root_vision_path = root_vision_path
+ self.metadata_files = metadata_files
+ self.vision_data_augmentations = vision_data_augmentations
+ self.action_creators = {
+ action_creator.action_type: action_creator for action_creator in action_creators
+ }
+ self._min_bbox_area = min_bbox_area
+ self._class_thresholds = get_class_thresholds()
+ self._start = 0
+ self._end = len(self.metadata_files)
+ self._cache = settings.paths.simbot.joinpath("augmentations")
+ self._cache.mkdir(parents=True, exist_ok=True)
+
+ def configure_worker_folders(self, num_workers: int) -> None:
+ """Create the folder inside the cache for each worker."""
+ if num_workers == 0:
+ worker_folder = self._cache.joinpath("worker_0")
+ worker_folder.mkdir(parents=True, exist_ok=True)
+ else:
+ for worker_id in range(num_workers):
+ worker_folder = self._cache.joinpath(f"worker_{worker_id}")
+ worker_folder.mkdir(parents=True, exist_ok=True)
+
+ def gather(self) -> None:
+ """Write the new annotations.
+
+ Group the metadata in terms of action type and call the post-process for each action type.
+ This is used in case where some augmentators require to do some post-processing after
+ collecting the data from all workers, e.g downsampling.
+ """
+ worker_folders = list(self._cache.iterdir())
+ metadata_per_action_type: dict[str, Any] = {}
+
+ progress = get_progress()
+ task_id = progress.add_task(
+ "Gathering annotations",
+ visible=True,
+ start=True,
+ total=len(worker_folders),
+ comment="",
+ )
+ with progress:
+ metadata_per_action_type = self._collect_metadata_from_workers(
+ worker_folders, progress, task_id
+ )
+
+ progress = get_progress()
+ task_id = progress.add_task(
+ "Post-processing annotations",
+ visible=True,
+ start=True,
+ total=len(metadata_per_action_type.keys()),
+ comment="",
+ )
+
+ final_metadata = {}
+ with progress:
+ for action_type, annotations_per_action_type in metadata_per_action_type.items():
+ final_metadata.update(
+ self.vision_data_augmentations[action_type].post_process_metadata(
+ annotations_per_action_type, self._class_thresholds # type: ignore[arg-type]
+ )
+ )
+ progress.advance(task_id)
+
+ with open(self.output_json_file, "w") as out_file:
+ json.dump(final_metadata, out_file, indent=4)
+
+ progress = get_progress()
+ task_id = progress.add_task(
+ f"Writing images to {self.output_image_dir}",
+ visible=True,
+ start=True,
+ total=len(final_metadata.keys()),
+ comment="",
+ )
+ with progress:
+ for _, action_metadata in final_metadata.items():
+ progress.advance(task_id)
+ image_name = action_metadata["actions"][0]["colorImages"][0]
+ destination_color_image = Path(self.output_image_dir, image_name)
+ if destination_color_image.exists():
+ continue
+ source_color_image = Path(
+ self.root_vision_path, str(image_name).replace("__", os.sep)
+ )
+ shutil.copy(source_color_image, destination_color_image)
+
+ shutil.rmtree(self._cache)
+
+ def __len__(self) -> int:
+ """Dataset len."""
+ return len(self.metadata_files)
+
+ def __iter__(self) -> Iterator[dict[Any, Any]]:
+ """Iterate over dataset."""
+ worker_info = torch.utils.data.get_worker_info()
+
+ # single-process data loading, return the full iterator
+ if worker_info is None:
+ iter_start = self._start
+ iter_end = self._end
+ worker_output_folder = self._cache.joinpath("worker_0")
+ # in a worker process, split the workload
+ else:
+ worker_id = worker_info.id
+ per_worker = int(math.ceil((self._end - self._start) / float(worker_info.num_workers)))
+ iter_start = self._start + worker_id * per_worker
+ iter_end = min(iter_start + per_worker, self._end)
+ worker_output_folder = self._cache.joinpath(f"worker_{worker_id}")
+
+ for file_idx in range(iter_start, iter_end):
+ metadata_json_path = self.metadata_files[file_idx]
+ (annotations, room_name, robot_position) = self._load_metadata(metadata_json_path)
+ augmentation_instructions = []
+ for _, augmentation in self.vision_data_augmentations.items():
+ full_image_name = metadata_json_path.parent.joinpath(
+ f"{metadata_json_path.stem.split('_')[0]}_color.png",
+ )
+ image_name = str(full_image_name.relative_to(self.root_vision_path))
+
+ augmentation_instructions.extend(
+ augmentation(
+ annotations=annotations,
+ robot_position=robot_position,
+ image_name=image_name,
+ class_thresholds=self._class_thresholds, # type: ignore[arg-type]
+ room_name=room_name,
+ )
+ )
+
+ final_instructions = []
+ for augmentation_instruction in augmentation_instructions:
+ instruction_dict = self.action_creators[augmentation_instruction.action_type](
+ augmentation_instruction
+ )
+ final_instructions.append(instruction_dict)
+
+ if final_instructions:
+ json_file = str(metadata_json_path.relative_to(self.root_vision_path)).replace(
+ os.sep, "__"
+ )
+ worker_output_json = worker_output_folder.joinpath(json_file)
+ self._write_to_cache(final_instructions, worker_output_json)
+ yield {}
+
+ def _load_metadata(
+ self, metadata_json_path: Path
+ ) -> tuple[dict[str, Any], str, NDArray[np.float32]]:
+ metadata_json_full_path = self.root_vision_path.joinpath(metadata_json_path)
+
+ with open(metadata_json_full_path) as fp:
+ metadata = json.load(fp)
+
+ image_annotations = metadata["image_annotations"]
+ objects_annotations = metadata["response"]["objects"]
+
+ image_annotations_dict = {
+ image_ann["object_id"]: image_ann for image_ann in image_annotations
+ }
+ objects_annotations_dict = {
+ objects_ann["objectID"]: objects_ann for objects_ann in objects_annotations
+ }
+
+ annotations = {}
+ for object_id, image_ann in image_annotations_dict.items():
+ is_valid = self._object_id_is_valid(
+ object_id, image_annotations_dict, objects_annotations_dict
+ )
+ if not is_valid:
+ continue
+
+ bbox = image_ann["bbox"]
+ (xmin, ymin, xmax, ymax) = bbox
+ area = (xmax - xmin) * (ymax - ymin)
+ if area < self._min_bbox_area:
+ continue
+
+ annotations[object_id] = {
+ "image_annotation": image_annotations_dict[object_id],
+ "object_annotation": objects_annotations_dict[object_id],
+ }
+
+ room = metadata["cdf"]["scene"]["roomLocation"][0]
+ robot_position = self._get_robot_position(objects_annotations_dict)
+
+ return (annotations, room, robot_position)
+
+ def _object_id_is_valid(
+ self,
+ object_id: str,
+ image_annotations_dict: dict[str, Any],
+ objects_annotations_dict: dict[str, Any],
+ ) -> bool:
+ if object_id == "Unassigned":
+ return False
+
+ if object_id not in image_annotations_dict:
+ return False
+
+ return object_id in objects_annotations_dict
+
+ def _get_robot_position(self, objects_annotations_dict: dict[str, Any]) -> NDArray[np.float32]:
+ # https://alexaprizesim-ldg5293.slack.com/archives/C02SQAFVDFY/p1666968772331429
+ robot_position = np.array(
+ [
+ objects_annotations_dict["TAM_1"]["position"]["x"],
+ objects_annotations_dict["TAM_1"]["position"]["y"],
+ objects_annotations_dict["TAM_1"]["position"]["z"],
+ ]
+ )
+ return robot_position
+
+ def _write_to_cache(
+ self, final_instructions: list[dict[str, Any]], worker_output_json: Path
+ ) -> None:
+ if worker_output_json.exists():
+ with open(worker_output_json) as worker_in_file:
+ metadata = json.load(worker_in_file)
+ else:
+ metadata = {}
+
+ for instruction in final_instructions:
+ metadata[instruction["mission_id"]] = instruction
+
+ with open(worker_output_json, "w") as worker_out_file:
+ json.dump(metadata, worker_out_file, indent=4)
+
+ def _collect_metadata_from_workers(
+ self, worker_folders: list[Path], progress: Progress, task_id: TaskID
+ ) -> dict[str, Any]:
+ metadata_per_action_type: dict[str, Any] = defaultdict(dict)
+ for worker_folder in worker_folders:
+ worker_json_files = worker_folder.iterdir()
+ for worker_json_file in worker_json_files:
+ with open(worker_json_file) as worker_file:
+ worker_metadata = json.load(worker_file)
+ for key, annotation in worker_metadata.items():
+ action_type = annotation["actions"][0]["type"]
+ metadata_per_action_type[action_type][key] = annotation
+
+ progress.advance(task_id)
+ return metadata_per_action_type
+
+
+def get_metadata_version(root_file_path: Union[str, Path]) -> str:
+ """Get the version from a metadata filepath."""
+ return str(root_file_path).split("object_detection_data_")[1][:2]
+
+
+def load_all_metadata_files(
+ root_vision_path: Path,
+ metadata_file: Path,
+ limit_examples: Optional[int] = None,
+ dataset_version: Optional[str] = None,
+) -> list[Path]:
+ """Reads all the available image annotation files."""
+ with open(metadata_file) as f:
+ annotation_files = f.readlines()
+ annotation_files = sorted([line.strip() for line in annotation_files])
+ metadata_files_temp = sorted(
+ [root_vision_path.joinpath(line.strip()) for line in annotation_files]
+ )
+ if dataset_version is not None:
+ metadata_files_temp = [
+ metadata_file
+ for metadata_file in metadata_files_temp
+ if get_metadata_version(metadata_file) == dataset_version
+ ]
+
+ if limit_examples is not None:
+ metadata_files_temp = metadata_files_temp[:limit_examples]
+
+ metadata_files = []
+
+ progress = get_progress()
+ task_id = progress.add_task(
+ f"Loading metadata from file {metadata_file}",
+ visible=True,
+ start=True,
+ total=len(metadata_files_temp),
+ comment="",
+ )
+ with progress:
+ for meta_path in metadata_files_temp:
+ img_num = meta_path.name.split("_")[0]
+ subroot_dir = meta_path.parent
+ image_path = subroot_dir.joinpath(f"{img_num}_color.png")
+ image_seg_path = subroot_dir.joinpath(f"{img_num}_seg.png")
+ if image_path.exists() and image_seg_path.exists():
+ metadata_files.append(Path(meta_path))
+ progress.advance(task_id)
+
+ return metadata_files
+
+
+def collate_fn(batch: dict[str, Any]) -> dict[str, Any]:
+ """Placeholder collate for dataloader."""
+ return batch
+
+
+def generate_data(dataset: AugmentationVisionDataset, num_workers: int = 0) -> None:
+ """Iterate over the dataset."""
+ data_generator = DataLoader(
+ dataset, batch_size=1, num_workers=num_workers, collate_fn=lambda x: x
+ )
+
+ progress = get_progress()
+ task_id = progress.add_task(
+ "Creating augmentation examples",
+ visible=False,
+ start=False,
+ total=len(dataset),
+ comment="",
+ )
+ progress.start_task(task_id)
+ progress.update(task_id, visible=True)
+
+ with progress:
+ for _ in data_generator:
+ progress.advance(task_id)
+
+ dataset.gather()
+
+
+def string_to_class(class_str: str) -> BaseAugmentation:
+ """Switcher for augmentation classes."""
+ switcher = {
+ "Break": BreakAugmentation,
+ "Clean": CleanAugmentation,
+ "Pour": FillPourAugmentation,
+ "Pickup": PickupAugmentation,
+ "Place": PlaceAugmentation,
+ "Fill": FillPourAugmentation,
+ "Close": OpenCloseAugmentation,
+ "Goto": GoToAugmentation,
+ "Open": OpenCloseAugmentation,
+ "Scan": ScanAugmentation,
+ "Search": SearchAugmentation,
+ "Toggle": ToggleAugmentation,
+ }
+ return switcher[class_str] # type: ignore[return-value]
+
+
+if __name__ == "__main__":
+ parser = ArgumentParser()
+
+ parser.add_argument(
+ "--root_vision_path",
+ type=Path,
+ help="Path to the root directory containing the vision datasets",
+ default=Path("/home/ubuntu/data/object_detection"),
+ )
+
+ parser.add_argument(
+ "--report_path",
+ type=Path,
+ help="Path to the output report csv file",
+ )
+
+ parser.add_argument(
+ "--input_metadata_txt_path",
+ type=Path,
+ help="Path to the root directory containing the vision datasets",
+ default=Path(
+ "/home/ubuntu/data/datav2_collapsev4_isvalidv4_rgv1.12_classfiltered_train_09_09_2022/metadata_train.txt"
+ ),
+ )
+
+ parser.add_argument(
+ "--output_json_file",
+ type=Path,
+ help="Path to output json file",
+ default=settings.paths.simbot.joinpath("train_augmentation_instructions.json"),
+ )
+
+ parser.add_argument(
+ "--output_image_dir",
+ type=Path,
+ help="Path to output image directory",
+ default=settings.paths.simbot.joinpath("train_augmentation_images"),
+ )
+
+ parser.add_argument(
+ "--limit_examples",
+ type=int,
+ help="Limit of examples",
+ )
+ parser.add_argument(
+ "--dataset_version",
+ type=str,
+ help="Use only examples from a specific dataset version",
+ )
+
+ parser.add_argument(
+ "--num_workers",
+ type=int,
+ default=0,
+ help="Number of workers",
+ )
+
+ parser.add_argument(
+ "--augmentation_config",
+ default="src/emma_datasets/constants/simbot/augmentations.json",
+ help="Path to augmentation config",
+ )
+
+ args = parser.parse_args()
+
+ root_vision_path = args.root_vision_path
+ report_path = args.report_path
+ input_metadata_txt_path = args.input_metadata_txt_path
+
+ metadata_files = load_all_metadata_files(
+ root_vision_path=root_vision_path,
+ metadata_file=input_metadata_txt_path,
+ limit_examples=args.limit_examples,
+ dataset_version=args.dataset_version,
+ )
+
+ object_synonyms = get_objects_asset_synonyms()
+ action_creators = [
+ BreakActionCreator(object_synonyms),
+ CleanActionCreator(object_synonyms),
+ CloseActionCreator(object_synonyms),
+ GotoActionCreator(object_synonyms),
+ FillActionCreator(object_synonyms),
+ PlaceActionCreator(object_synonyms),
+ PickupActionCreator(object_synonyms),
+ PourActionCreator(object_synonyms),
+ OpenActionCreator(object_synonyms),
+ ScanActionCreator(object_synonyms),
+ SearchActionCreator(object_synonyms),
+ ToggleActionCreator(object_synonyms),
+ ]
+ vision_data_augmentations: dict[str, BaseAugmentation] = {}
+ with open(args.augmentation_config) as fp:
+ augmentation_config = json.load(fp)
+
+ diverse_image_selector = CLIProcessor()
+ for augmentation, augmentation_dict in augmentation_config.items():
+ class_name = list(augmentation_dict.keys())[0]
+ augmentation_class = string_to_class(augmentation)
+ vision_data_augmentations[augmentation] = augmentation_class.from_yaml_config(
+ **augmentation_dict[class_name],
+ root_vision_path=root_vision_path,
+ report_path=report_path,
+ diverse_image_selector=diverse_image_selector,
+ )
+
+ dataset = AugmentationVisionDataset(
+ output_json_file=args.output_json_file,
+ output_image_dir=args.output_image_dir,
+ root_vision_path=root_vision_path,
+ metadata_files=metadata_files,
+ vision_data_augmentations=vision_data_augmentations,
+ action_creators=action_creators,
+ min_bbox_area=5,
+ )
+
+ dataset.configure_worker_folders(args.num_workers)
+
+ generate_data(dataset, num_workers=args.num_workers)
diff --git a/src/emma_datasets/commands/create_simbot_instructions_from_annotations.py b/src/emma_datasets/commands/create_simbot_instructions_from_annotations.py
new file mode 100644
index 0000000..1f036e5
--- /dev/null
+++ b/src/emma_datasets/commands/create_simbot_instructions_from_annotations.py
@@ -0,0 +1,245 @@
+# flake8: noqa WPS226
+import json
+import random
+from argparse import ArgumentParser
+from collections import Counter
+from pathlib import Path
+from typing import Any, Literal
+
+from sklearn.model_selection import StratifiedShuffleSplit
+
+from emma_datasets.common import Settings
+
+
+settings = Settings()
+
+from pydantic import BaseModel, validator
+
+from emma_datasets.common.logger import get_logger
+
+
+logger = get_logger(__name__)
+
+
+class AnnotationModel(BaseModel):
+ """A simple model to validate the basic components of an annotation instruction."""
+
+ actions: list[dict[str, Any]]
+ instruction: dict[str, Any]
+ vision_augmentation: bool
+
+ @validator("instruction")
+ @classmethod
+ def validate_instruction(cls, field_value: dict[str, Any]) -> dict[str, Any]:
+ """Verify instruction is correct."""
+ if "instruction" not in field_value or not field_value["instruction"]:
+ raise AssertionError(f"Missing instruction in {field_value}")
+
+ single_action = (
+ "actions" not in field_value
+ or len(field_value["actions"]) > 1
+ or field_value["actions"][0] != 0
+ )
+ if single_action:
+ raise AssertionError("Instructions should exactly one action")
+ return field_value
+
+ @validator("actions")
+ @classmethod
+ def validation_actions( # noqa: WPS231, WPS238
+ cls, field_value: list[dict[str, Any]]
+ ) -> list[dict[str, Any]]:
+ """Verify action is correct."""
+ if len(field_value) > 1:
+ raise AssertionError("Instructions should exactly one action")
+
+ action_type = field_value[0]["type"].lower()
+ action_metadata = field_value[0][action_type]
+ if "object" not in action_metadata:
+ raise AssertionError(f"There is no object property in {field_value}")
+
+ if not isinstance(action_metadata["object"]["id"], str) and action_type != "search":
+ raise AssertionError(f"Incorrect object id in {field_value}")
+
+ if not isinstance(action_metadata["object"]["id"], list) and action_type == "search":
+ raise AssertionError(f"Incorrect object id in {field_value}")
+
+ if isinstance(action_metadata["object"]["id"][0], list):
+ raise AssertionError(f"Incorrect list of object id in {field_value}")
+
+ wrong_mask = (
+ "mask" not in action_metadata["object"] or not action_metadata["object"]["mask"]
+ )
+ if wrong_mask:
+ if action_type == "search":
+ raise AssertionError(
+ f"Expecting a list of bbox-like mask with a single element {field_value}"
+ )
+ raise AssertionError(f"Expecting a bbox-like mask {field_value}")
+
+ if action_type == "search":
+ if (
+ len(action_metadata["object"]["mask"]) != 1
+ or len(action_metadata["object"]["mask"][0]) != 4
+ ):
+ raise AssertionError(
+ f"Expecting a list of bbox-like mask with a single element {field_value}"
+ )
+ else:
+ if len(action_metadata["object"]["mask"]) != 4:
+ raise AssertionError(
+ f"Expecting a list of mask with a single element {field_value}"
+ )
+ return field_value
+
+ @validator("vision_augmentation")
+ @classmethod
+ def validation_vision_augmentation(cls, field_value: bool) -> bool:
+ """Verify the visual_augmentation is correct."""
+ if not field_value:
+ raise AssertionError("Instances should have the vision_augmentation property to True")
+ return field_value
+
+
+def merge_all_annotations(root_annotation_path: Path) -> dict[str, Any]: # noqa: WPS231
+ """Merge all annotations within the root annotation path in a single annotation dict."""
+ merged_annotations = {}
+ for annotation_path in root_annotation_path.iterdir():
+ if annotation_path.suffix == ".json":
+ with open(annotation_path) as fp:
+ annotations = json.load(fp)
+ annotation_keys = list(annotations.keys())
+ if any([key in merged_annotations for key in annotation_keys]):
+ raise AssertionError("Found multiple annotations.")
+ annotation = annotations[annotation_keys[0]]
+
+ for annotation_key in annotation_keys:
+ print(annotation_path, annotation_key)
+ annotation = annotations[annotation_key]
+ try:
+ AnnotationModel(
+ instruction=annotation["instruction"],
+ actions=annotation["actions"],
+ vision_augmentation=annotation["vision_augmentation"],
+ )
+ except Exception:
+ logger.error(f"Skipping {annotation_key}")
+ annotations.pop(annotation_key, None)
+ merged_annotations.update(annotations)
+ return merged_annotations
+
+
+def split_annotations(
+ annotations: dict[str, Any],
+ split: Literal["random", "object_stratified"],
+ split_valid_perc: float = 0.2,
+) -> tuple[dict[str, Any], dict[str, Any]]:
+ """Split the annotations."""
+ if split == "random":
+ annotation_keys = list(annotations.keys())
+ random.shuffle(annotation_keys)
+
+ validation_keys = annotation_keys[: int(split_valid_perc * len(annotation_keys))]
+ train_keys = annotation_keys[int(split_valid_perc * len(annotation_keys)) :]
+
+ return {key: annotations[key] for key in train_keys}, {
+ key: annotations[key] for key in validation_keys
+ }
+
+ annotation_keys = list(annotations.keys())
+ object_ids = []
+ for _, annotation in annotations.items():
+ action_type = annotation["actions"][0]["type"].lower()
+ action_metadata = annotation["actions"][0][action_type]
+ if action_type == "search":
+ object_ids.append(action_metadata["object"]["id"][0])
+ else:
+ object_ids.append(action_metadata["object"]["id"])
+
+ # Objects that have been annotated only once cannot be split in a stratified way.
+ # Append them to training only.
+ singular_annotations = {}
+ objects_counter = Counter(object_ids)
+ for object_id, object_counter in objects_counter.items():
+ if object_counter == 1:
+ # Store the annotation for the object that appeared only once
+ index_to_remove = object_ids.index(object_id)
+ annotation_key = annotation_keys[index_to_remove]
+ singular_annotations[annotation_key] = annotations[annotation_key]
+
+ # Remove the annotation and the object from the split
+ annotation_keys.pop(index_to_remove)
+ object_ids.pop(index_to_remove)
+
+ splitter = StratifiedShuffleSplit(n_splits=1, test_size=split_valid_perc)
+ (train_indices, valid_indices) = next(splitter.split(annotation_keys, object_ids))
+
+ train_annotations = {
+ annotation_keys[train_idx]: annotations[annotation_keys[train_idx]]
+ for train_idx in train_indices
+ }
+
+ train_annotations.update(singular_annotations)
+
+ valid_annotations = {
+ annotation_keys[valid_idx]: annotations[annotation_keys[valid_idx]]
+ for valid_idx in valid_indices
+ }
+ return train_annotations, valid_annotations
+
+
+if __name__ == "__main__":
+ parser = ArgumentParser()
+
+ parser.add_argument(
+ "--root_annotation_path",
+ type=Path,
+ help="Path to the root directory containing the annotation json files",
+ )
+
+ parser.add_argument(
+ "--split_train_valid",
+ help="Split the annotations into train and validation",
+ choices=["random", "object_stratified"],
+ )
+
+ parser.add_argument(
+ "--split_valid_perc",
+ help="Percentage of validation data",
+ type=float,
+ default=0.2, # noqa: WPS432
+ )
+
+ parser.add_argument(
+ "--train_annotation_path",
+ type=Path,
+ help="Path to output train annotation json",
+ default=settings.paths.simbot.joinpath("train_annotation_instructions.json"),
+ )
+
+ parser.add_argument(
+ "--valid_annotation_path",
+ type=Path,
+ help="Path to output valid annotation json. Used only when --split-train-val argument is not None.",
+ default=settings.paths.simbot.joinpath("valid_annotation_instructions.json"),
+ )
+
+ args = parser.parse_args()
+
+ root_annotation_path = args.root_annotation_path
+
+ merged_annotations = merge_all_annotations(root_annotation_path)
+ if args.split_train_valid is not None:
+ train_annotations, valid_annotations = split_annotations(
+ annotations=merged_annotations,
+ split=args.split_train_valid,
+ split_valid_perc=args.split_valid_perc,
+ )
+
+ with open(args.train_annotation_path, "w") as fp_train:
+ json.dump(train_annotations, fp_train, indent=4)
+ with open(args.valid_annotation_path, "w") as fp_valid:
+ json.dump(valid_annotations, fp_valid, indent=4)
+ else:
+ with open(args.train_annotation_path, "w") as fp_merged:
+ json.dump(merged_annotations, fp_merged, indent=4)
diff --git a/src/emma_datasets/commands/create_simbot_trajectories_from_dynamo_db.py b/src/emma_datasets/commands/create_simbot_trajectories_from_dynamo_db.py
new file mode 100644
index 0000000..9e6afef
--- /dev/null
+++ b/src/emma_datasets/commands/create_simbot_trajectories_from_dynamo_db.py
@@ -0,0 +1,798 @@
+import json
+import logging
+import math
+import os
+import random
+import shutil
+import subprocess # noqa: S404
+from argparse import ArgumentParser
+from collections import Counter
+from typing import Any, Literal, Optional
+
+import boto3
+import numpy as np
+import pandas as pd
+import torch
+from boto3.dynamodb.conditions import Key
+from botocore.exceptions import ClientError
+from pydantic import BaseModel, Field
+
+from emma_datasets.common import get_progress
+from emma_datasets.constants.simbot.simbot import get_arena_definitions
+from emma_datasets.datamodels.datasets.utils.simbot_utils.high_level_key_processor import (
+ HighLevelKey,
+ HighLevelKeyProcessor,
+)
+
+
+logging.basicConfig()
+logger = logging.getLogger(__name__)
+logger.setLevel(logging.INFO)
+
+
+class CDFTrajectoryMetadata(BaseModel):
+ """A basemodel for the wandb metadata for each CDF."""
+
+ name: str = Field(alias="Name")
+ state: str = Field(alias="State")
+ notes: str = Field(alias="Notes")
+ user: str = Field(alias="User")
+ tags: Optional[str] = Field(alias="Tags")
+ created: str = Field(alias="Created")
+ runtime: int = Field(alias="Runtime")
+ sweep: str = Field(alias="Sweep")
+ cdf_floor_plan: int = Field(alias="cdf/floor_plan")
+ cdf_layout: str = Field(alias="cdf/layout")
+ cdf_room: str = Field(alias="cdf/room")
+ cdf_scene_id: str = Field(alias="cdf/scene_id")
+ high_level_key: str = Field(alias="high_level_key")
+ high_level_key_action: str = Field(alias="high_level_key/action")
+ high_level_key_converted_object: str = Field(alias="high_level_key/converted_object")
+ high_level_key_from_receptacle: str = Field(alias="high_level_key/from_receptacle")
+ high_level_key_from_receptacle_is_container: bool = Field(
+ alias="high_level_key/from_receptacle_is_container"
+ )
+ high_level_key_interaction_object: str = Field(alias="high_level_key/interaction_object")
+ high_level_key_target_object: str = Field(alias="high_level_key/target_object")
+ high_level_key_target_object_color: str = Field(alias="high_level_key/target_object_color")
+ high_level_key_to_receptacle: str = Field(alias="high_level_key/to_receptacle")
+ high_level_key_to_receptacle_is_container: bool = Field(
+ alias="high_level_key/to_receptacle_is_container"
+ )
+ preparation_session_id: str = Field(alias="preparation_session_id")
+ session_id: str = Field(alias="session_id")
+ is_success: int = Field(alias="is_success")
+ subgoal_success_rate: float = Field(alias="subgoal_success_rate")
+
+ @property
+ def converted_high_level_key(self) -> str:
+ """Converted high level key for each session."""
+ return self.session_id
+
+ @property
+ def target_action_object(self) -> str:
+ """Get the action_object pair.
+
+ Used to make stratified splits.
+ """
+ return f"{self.high_level_key_action}_{self.high_level_key_target_object}"
+
+
+class SessionClient:
+ """A simple client for retrieving sessions from the s3 bucket and dynamo db."""
+
+ def __init__(
+ self,
+ primary_key: str = "session_id",
+ resource_region: str = "us-east-1",
+ table_name: str = "SIMBOT_MEMORY_TABLE",
+ ) -> None:
+ self._primary_key = primary_key
+ self._resource_region = resource_region
+ self._table_name = table_name
+
+ self._db = boto3.resource("dynamodb", self._resource_region)
+ self._table = self._db.Table(self._table_name)
+
+ def get_all_session_turns_for_session(self, session_id: str) -> list[Any]:
+ """Get all the turns for a given session."""
+ try:
+ response = self._table.query(
+ KeyConditionExpression=Key(self._primary_key).eq(session_id)
+ )
+ except ClientError as err:
+ error_code = err.response["Error"]["Code"]
+
+ if error_code != "ConditionalCheckFailedException":
+ logger.exception("Could not add turn to table.", exc_info=err)
+ raise err
+ return []
+
+ parsed_responses = response["Items"]
+ logger.debug(f"Successfully got previous {len(parsed_responses)} turns")
+ return parsed_responses
+
+ def download_from_s3(self, local_path: str, s3_url: str, is_folder: bool = False) -> None:
+ """Download a file or folder from the s3 bucket."""
+ if os.path.exists(local_path):
+ logger.debug(f"{s3_url} has been download in {local_path}")
+ return
+ command = f"aws s3 cp {s3_url} {local_path}"
+ if is_folder:
+ command = f"{command} --recursive"
+ logger.debug(f"Downloading {s3_url} into {local_path}")
+
+ subprocess.call( # noqa: S603
+ command.split(), stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL
+ )
+
+
+class CDFTrajectoryCreator:
+ """Create trajectory data from CDF sessions."""
+
+ def __init__(
+ self,
+ sessions_file: str,
+ train_output_json: str,
+ valid_output_json: str,
+ output_feature_directory: str,
+ upsample_factor: int = 1,
+ cache_path: str = "storage/datasets/simbot/trajectories_sessions",
+ s3_sessions_bucket_url: str = "s3://emma-simbot-live-challenge/",
+ s3_results_bucket_url: str = "s3://emma-simbot/results/simbot-trajectories/missions/",
+ prefix_inclusion_probability: float = 0.2,
+ paraphrases_per_template: int = 10,
+ split_valid_perc: float = 0.2,
+ failed_sessions_txt: str = "failed_sessions.txt",
+ ):
+ self.output_json = {"train": train_output_json, "valid": valid_output_json}
+ self.output_feature_directory = output_feature_directory
+ os.makedirs(self.output_feature_directory, exist_ok=True)
+ self.cache_path = cache_path
+ os.makedirs(self.cache_path, exist_ok=True)
+
+ self.upsample_factor = upsample_factor
+ self.split_valid_perc = split_valid_perc
+ self.failed_sessions_txt = failed_sessions_txt
+
+ self._s3_sessions_bucket_url = s3_sessions_bucket_url
+ self._s3_results_bucket_url = s3_results_bucket_url
+
+ self._client = SessionClient()
+ cdf_metadata = self.read_all_sessions_from_file(sessions_file)
+ self._session_ids_per_split = self.split_sessions(cdf_metadata)
+
+ self._action_set = {
+ "goto",
+ "pickup",
+ "open",
+ "close",
+ "place",
+ "pour",
+ "toggle",
+ "clean",
+ "fill",
+ "highlight",
+ }
+ self._act_intent = ""
+ self._search_intent = ""
+ self._goto_object_action_type = "goto object"
+
+ arena_definitions = get_arena_definitions()
+ assets_to_labels = arena_definitions["asset_to_label"]
+ special_names = arena_definitions["special_asset_to_readable_name"]
+ assets_to_labels.update(special_names)
+ self._assets_to_labels = assets_to_labels
+
+ # We are losing information here since different assets can be mapped to the same label
+ self._labels_to_assets = {label: asset for asset, label in assets_to_labels.items()}
+
+ # We need to add here anything that we want to preserve when doing the inverse map
+ self._labels_to_assets["Apple"] = "Apple"
+
+ self._high_level_key_processor = HighLevelKeyProcessor(
+ prefix_inclusion_probability=prefix_inclusion_probability,
+ paraphrases_per_template=paraphrases_per_template,
+ )
+
+ def split_sessions(
+ self, cdf_metadata_list: list[CDFTrajectoryMetadata]
+ ) -> dict[Literal["train", "valid"], list[CDFTrajectoryMetadata]]:
+ """Split the sessions into train and validation."""
+ all_objectives = np.array(
+ [cdf_metadata.target_action_object for cdf_metadata in cdf_metadata_list]
+ )
+
+ objective_counts = Counter(all_objectives)
+ train_sessions = []
+ valid_sessions = []
+ for objective, count in objective_counts.items():
+ if count == 1:
+ train_sessions.append(
+ cdf_metadata_list[np.where(all_objectives == objective)[0][0]]
+ )
+ continue
+
+ objective_indices = np.where(all_objectives == objective)[0]
+ random.shuffle(objective_indices) # type: ignore[arg-type]
+
+ valid_upper_bound = math.ceil(self.split_valid_perc * len(objective_indices))
+ valid_indices = objective_indices[:valid_upper_bound]
+ train_indices = objective_indices[valid_upper_bound:]
+
+ train_sessions.extend([cdf_metadata_list[idx] for idx in train_indices])
+ valid_sessions.extend([cdf_metadata_list[idx] for idx in valid_indices])
+
+ return {"train": train_sessions, "valid": valid_sessions}
+
+ def should_skip_session_turn_for_trajectory( # noqa: WPS212, WPS231
+ self,
+ session_turn: dict[str, Any],
+ previous_session_turn: Optional[dict[str, Any]] = None,
+ is_last_turn: bool = False,
+ add_goto_action_after_search: bool = True,
+ ) -> bool:
+ """Skip turns that should not be added to the trajectory.
+
+ These generally are: 1) Turns where the agent spoke, either to a confirmation or to any
+ lightweight dialog. In practice this should never happen but nevertheless its useful to
+ avoid noise in the data. 2) Turns that correspond to search routines, we generally dont
+ want the policy model to handle this. 3) Turns where there is no interaction action.
+ """
+ # Remove turns after a failed action
+ environment = session_turn["intent"].get("environment", None)
+ if environment is not None and environment["type"].startswith(""):
+ return True
+
+ actions = session_turn["actions"]
+ interaction_action = actions.get("interaction", None)
+
+ # Remove turns of failed actions
+ failed_action = (
+ interaction_action is not None
+ and not is_last_turn # last turn utterances dont have status
+ and not interaction_action["status"]["success"]
+ )
+ if failed_action:
+ return True
+
+ interaction_intent_type = session_turn["intent"]["physical_interaction"]["type"]
+
+ prev_environment = session_turn["intent"].get("environment", None)
+ current_turn_is_after_error = prev_environment is not None and prev_environment[
+ "type"
+ ].startswith("")
+
+ current_interaction_type = interaction_action["type"]
+ # Skip any gotos that triggers act no match + search
+ # We have already gone to the object from the find routine
+ if previous_session_turn is not None and current_turn_is_after_error:
+ previous_interaction_intent_type = previous_session_turn["intent"][
+ "physical_interaction"
+ ]["type"]
+ previous_interaction_action = previous_session_turn["actions"]["interaction"]
+
+ try: # noqa: WPS229
+ previous_entity = previous_interaction_action["goto"]["object"]["name"]
+ current_entity = interaction_action["goto"]["object"]["name"]
+ entity_condition = previous_entity == current_entity
+ except KeyError:
+ entity_condition = False
+
+ should_skip_unecessary_goto = (
+ previous_interaction_intent_type == self._search_intent
+ and previous_interaction_action["type"] == self._goto_object_action_type
+ and current_interaction_type == self._goto_object_action_type
+ and entity_condition
+ )
+ if should_skip_unecessary_goto:
+ return True
+
+ # Add the last goto action after the search is complete + successful
+ if add_goto_action_after_search:
+ return (
+ (interaction_intent_type != self._search_intent and session_turn["idx"] > 0)
+ or interaction_action is None
+ or current_interaction_type != self._goto_object_action_type
+ )
+
+ if session_turn["idx"] == 0 and not add_goto_action_after_search:
+ return (
+ interaction_action is None
+ or interaction_intent_type != self._act_intent
+ or current_interaction_type == self._goto_object_action_type
+ )
+ # Add only interaction actions, not from the search
+ return interaction_intent_type != self._act_intent or interaction_action is None
+
+ def check_if_session_is_successful(self, session_id: str) -> bool:
+ """Check if the agent completed the mission within the session."""
+ session_result_json = f"{session_id}.json"
+ local_path = os.path.join(self.cache_path, session_result_json)
+ s3_url = os.path.join(self._s3_results_bucket_url, session_result_json)
+ self._client.download_from_s3(local_path, s3_url, is_folder=False)
+
+ # If for some reason there is no results json the session is invalid
+ if not os.path.exists(local_path):
+ return False
+
+ with open(local_path) as fp:
+ data = json.load(fp)
+
+ challenge_goals = data["last_game_state"]["challengeProgress"]["ChallengeGoals"]
+ all_challenges_completed = []
+ for challenge_goal in challenge_goals:
+ is_finished = challenge_goal["isFinished"]
+ subgoals_finished = all(
+ subgoal["isFinished"] for subgoal in challenge_goal["subTasks"]
+ )
+ if is_finished and not subgoals_finished:
+ logger.warning(
+ f"{session_id} is supposed to be completed but there are incomplete subgoals"
+ )
+ challenge_completed = False
+ elif is_finished:
+ challenge_completed = True
+ else:
+ challenge_completed = False
+ all_challenges_completed.append(challenge_completed)
+
+ # A session is valid if all challenges are completed
+ return all(all_challenges_completed)
+
+ def run(self) -> None:
+ """Create trajectory annotations."""
+ for split in ("train", "valid"):
+ self.create_trajectories_for_split(
+ split=split, # type: ignore[arg-type]
+ sessions_for_split=self._session_ids_per_split[split], # type:ignore[index]
+ )
+
+ def create_trajectories_for_split( # noqa: WPS231
+ self,
+ split: Literal["train", "valid"],
+ sessions_for_split: list[CDFTrajectoryMetadata],
+ ) -> None:
+ """Create trajectory annotations for train and validation split."""
+ progress = get_progress()
+ task_id = progress.add_task(
+ f"Creating {split} trajectory annotations",
+ visible=True,
+ start=True,
+ total=len(sessions_for_split),
+ comment="",
+ )
+ missions = {}
+ with progress:
+ for session in sessions_for_split:
+ logger.info(session)
+ session_id = session.session_id
+
+ is_valid_session = self.check_if_session_is_successful(session_id)
+ high_level_key = self.process_highl_level_key(session_id=session_id)
+
+ if not is_valid_session or high_level_key is None:
+ progress.advance(task_id)
+ continue
+
+ # Get the session turns the session
+ session_turns = self._client.get_all_session_turns_for_session(session_id)
+ if not session_turns:
+ continue
+
+ # Download all files from s3
+ local_path = os.path.join(self.cache_path, session_id)
+ s3_url = os.path.join(self._s3_sessions_bucket_url, session_id)
+ self._client.download_from_s3(local_path, s3_url, is_folder=True)
+
+ try:
+ missions_dict = self.create_mission_for_session(
+ high_level_key=high_level_key,
+ session_id=session_id,
+ session_turns=session_turns,
+ )
+ except Exception:
+ logger.error(f"Could not create trajectory for {session_id}")
+
+ missions.update(missions_dict)
+
+ with open(self.output_json[split], "w") as fp:
+ json.dump(missions, fp, indent=4)
+
+ progress.advance(task_id)
+
+ with open(self.output_json[split], "w") as fp: # noqa: WPS440
+ json.dump(missions, fp, indent=4)
+
+ shutil.rmtree(self.cache_path)
+
+ def create_mission_for_session(
+ self, high_level_key: HighLevelKey, session_id: str, session_turns: list[Any]
+ ) -> dict[str, Any]:
+ """Create all missions for a trajectory."""
+ # This should be unique across all missions
+ # The sessions_ids have the form T.DATE/MISSION-GOAL-RANDOM-STRING
+ mission_id = session_id.replace("/", "__")
+
+ agent_interacted_objects_assets = high_level_key.decoded_key.get_interacted_objects()
+ instruction = random.choice(high_level_key.paraphrases)
+
+ missions_dict = {}
+ for add_goto in (True, False):
+ session_actions = self.create_actions_for_session(
+ session_id=session_id,
+ session_turns=session_turns,
+ agent_interacted_objects_assets=agent_interacted_objects_assets,
+ add_goto_action_after_search=add_goto,
+ )
+ if not session_actions:
+ continue
+
+ # make sure that when add_goto = False the first action is not a goto
+ if not add_goto:
+ first_action = session_actions[0]
+ first_action_type = first_action["type"]
+ if first_action_type.lower() == "goto":
+ session_actions = session_actions[1:]
+
+ missions_dict[f"{mission_id}_add_goto{add_goto}"] = {
+ "human_annotations": [
+ {
+ "instructions": [
+ {
+ "instruction": instruction,
+ "actions": self._get_action_ids(session_actions),
+ }
+ ]
+ }
+ ],
+ "actions": session_actions,
+ }
+ return missions_dict
+
+ def create_actions_for_session( # noqa: WPS210, WPS231
+ self,
+ session_id: str,
+ session_turns: list[Any],
+ agent_interacted_objects_assets: list[str],
+ add_goto_action_after_search: bool = False,
+ ) -> list[dict[str, Any]]:
+ """Create all actions for a trajectory."""
+ actions: list[dict[str, Any]] = []
+ action_id = 0
+ previous_session_turn = None
+ for idx, session_turn_dict in enumerate(session_turns):
+ session_turn = json.loads(session_turn_dict["turn"])
+ should_skip_turn = self.should_skip_session_turn_for_trajectory(
+ session_turn=session_turn,
+ previous_session_turn=previous_session_turn,
+ is_last_turn=idx == len(session_turns) - 1,
+ add_goto_action_after_search=add_goto_action_after_search,
+ )
+
+ previous_session_turn = session_turn
+
+ if should_skip_turn:
+ continue
+
+ if add_goto_action_after_search:
+ add_goto_action_after_search = False
+
+ interaction_action = session_turn["actions"]["interaction"]
+
+ prediction_id = session_turn["prediction_request_id"]
+ raw_model_output = interaction_action["raw_output"]
+
+ decoded_action = self.parse_raw_model_output(raw_model_output)[0]
+
+ action_metadata = self.get_metadata_from_raw_action(decoded_action)
+
+ image_features_path = os.path.join(self.cache_path, session_id, f"{prediction_id}.pt")
+ if not os.path.exists(image_features_path):
+ logger.warning(
+ f"{image_features_path} does not exist, maybe the session is not on s3"
+ )
+ continue
+
+ image_features = torch.load(image_features_path, map_location=torch.device("cpu"))
+ frame_index = action_metadata["frame_index"] - 1
+ object_index = action_metadata["object_index"] - 1
+ frame_features = self._format_feature_dict(
+ image_features[frame_index], image_name=f"{prediction_id}.png"
+ )
+ entity = image_features[frame_index]["entity_labels"][object_index]
+
+ # Did the agent interacted with the object? If yes add in the trajectory data
+ object_asset = self._agent_interacted_with_object_entity(
+ entity, agent_interacted_objects_assets
+ )
+
+ if object_asset is None:
+ object_asset = self._manually_fix_object_asset(
+ session_id=session_id,
+ prediction_id=prediction_id,
+ entity=entity,
+ agent_interacted_objects_assets=agent_interacted_objects_assets,
+ )
+ if object_asset is None:
+ return []
+
+ if actions:
+ previous_action = actions[-1]
+ previous_action_type = previous_action["type"]
+
+ if previous_action_type.lower() == action_metadata["action_type"] == "goto":
+ continue
+
+ torch.save(
+ frame_features,
+ os.path.join(self.output_feature_directory, f"{prediction_id}.pt"),
+ )
+
+ action_dict = self.make_action(
+ action_id=action_id,
+ action_metadata=action_metadata,
+ prediction_id=prediction_id,
+ object_id=object_asset,
+ mask=interaction_action[action_metadata["action_type"]]["object"]["mask"],
+ )
+
+ actions.append(action_dict)
+
+ action_id += 1
+
+ return actions
+
+ def parse_raw_model_output(self, raw_model_output: str) -> list[str]:
+ """Split the raw_model_output into a list of actions."""
+ decoded_action_str = raw_model_output.replace("", "")
+ split_actions = decoded_action_str.split(".")
+ actions = [action.strip() for action in split_actions if action]
+ return actions
+
+ def get_metadata_from_raw_action(self, raw_action: str) -> dict[str, Any]:
+ """Deconstruct and parse the raw action."""
+ # Remove the end of trajectory token from the action to process it. We
+ # only care about it when figuring out the dialog.
+ action_tokens = raw_action.replace(".", "").strip().split(" ")
+ action_type, action_params = self.get_simbot_action_from_tokens(action_tokens)
+
+ object_index, frame_index = self.get_actions_params_from_raw_action(action_params)
+ action_metadata = {
+ "action_type": action_type,
+ "object_index": object_index,
+ "frame_index": frame_index,
+ }
+ return action_metadata
+
+ def get_actions_params_from_raw_action( # noqa: WPS231
+ self, action_params: list[str]
+ ) -> tuple[int, int]:
+ """Deconstruct and parse the raw action from the params."""
+ object_index = None
+ frame_index = 1
+
+ for action_param in action_params:
+ action_param = action_param.strip()
+
+ if action_param.startswith(""):
+ object_index = self.extract_index_from_special_token(action_param)
+
+ elif action_param.startswith(""):
+ frame_index = self.extract_index_from_special_token(action_param)
+
+ if object_index is None:
+ raise AssertionError("Found an action that has no visual token")
+
+ return object_index, frame_index
+
+ def get_simbot_action_from_tokens(self, action_tokens: list[str]) -> tuple[str, list[str]]:
+ """Get the SimBot action from the decoded action string.
+
+ Assumptions:
+ - The action appears at the start of the `decoded_action_string`.
+ - The action can be of a length more than 1.
+
+ Example:
+ - If decoded_action == `forward`, then return `Forward`
+ - If decoded_action == `pickup mug`, then return `Pickup`
+ """
+ parsed_action_name = None
+ action_name = None
+
+ index = len(action_tokens)
+
+ while index > 0:
+ action_name = " ".join(action_tokens[:index])
+
+ if action_name.lower() in self._action_set:
+ parsed_action_name = action_name.lower()
+ break
+
+ index -= 1
+
+ # If we don't have an action type, then we don't really know what to do at all.
+ if parsed_action_name is None:
+ raise AssertionError("The action name could not be parsed.")
+
+ return (
+ parsed_action_name,
+ action_tokens[index:],
+ )
+
+ def read_all_sessions_from_file(self, sessions_file: str) -> list[CDFTrajectoryMetadata]:
+ """Read all the input sessions."""
+ data_frame = pd.read_csv(sessions_file)
+
+ successful_indices = data_frame["is_success"] > 0
+ successful_sessions = data_frame[successful_indices]
+
+ session_ids = []
+ for _, row in successful_sessions.iterrows():
+ cdf_metadata = CDFTrajectoryMetadata.parse_obj(row.to_dict())
+ session_ids.append(cdf_metadata)
+
+ failed_indices = data_frame["is_success"] == 0
+ failed_sessions = data_frame[failed_indices]
+
+ if failed_sessions.shape[0]:
+ failed_session_names = []
+ for _, failed_session in successful_sessions.iterrows():
+ logger.warning(failed_session["Name"])
+ failed_session_names.append(failed_session["Name"])
+
+ with open(self.failed_sessions_txt, "w") as fp:
+ for line in failed_session_names:
+ fp.write(f"{line}\n")
+
+ logger.warning(f"Failed {failed_sessions.shape[0]}/{data_frame.shape[0]}")
+ return session_ids
+
+ def process_highl_level_key(self, session_id: str) -> HighLevelKey:
+ """Get the high level description from the session id."""
+ try:
+ # the session had has the following form: T.DATE/high-level-key
+ high_level_key = self._high_level_key_processor(session_id.split("/")[1])
+ except Exception:
+ logger.error(f"Could not convert the session id {session_id} to a high level key")
+ return None # type: ignore[return-value]
+
+ return high_level_key
+
+ def extract_index_from_special_token(self, token: str) -> int:
+ """Extract the token index from a special token."""
+ return int(token.strip().split("_")[-1].replace(">", ""))
+
+ def make_action(
+ self,
+ action_id: int,
+ action_metadata: dict[str, Any],
+ prediction_id: str,
+ object_id: str,
+ mask: list[list[int]],
+ ) -> dict[str, Any]:
+ """Make an action dictionary."""
+ action_dict = {
+ "id": action_id,
+ "type": action_metadata["action_type"].capitalize(),
+ "colorImages": [f"{prediction_id}.png"],
+ action_metadata["action_type"]: {
+ "object": {"id": object_id, "mask": mask, "colorImageIndex": 0}
+ },
+ }
+ return action_dict
+
+ def _get_action_ids(self, session_actions: list[dict[str, Any]]) -> list[int]:
+ return [action["id"] for action in session_actions]
+
+ def _format_feature_dict(
+ self,
+ frame_features: dict[str, torch.Tensor],
+ image_name: str,
+ ) -> dict[str, list[dict[str, torch.Tensor]]]:
+ frame_features["bbox_features"] = frame_features["bbox_features"].cpu()
+ frame_features["bbox_coords"] = frame_features["bbox_coords"].cpu()
+ frame_features["bbox_probas"] = frame_features["bbox_probas"].cpu()
+ frame_features["cnn_features"] = frame_features["cnn_features"].cpu()
+ return {"frames": [{"features": frame_features, "image": image_name}]} # type: ignore[dict-item]
+
+ def _agent_interacted_with_object_entity(
+ self, entity: str, agent_interacted_objects_assets: list[str]
+ ) -> Optional[str]:
+ if entity.lower() == "red button":
+ return "ColorChanger_Button_Red"
+
+ elif entity.lower() == "green button":
+ return "ColorChanger_Button_Green"
+
+ elif entity.lower() == "blue button":
+ return "ColorChanger_Button_Blue"
+
+ for object_asset, object_label in self._assets_to_labels.items():
+ agent_interacted_with_object = (
+ object_label.lower() == entity.lower()
+ and object_asset in agent_interacted_objects_assets
+ )
+ if agent_interacted_with_object:
+ return object_asset
+ return None
+
+ def _manually_fix_object_asset( # noqa: WPS231
+ self,
+ session_id: str,
+ prediction_id: str,
+ entity: str,
+ agent_interacted_objects_assets: list[str],
+ ) -> Optional[str]:
+ if entity.lower() == "bowl" and "FoodPlate_01" in agent_interacted_objects_assets:
+ object_asset = "FoodPlate_01"
+ elif entity.lower() == "plate" and "Bowl_01" in agent_interacted_objects_assets:
+ object_asset = "Bowl_01"
+ else:
+ msg = f"I AM ABOUT TO SKIP session {session_id} because in {prediction_id} the {entity} was not found in {agent_interacted_objects_assets}"
+ logger.warning(msg)
+ while True:
+ candidate_asset = input( # noqa: WPS421
+ "Enter an object asset. Write none if you want to skip the session: "
+ )
+ if candidate_asset == "none":
+ logger.warning("Skipping the session")
+ return None
+ elif candidate_asset not in self._assets_to_labels:
+ logger.warning(f"{candidate_asset} is not in the arena assets")
+ else:
+ object_asset = candidate_asset
+ break
+ return object_asset
+
+
+if __name__ == "__main__":
+ parser = ArgumentParser()
+
+ parser.add_argument(
+ "--sessions_file",
+ help="Path to input session CDFs",
+ default="sessions.txt",
+ )
+
+ parser.add_argument(
+ "--train_output_json",
+ help="Path to output json",
+ default="train_trajectories.json",
+ )
+
+ parser.add_argument(
+ "--valid_output_json",
+ help="Path to output json",
+ default="valid_trajectories.json",
+ )
+
+ parser.add_argument(
+ "--output_feature_directory",
+ help="Path to output feature directory",
+ default="trajectories_features",
+ )
+
+ parser.add_argument(
+ "--failed_sessions_txt",
+ help="Path to output failed sessions txt file",
+ default="failed_sessions.txt",
+ )
+
+ parser.add_argument(
+ "--upsample_factor",
+ help="Upsample factor for the trajectories",
+ type=int,
+ default=100,
+ )
+
+ args = parser.parse_args()
+
+ CDFTrajectoryCreator(
+ sessions_file=args.sessions_file,
+ train_output_json=args.train_output_json,
+ valid_output_json=args.valid_output_json,
+ output_feature_directory=args.output_feature_directory,
+ upsample_factor=args.upsample_factor,
+ failed_sessions_txt=args.failed_sessions_txt,
+ ).run()
diff --git a/src/emma_datasets/commands/decode_highlevel_key_and_generate.py b/src/emma_datasets/commands/decode_highlevel_key_and_generate.py
new file mode 100644
index 0000000..e0df0c8
--- /dev/null
+++ b/src/emma_datasets/commands/decode_highlevel_key_and_generate.py
@@ -0,0 +1,33 @@
+import logging
+from argparse import ArgumentParser
+
+from emma_datasets.common import use_rich_for_logging
+from emma_datasets.datamodels.datasets.utils.simbot_utils.high_level_key_processor import (
+ HighLevelKeyProcessor,
+)
+
+
+use_rich_for_logging()
+logger = logging.getLogger(__name__)
+
+
+if __name__ == "__main__":
+ parser = ArgumentParser()
+
+ parser.add_argument(
+ "--high_level_key",
+ default="action--timemachine_target-object--bowl_target-object-color--red_converted-object--bowl-4L3ie",
+ )
+
+ parser.add_argument("--paraphrases_per_template", default=1, type=int)
+ parser.add_argument("--prefix_inclusion_probability", default=0.2, type=float) # noqa: WPS432
+
+ args = parser.parse_args()
+
+ high_level_key_processor = HighLevelKeyProcessor(
+ prefix_inclusion_probability=args.prefix_inclusion_probability,
+ paraphrases_per_template=args.paraphrases_per_template,
+ )
+
+ data = high_level_key_processor(highlevel_key=args.high_level_key)
+ logger.info(f"{data}")
diff --git a/src/emma_datasets/commands/download_datasets.py b/src/emma_datasets/commands/download_datasets.py
new file mode 100644
index 0000000..3f56516
--- /dev/null
+++ b/src/emma_datasets/commands/download_datasets.py
@@ -0,0 +1,64 @@
+import logging
+from pathlib import Path
+from typing import Optional, cast
+
+import typer
+
+from emma_datasets.common import Downloader, Settings
+from emma_datasets.common.downloader import DataDict
+from emma_datasets.datamodels import DatasetName
+from emma_datasets.io import read_csv
+
+
+app = typer.Typer(
+ add_completion=False,
+ no_args_is_help=True,
+ short_help="Download files for processing.",
+)
+
+logger = logging.getLogger(__name__)
+
+settings = Settings()
+
+DEFAULT_CSV_PATH = settings.paths.constants.joinpath("dataset_downloads.csv")
+
+
+@app.command()
+def download_datasets(
+ datasets: Optional[list[DatasetName]] = typer.Argument( # noqa: WPS404
+ None,
+ case_sensitive=False,
+ help="Specify which datasets to download. Download all if none specified.",
+ ),
+ csv_file_path: Path = typer.Option( # noqa: WPS404
+ DEFAULT_CSV_PATH,
+ help="Location of the CSV file which contians all the download locations.",
+ ),
+ output_dir: Path = typer.Option( # noqa: WPS404
+ settings.paths.datasets, help="Output directory for the files"
+ ),
+ max_concurrent_downloads: Optional[int] = typer.Option( # noqa: WPS404
+ None,
+ help="Number of threads to use for parallel processing. This default to `min(32, os.cpu_count() + 4).",
+ ),
+) -> None:
+ """Download the dataset files from the CSV file.
+
+ If none are specified, download all of them.
+ """
+ if not datasets:
+ datasets = list(DatasetName)
+
+ downloader = Downloader()
+ data_dicts = read_csv(csv_file_path)
+ filtered_data_dicts = [
+ cast(DataDict, file_dict)
+ for file_dict in data_dicts
+ if DatasetName[file_dict["dataset"]] in datasets
+ ]
+
+ downloader.download(filtered_data_dicts, output_dir, max_concurrent_downloads)
+
+
+if __name__ == "__main__":
+ app()
diff --git a/src/emma_datasets/commands/extract_annotations.py b/src/emma_datasets/commands/extract_annotations.py
new file mode 100644
index 0000000..1cdd976
--- /dev/null
+++ b/src/emma_datasets/commands/extract_annotations.py
@@ -0,0 +1,225 @@
+from multiprocessing.pool import Pool
+from typing import Any, Callable, Optional
+
+import typer
+from rich.progress import Progress
+
+from emma_datasets.common import Settings, get_progress
+from emma_datasets.datamodels import AnnotationType, DatasetName
+from emma_datasets.parsers.annotation_extractors import (
+ AlfredCaptionExtractor,
+ AlfredTaskDescriptionExtractor,
+ AlfredTrajectoryExtractor,
+ AnnotationExtractor,
+ CocoCaptionExtractor,
+ ConceptualCaptionsExtractor,
+ EpicKitchensCaptionExtractor,
+ GqaQaPairExtractor,
+ GqaSceneGraphExtractor,
+ VgRegionsExtractor,
+ VQAv2QaPairExtractor,
+)
+
+
+app = typer.Typer(
+ add_completion=False,
+ no_args_is_help=True,
+ short_help="Extract annotations from datasets.",
+)
+
+
+settings = Settings()
+settings.paths.create_dirs()
+
+
+def extract_coco_captions(progress: Progress) -> CocoCaptionExtractor:
+ """Extract captions from COCO."""
+ return CocoCaptionExtractor(
+ [
+ settings.paths.coco.joinpath("captions_train2017.json"),
+ settings.paths.coco.joinpath("captions_val2017.json"),
+ ],
+ settings.paths.captions,
+ progress,
+ )
+
+
+def extract_gqa_qa_pairs(progress: Progress) -> GqaQaPairExtractor:
+ """Extract QA Pairs from GQA."""
+ return GqaQaPairExtractor(
+ [
+ settings.paths.gqa_questions.joinpath("val_balanced_questions.json"),
+ settings.paths.gqa_questions.joinpath("train_balanced_questions.json"),
+ ],
+ settings.paths.qa_pairs,
+ progress,
+ )
+
+
+def extract_vqa_v2_qa_pairs(progress: Progress) -> VQAv2QaPairExtractor:
+ """Extract QA Pairs from GQA."""
+ return VQAv2QaPairExtractor(
+ [
+ (
+ settings.paths.vqa_v2.joinpath("v2_OpenEnded_mscoco_val2014_questions.json"),
+ settings.paths.vqa_v2.joinpath("v2_mscoco_val2014_annotations.json"),
+ ),
+ (
+ settings.paths.vqa_v2.joinpath("VG_questions.json"),
+ settings.paths.vqa_v2.joinpath("VG_annotations.json"),
+ ),
+ (
+ settings.paths.vqa_v2.joinpath("v2_OpenEnded_mscoco_train2014_questions.json"),
+ settings.paths.vqa_v2.joinpath("v2_mscoco_train2014_annotations.json"),
+ ),
+ ],
+ settings.paths.qa_pairs,
+ progress,
+ )
+
+
+def extract_gqa_scene_graphs(progress: Progress) -> GqaSceneGraphExtractor:
+ """Extract scene graphs from GQA."""
+ return GqaSceneGraphExtractor(
+ [
+ settings.paths.gqa_scene_graphs.joinpath("train_sceneGraphs.json"),
+ settings.paths.gqa_scene_graphs.joinpath("val_sceneGraphs.json"),
+ ],
+ settings.paths.scene_graphs,
+ progress,
+ )
+
+
+def extract_vg_regions(progress: Progress) -> VgRegionsExtractor:
+ """Extract regions from VisualGenome."""
+ return VgRegionsExtractor(
+ settings.paths.visual_genome.joinpath("region_descriptions.json"),
+ settings.paths.regions,
+ progress,
+ )
+
+
+def extract_epic_kitchen_captions(progress: Progress) -> EpicKitchensCaptionExtractor:
+ """Extract captions from EPIC-KITCHENS."""
+ return EpicKitchensCaptionExtractor(
+ [
+ settings.paths.epic_kitchens.joinpath("EPIC_100_train.csv"),
+ settings.paths.epic_kitchens.joinpath("EPIC_100_validation.csv"),
+ ],
+ settings.paths.captions,
+ progress,
+ )
+
+
+def extract_alfred_captions(progress: Progress) -> AlfredCaptionExtractor:
+ """Extract captions from ALFRED."""
+ return AlfredCaptionExtractor(
+ [
+ settings.paths.alfred_data.joinpath("train/"),
+ settings.paths.alfred_data.joinpath("valid_seen/"),
+ ],
+ settings.paths.captions,
+ progress,
+ )
+
+
+def extract_alfred_subgoal_trajectories(progress: Progress) -> AlfredTrajectoryExtractor:
+ """Extract subgoal trajectories from ALFRED."""
+ return AlfredTrajectoryExtractor(
+ [
+ settings.paths.alfred_data.joinpath("train/"),
+ settings.paths.alfred_data.joinpath("valid_seen/"),
+ ],
+ settings.paths.trajectories,
+ progress,
+ )
+
+
+def extract_alfred_task_descriptions(progress: Progress) -> AlfredTaskDescriptionExtractor:
+ """Extract task descriptions from ALFRED."""
+ return AlfredTaskDescriptionExtractor(
+ [
+ settings.paths.alfred_data.joinpath("train"),
+ settings.paths.alfred_data.joinpath("valid_seen"),
+ ],
+ settings.paths.task_descriptions,
+ progress,
+ )
+
+
+def extract_conceptual_captions(progress: Progress) -> ConceptualCaptionsExtractor:
+ """Extract captions from Conceptual Captions."""
+ return ConceptualCaptionsExtractor(
+ [
+ settings.paths.conceptual_captions.joinpath("train/"),
+ settings.paths.conceptual_captions.joinpath("valid/"),
+ ],
+ settings.paths.captions.joinpath("conceptual_captions"),
+ progress,
+ )
+
+
+all_extractor_callables: list[Callable[[Progress], AnnotationExtractor[Any]]] = [
+ extract_coco_captions,
+ extract_gqa_qa_pairs,
+ extract_gqa_scene_graphs,
+ extract_vg_regions,
+ extract_epic_kitchen_captions,
+ extract_alfred_captions,
+ extract_alfred_subgoal_trajectories,
+ extract_alfred_task_descriptions,
+ extract_conceptual_captions,
+ extract_vqa_v2_qa_pairs,
+]
+
+
+@app.command("annotations")
+def extract_annotation_by_type(
+ annotations: Optional[list[AnnotationType]] = typer.Option( # noqa: WPS404
+ None,
+ case_sensitive=False,
+ help="Optionally, specify which annotation types to extract from the various datasets.",
+ ),
+ datasets: Optional[list[DatasetName]] = typer.Option( # noqa: WPS404
+ None,
+ case_sensitive=False,
+ help="Optionally, specify which datasets to extract annotations from.",
+ ),
+ num_workers: Optional[int] = typer.Option( # noqa: WPS404
+ None, show_default=False, help="Use maximum available workers by default."
+ ),
+) -> None:
+ """Extract annotations from various datasets.
+
+ By default, all annotations across all datasets are extracted, using the maximum available
+ workers.
+ """
+ progress = get_progress()
+
+ extractors = [extractor(progress) for extractor in all_extractor_callables]
+
+ # Remove any extractors that do not extract the specified annotation types
+ if annotations:
+ extractors = [
+ extractor for extractor in extractors if extractor.annotation_type in annotations
+ ]
+
+ # Remove any extractors that do not support the specified datasets
+ if datasets:
+ extractors = [extractor for extractor in extractors if extractor.dataset_name in datasets]
+
+ # Error if there are no extractors left
+ if not extractors:
+ progress.console.log(
+ "[b red]ERROR:[/] No extractors are available for the given datasets and annotation types."
+ )
+ raise typer.Abort()
+
+ with progress:
+ with Pool(num_workers) as pool:
+ for extractor in extractors:
+ extractor.run(progress, pool)
+
+
+if __name__ == "__main__":
+ app()
diff --git a/src/emma_datasets/commands/organise_all_datasets.py b/src/emma_datasets/commands/organise_all_datasets.py
new file mode 100644
index 0000000..1183cb4
--- /dev/null
+++ b/src/emma_datasets/commands/organise_all_datasets.py
@@ -0,0 +1,334 @@
+import logging
+import shutil
+from concurrent.futures import ThreadPoolExecutor
+from pathlib import Path
+from typing import Callable, Optional
+
+import typer
+from rich.progress import BarColumn, Progress, TextColumn
+
+from emma_datasets.common import Settings, use_rich_for_logging
+from emma_datasets.common.progress import BatchesProcessedColumn, CustomTimeColumn
+from emma_datasets.datamodels import DatasetName
+from emma_datasets.io import extract_archive
+
+
+use_rich_for_logging()
+logger = logging.getLogger(__name__)
+
+settings = Settings()
+settings.paths.create_dirs()
+
+app = typer.Typer(
+ add_completion=False,
+ no_args_is_help=True,
+ short_help="Organises the downloaded files.",
+)
+
+
+class OrganiseDataset:
+ """Organise archives from datasets to be extracted and moved if needed."""
+
+ def __init__(self, dataset_path: Path, dataset_name: DatasetName) -> None:
+ self._dataset_path = dataset_path
+ self._dataset_name = dataset_name
+
+ def submit(
+ self,
+ description: str,
+ file_names: list[str],
+ pool: ThreadPoolExecutor,
+ progress: Progress,
+ output_dir: Optional[Path] = None,
+ move_files_to_output_dir: bool = False,
+ ) -> None:
+ """Submit archives which need to be extracted into the same output directory."""
+ archive_paths = [self._dataset_path.joinpath(archive) for archive in file_names]
+
+ task_id = progress.add_task(
+ description,
+ start=False,
+ visible=False,
+ total=0,
+ dataset_name=self._dataset_name.value,
+ comment="",
+ )
+
+ for path in archive_paths:
+ pool.submit(
+ extract_archive,
+ path=path,
+ task_id=task_id,
+ progress=progress,
+ output_dir=output_dir,
+ move_files_to_output_dir=move_files_to_output_dir,
+ )
+
+
+def organise_coco(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the files from COCO."""
+ organise_dataset = OrganiseDataset(settings.paths.coco, DatasetName.coco)
+
+ organise_dataset.submit(
+ description="Extracting metadata",
+ file_names=["annotations_trainval2017.zip"],
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+ organise_dataset.submit(
+ description="Extracting images",
+ file_names=["train2017.zip", "val2017.zip"],
+ output_dir=settings.paths.coco_images,
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_visual_genome(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the files from Visual Genome."""
+ organise_dataset = OrganiseDataset(settings.paths.visual_genome, DatasetName.visual_genome)
+
+ organise_dataset.submit(
+ description="Extracting metadata",
+ file_names=["region_descriptions.json.zip", "image_data.json.zip"],
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+ organise_dataset.submit(
+ description="Extracting images",
+ file_names=["images.zip", "images2.zip"],
+ output_dir=settings.paths.visual_genome_images,
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_gqa(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the files from GQA."""
+ organise_dataset = OrganiseDataset(settings.paths.gqa, DatasetName.gqa)
+ organise_dataset.submit(
+ description="Extracting questions",
+ file_names=["questions1.2.zip"],
+ output_dir=settings.paths.gqa.joinpath("questions/"),
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+ organise_dataset.submit(
+ description="Extracting scene graphs",
+ file_names=["sceneGraphs.zip"],
+ output_dir=settings.paths.gqa.joinpath("scene_graphs/"),
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+ organise_dataset.submit(
+ description="Extracting images",
+ file_names=["images.zip"],
+ output_dir=settings.paths.gqa_images,
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_epic_kitchens(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the files from EPIC-KITCHENS."""
+ organise_dataset = OrganiseDataset(settings.paths.epic_kitchens, DatasetName.epic_kitchens)
+
+ for tar_file in settings.paths.epic_kitchens.glob("*.tar"):
+ organise_dataset.submit(
+ description=f"Extracting RGB frames for {tar_file.stem}",
+ file_names=[tar_file.name],
+ output_dir=settings.paths.epic_kitchens_frames.joinpath(f"{tar_file.stem}/"),
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_alfred(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise files from ALFRED."""
+ organise_dataset = OrganiseDataset(settings.paths.alfred, DatasetName.alfred)
+
+ alfred_warning = """Raw data from ALFRED comes as one giant 7z file, which cannot be efficiently extracted using this CLI. This is a known issue and unfortunately you will need to extract this one file separately using your shell. Sorry about that.
+ """
+ logger.warning(alfred_warning)
+
+ organise_dataset.submit(
+ description="Extracting metadata",
+ file_names=["json_2.1.0.7z"],
+ output_dir=settings.paths.alfred,
+ pool=pool,
+ progress=progress,
+ )
+ # TODO(amit): This is going to take forever and needs to be better
+ # organise_dataset.submit(
+ # description="Extracting images",
+ # file_names=["full_2.1.0.7z"],
+ # output_dir=settings.paths.alfred,
+ # pool=pool,
+ # progress=progress,
+ # )
+
+
+def organise_teach(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the TEACh dataset."""
+ organise_dataset = OrganiseDataset(settings.paths.teach, DatasetName.teach)
+
+ organise_dataset.submit(
+ description="Extracting all games",
+ file_names=["all_games.tar.gz"],
+ pool=pool,
+ progress=progress,
+ )
+
+ organise_dataset.submit(
+ description="Extracting experiment games",
+ file_names=["experiment_games.tar.gz"],
+ pool=pool,
+ progress=progress,
+ )
+
+ organise_dataset.submit(
+ description="Extracting EDH instances",
+ file_names=["edh_instances.tar.gz"],
+ pool=pool,
+ progress=progress,
+ )
+
+ organise_dataset.submit(
+ description="Extracting images and states",
+ file_names=["images_and_states.tar.gz"],
+ pool=pool,
+ progress=progress,
+ )
+
+
+def organise_nlvr(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the files from NLVR."""
+ organise_dataset = OrganiseDataset(settings.paths.nlvr, DatasetName.nlvr)
+
+ # NLVR^2 data are defined as JSONL. The file extension is JSON...
+ for path in settings.paths.nlvr.iterdir():
+ new_extension_path = Path(str(path).replace("json", "jsonl"))
+ path.rename(new_extension_path)
+
+ organise_dataset.submit(
+ description="Extracting images",
+ file_names=["train_img.zip", "dev_img.zip", "test1_img.zip"],
+ output_dir=settings.paths.nlvr_images,
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_vqa_v2(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the annotation files from VQA-v2."""
+ organise_dataset = OrganiseDataset(settings.paths.vqa_v2, DatasetName.vqa_v2)
+
+ organise_dataset.submit(
+ description="Extracting metadata",
+ file_names=[
+ "v2_Questions_Train_mscoco.zip",
+ "v2_Questions_Val_mscoco.zip",
+ "v2_Questions_Test_mscoco.zip",
+ "v2_Annotations_Train_mscoco.zip",
+ "v2_Annotations_Val_mscoco.zip",
+ ],
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+ organise_dataset.submit(
+ description="Extracting images",
+ file_names=["train2017.zip", "val2017.zip", "test2017.zip"],
+ output_dir=settings.paths.vqa_v2_images,
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_ego4d(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the annotation files from Ego4D."""
+ # first create a folder for the annotations
+ settings.paths.ego4d_annotations.mkdir(parents=True, exist_ok=True)
+
+ for annotation_file in settings.paths.ego4d.iterdir():
+ if annotation_file.is_file():
+ destination_path = settings.paths.ego4d_annotations.joinpath(annotation_file.name)
+
+ shutil.move(annotation_file, destination_path)
+
+
+@app.command()
+def organise_refcoco(pool: ThreadPoolExecutor, progress: Progress) -> None:
+ """Extract and organise the annotation files from RefCOCOg."""
+ organise_dataset = OrganiseDataset(settings.paths.refcoco, DatasetName.refcoco)
+
+ organise_dataset.submit(
+ description="Extracting metadata",
+ file_names=[
+ "refcocog.zip",
+ ],
+ pool=pool,
+ progress=progress,
+ move_files_to_output_dir=True,
+ )
+
+
+def organise_datasets(
+ datasets: Optional[list[DatasetName]] = typer.Argument( # noqa: WPS404
+ None, case_sensitive=False, show_default=False
+ ),
+ num_threads: Optional[int] = typer.Option( # noqa: WPS404
+ None,
+ help="Number of threads to use for parallel processing. This default to `min(32, os.cpu_count() + 4).",
+ ),
+) -> None:
+ """Organise the datasets in the storage folder.
+
+ This is going to take a while because of how many files there are, the size of them, and the
+ fact that we're limited to using multithreading instead of multiprocessing.
+ """
+ switcher: dict[DatasetName, Callable[[ThreadPoolExecutor, Progress], None]] = {
+ DatasetName.coco: organise_coco,
+ DatasetName.visual_genome: organise_visual_genome,
+ DatasetName.gqa: organise_gqa,
+ DatasetName.epic_kitchens: organise_epic_kitchens,
+ DatasetName.alfred: organise_alfred,
+ DatasetName.teach: organise_teach,
+ DatasetName.nlvr: organise_nlvr,
+ DatasetName.vqa_v2: organise_vqa_v2,
+ DatasetName.ego4d: organise_ego4d,
+ DatasetName.refcoco: organise_refcoco,
+ }
+
+ progress_bar = Progress(
+ TextColumn("[white]{task.fields[dataset_name]}", justify="left"),
+ TextColumn("[bold yellow][progress.description]{task.description}", justify="right"),
+ BarColumn(),
+ BatchesProcessedColumn(),
+ CustomTimeColumn(),
+ TextColumn("[bright_black i]{task.fields[comment]}[/]"),
+ )
+
+ if not datasets:
+ progress_bar.console.log("No datasets provided, therefore organising all datasets...")
+ datasets = list(DatasetName)
+
+ with progress_bar:
+ with ThreadPoolExecutor(max_workers=num_threads) as pool:
+ for dataset_name in datasets:
+ switcher[dataset_name](pool, progress_bar)
+
+
+if __name__ == "__main__":
+ app()
diff --git a/src/emma_datasets/common/__init__.py b/src/emma_datasets/common/__init__.py
new file mode 100644
index 0000000..5f3e23f
--- /dev/null
+++ b/src/emma_datasets/common/__init__.py
@@ -0,0 +1,9 @@
+from emma_datasets.common.downloader import Downloader
+from emma_datasets.common.logger import get_logger, use_rich_for_logging
+from emma_datasets.common.progress import (
+ BatchesProcessedColumn,
+ CustomTimeColumn,
+ ProcessingSpeedColumn,
+ get_progress,
+)
+from emma_datasets.common.settings import Settings
diff --git a/src/emma_datasets/common/downloader.py b/src/emma_datasets/common/downloader.py
new file mode 100644
index 0000000..221da65
--- /dev/null
+++ b/src/emma_datasets/common/downloader.py
@@ -0,0 +1,375 @@
+import itertools
+import logging
+import signal
+import time
+from collections.abc import Iterable, Iterator, Sized
+from concurrent.futures import ThreadPoolExecutor
+from dataclasses import dataclass
+from pathlib import Path
+from threading import Event
+from typing import Any, Optional, TypedDict, Union, cast
+from urllib.parse import ParseResult, parse_qs, urlparse
+
+import boto3
+import requests
+from datasets import load_dataset
+from datasets.utils.file_utils import get_datasets_user_agent
+from rich.console import Console, Group, RenderableType
+from rich.live import Live
+from rich.panel import Panel
+from rich.progress import (
+ BarColumn,
+ DownloadColumn,
+ MofNCompleteColumn,
+ Progress,
+ TaskID,
+ TextColumn,
+ TransferSpeedColumn,
+)
+
+from emma_datasets.common.progress import CustomTimeColumn
+from emma_datasets.common.settings import Settings
+
+
+settings = Settings()
+
+overall_progress = Progress(
+ "[progress.description]{task.description}",
+ BarColumn(),
+ MofNCompleteColumn(),
+ CustomTimeColumn(),
+)
+
+overall_task = overall_progress.add_task("Download files")
+
+job_progress = Progress(
+ TextColumn("[bold blue]{task.fields[filename]}", justify="left"),
+ BarColumn(),
+ "[progress.percentage]{task.percentage:>3.1f}%",
+ DownloadColumn(),
+ TransferSpeedColumn(),
+ CustomTimeColumn(),
+)
+
+
+# Without this, boto print so many logs, it crashes the terminal.
+logging.getLogger("boto3").setLevel(logging.CRITICAL)
+logging.getLogger("botocore").setLevel(logging.CRITICAL)
+logging.getLogger("nose").setLevel(logging.CRITICAL)
+logging.getLogger("s3transfer").setLevel(logging.CRITICAL)
+logging.getLogger("urllib3").setLevel(logging.CRITICAL)
+
+done_event = Event()
+
+USER_AGENT = get_datasets_user_agent()
+
+
+def handle_sigint(signum: int, frame: Any) -> None:
+ """Handle SIGINT signal."""
+ done_event.set()
+
+
+TIME_STR = time.strftime("%Y%m%d-%H%M%S")
+LOG_NAME = f"logs/downloader_{TIME_STR}.log"
+
+HUGGINGFACE_URL_SCHEME = "hf"
+
+
+@dataclass
+class DownloadItem:
+ """Class that represents an item to be downloaded."""
+
+ output_path: Path
+ url: str
+
+
+@dataclass
+class DownloadList:
+ """Represents a generic list of items to be downloaded."""
+
+ item_list: Iterator[DownloadItem]
+ count: int
+
+
+class DataDict(TypedDict):
+ """A dataset to be downloaded."""
+
+ url: str
+ dataset: str
+
+
+class Downloader:
+ """Downloader files as fast as possible."""
+
+ def __init__(self, log_file_path: str = LOG_NAME, chunk_size: int = 32768) -> None:
+ self._log_file = Path(log_file_path)
+ self._chunk_size = chunk_size
+
+ self._create_log_file()
+
+ signal.signal(signal.SIGINT, handle_sigint)
+
+ def download(
+ self, data_dicts: list[DataDict], output_dir: Path, max_workers: Optional[int] = None
+ ) -> None:
+ """Download a list of URLs to a specific directory from a set of datasets.
+
+ The downloads happen in parallel across multiple workers, so set the `max_workers` argument
+ if you do NOT want to use the maximum your machine can handle.
+ """
+ download_list = self._get_urls_from_data_dicts(data_dicts, output_dir)
+
+ overall_progress.reset(overall_task, total=download_list.count)
+
+ with self._display_progress():
+ with ThreadPoolExecutor(max_workers=max_workers) as thread_pool:
+ thread_pool.map(self.download_file, download_list.item_list)
+
+ def download_file(self, data_item: DownloadItem) -> None:
+ """Download the file to the specified directory.
+
+ It will create the output directory if it does not exist.
+ """
+ url = data_item.url
+ data_item.output_path.mkdir(parents=True, exist_ok=True)
+
+ filename = url.split("/")[-1]
+ filename = filename.split("?")[0]
+
+ dest_path = data_item.output_path.joinpath(filename)
+ task_id = job_progress.add_task(
+ "download",
+ filename=filename,
+ visible=False,
+ start=False,
+ )
+
+ if url.startswith("s3"):
+ download_func = self.download_from_s3
+ else:
+ download_func = self.download_from_url
+
+ return download_func(task_id, url, dest_path)
+
+ def download_from_s3(self, task_id: TaskID, url: str, path: Path) -> None:
+ """Download file from a s3 bucket."""
+ parsed_url = urlparse(url, allow_fragments=False)
+ bucket_name = parsed_url.netloc
+ object_key = parsed_url.path.lstrip("/")
+
+ s3 = boto3.client("s3")
+
+ is_directory = False
+ if object_key.endswith("/"):
+ # this URL points to a directory -- recursively download all the files
+ raw_object_list = s3.list_objects(Bucket=bucket_name, Prefix=object_key)
+ is_directory = True
+ object_list = [raw_object["Key"] for raw_object in raw_object_list["Contents"]]
+ else:
+ object_list = [object_key]
+
+ for object_id in object_list: # noqa: WPS426
+ file_size: int = s3.get_object_attributes(
+ Bucket=bucket_name,
+ Key=object_id,
+ ObjectAttributes=["ObjectSize"],
+ )["ObjectSize"]
+ if is_directory:
+ filename = path.joinpath(Path(object_id).name)
+ else:
+ filename = path
+
+ job_progress.update(task_id, total=file_size)
+
+ if not filename.exists() or filename.stat().st_size < file_size:
+ job_progress.start_task(task_id)
+ job_progress.update(task_id, visible=True)
+
+ s3.download_file(
+ Bucket=bucket_name,
+ Key=object_id,
+ Filename=filename.as_posix(),
+ Callback=lambda x: job_progress.update(task_id, advance=x),
+ )
+
+ job_progress.reset(task_id)
+
+ self._complete_download(task_id, path.name)
+
+ def download_from_url(self, task_id: TaskID, url: str, path: Path) -> None:
+ """Copy data from a url to a local file."""
+ if done_event.is_set():
+ self._handle_abort_event(task_id, path.name)
+ return
+
+ try:
+ with requests.get(
+ url,
+ headers={"User-Agent": USER_AGENT},
+ allow_redirects=True,
+ timeout=5,
+ stream=True,
+ ) as response:
+ content_length = self._get_content_length_from_response(response)
+ content_type = self._get_content_type_from_response(response)
+ if not path.suffix and content_type == "image/jpeg":
+ # if we're missing the extension for a JPEG file we add it here
+ path = path.with_suffix(".jpg")
+ job_progress.update(task_id, total=content_length)
+
+ if not path.exists() or path.stat().st_size < content_length:
+ self._store_data(response, path, task_id)
+
+ self._complete_download(task_id, path.name)
+
+ except requests.exceptions.Timeout:
+ self._log_file.write_text(
+ f"[Timeout]: Unable to download data from URL because timed out after 5 seconds: {url}"
+ )
+ except requests.exceptions.TooManyRedirects:
+ self._log_file.write_text(
+ f"[TooManyRedirects]: Unable to download data from URL: {url}"
+ )
+ except requests.exceptions.RequestException:
+ self._log_file.write_text(
+ f"[RequestException]: Unable to download data from URL: {url}"
+ )
+
+ def _store_data(self, response: requests.Response, path: Path, task_id: TaskID) -> None:
+ """Stores the data returned with an HTTP response."""
+ with open(path, "wb") as dest_file:
+ job_progress.start_task(task_id)
+
+ for data in response.iter_content(self._chunk_size):
+ if done_event.is_set():
+ self._handle_abort_event(task_id, path.name)
+ return
+
+ dest_file.write(data)
+ job_progress.update(task_id, advance=len(data), visible=True)
+
+ def _get_urls_from_hf_dataset(
+ self, parsed_url: ParseResult, dataset_name: str, output_dir: Path
+ ) -> tuple[Iterator[DownloadItem], int]:
+ """Given an Huggingface dataset URL, derive a sequence of URLs that can be downloaded.
+
+ We define an Huggingface dataset by adopting a specific URL format that is structured as
+ follows:
+
+ `hf://?key=&split=`
+
+ where:
+ - ``: Huggingface dataset identifier
+ - ``: field of the dataset containing the URL
+ - ``: reference split of the dataset (depending on the release)
+
+ Args:
+ parsed_url (ParseResult): Reference URL for Huggingface dataset
+ dataset_name (str): Huggingface dataset idenfier
+ output_dir (Path): reference directory for the dataset
+
+ Returns:
+ tuple[Iterator[DownloadItem], int]: iterator of downloadable items with a possible
+ count. The count is available only if the dataset is not Iterable.
+ """
+ query_params = parse_qs(parsed_url.query)
+ item_key = query_params["key"][0]
+ split = query_params["split"][0]
+ dataset = load_dataset(dataset_name, split=split)
+
+ data_iterator = (
+ DownloadItem(
+ output_path=output_dir.joinpath(split),
+ url=data_item[item_key],
+ )
+ for data_item in dataset
+ )
+
+ data_count = len(dataset) if isinstance(dataset, Sized) else 0
+
+ return data_iterator, data_count
+
+ def _get_urls_from_data_dicts(
+ self, data_dicts: list[DataDict], output_dir: Path
+ ) -> DownloadList:
+ """Returns a list of URLs that can be downloaded in parallel.
+
+ Most of the datasets have specific archives or files that contain the dataset annotations.
+ The only exception is Huggingface for which we have a datasets object.
+ """
+ data_items: list[Iterable[DownloadItem]] = []
+ count = 0
+
+ for dict_item in data_dicts:
+ url = dict_item["url"]
+ dataset_name = dict_item["dataset"]
+
+ parsed_url = urlparse(url)
+ output_path = output_dir.joinpath(dataset_name)
+
+ if parsed_url.scheme == HUGGINGFACE_URL_SCHEME:
+ data_iterator, data_count = self._get_urls_from_hf_dataset(
+ parsed_url, dataset_name, output_path
+ )
+ data_items.append(data_iterator)
+
+ count += data_count
+
+ else:
+ data_items.append([DownloadItem(output_path=output_path, url=url)])
+ count += 1
+
+ return DownloadList(item_list=itertools.chain.from_iterable(data_items), count=count)
+
+ def _complete_download(self, task_id: TaskID, file_name: str) -> None:
+ """Complete the download and update the progress bars."""
+ job_progress.update(task_id, visible=False)
+ overall_progress.console.log(f"Downloaded {file_name}")
+
+ overall_progress.advance(overall_task)
+
+ self._update_log_file(file_name)
+
+ def _handle_abort_event(self, task_id: TaskID, filename: str) -> None:
+ """Stop the task and prevent any new ones from starting."""
+ self._update_log_file(filename, "Aborted")
+ job_progress.stop_task(task_id)
+
+ if job_progress.tasks[task_id].completed < 1:
+ job_progress.update(task_id, visible=False)
+
+ def _create_log_file(self) -> None:
+ """Create the log file using Rich Console API."""
+ with open(self._log_file, "w") as log_file:
+ console = Console(file=log_file)
+ console.rule("Starting download")
+
+ def _update_log_file(self, path: str, verb: str = "Downloaded") -> None:
+ """Update the log file using Rich Console API."""
+ with open(self._log_file, "a") as log_file:
+ console = Console(file=log_file)
+ console.log(f"{verb} {path}")
+
+ def _get_content_length_from_response(self, response: requests.Response) -> Union[int, float]:
+ """Get content length from response."""
+ content_length = response.headers.get(
+ "X-Dropbox-Content-Length", response.headers.get("Content-Length")
+ )
+
+ return int(content_length) if content_length is not None else float("inf")
+
+ def _get_content_type_from_response(self, response: requests.Response) -> str:
+ """Get content type from HTTP response."""
+ return response.headers["Content-Type"]
+
+ def _display_progress(self) -> Live:
+ """Return a rich `Live` object to display the progress bars.
+
+ This should be used as a context manager.
+ """
+ progress_group = Group(
+ cast(RenderableType, overall_progress),
+ Panel(cast(RenderableType, job_progress)),
+ )
+
+ return Live(progress_group)
diff --git a/src/emma_datasets/common/helpers/__init__.py b/src/emma_datasets/common/helpers/__init__.py
new file mode 100644
index 0000000..e9a75a9
--- /dev/null
+++ b/src/emma_datasets/common/helpers/__init__.py
@@ -0,0 +1 @@
+from emma_datasets.common.helpers.object_manipulation import flip_list_map_elements
diff --git a/src/emma_datasets/common/helpers/object_manipulation.py b/src/emma_datasets/common/helpers/object_manipulation.py
new file mode 100644
index 0000000..581492d
--- /dev/null
+++ b/src/emma_datasets/common/helpers/object_manipulation.py
@@ -0,0 +1,19 @@
+import itertools
+from typing import TypeVar
+
+
+S = TypeVar("S")
+T = TypeVar("T")
+
+
+def flip_list_map_elements(previous_map: dict[S, list[T]]) -> dict[T, list[S]]:
+ """Flip a mapping of elements to a list by using the list elements as keys."""
+ all_value_elements = set(itertools.chain.from_iterable(previous_map.values()))
+
+ newly_mapped_elements: dict[T, list[S]] = {element: [] for element in all_value_elements}
+
+ for previous_key, previous_value_list in previous_map.items():
+ for new_key in previous_value_list:
+ newly_mapped_elements[new_key].append(previous_key)
+
+ return newly_mapped_elements
diff --git a/src/emma_datasets/common/logger.py b/src/emma_datasets/common/logger.py
new file mode 100644
index 0000000..b6cf43c
--- /dev/null
+++ b/src/emma_datasets/common/logger.py
@@ -0,0 +1,20 @@
+import logging
+from typing import Optional
+
+from rich.logging import RichHandler
+
+
+def use_rich_for_logging() -> None:
+ """Use Rich as the main logger."""
+ logging.basicConfig(
+ format="%(message)s", # noqa: WPS323
+ datefmt="[%X]", # noqa: WPS323
+ handlers=[RichHandler(markup=True, rich_tracebacks=True, tracebacks_show_locals=True)],
+ level=logging.INFO,
+ )
+
+
+# Just returns a logger. Useful and important if rich hasn't been called yet.
+def get_logger(name: Optional[str] = None) -> logging.Logger:
+ """Return Rich logger."""
+ return logging.getLogger(name)
diff --git a/src/emma_datasets/common/progress.py b/src/emma_datasets/common/progress.py
new file mode 100644
index 0000000..230f2c9
--- /dev/null
+++ b/src/emma_datasets/common/progress.py
@@ -0,0 +1,52 @@
+from datetime import timedelta
+
+from rich.console import RenderableType
+from rich.progress import BarColumn, Progress, ProgressColumn, Task, TextColumn
+from rich.text import Text
+
+
+class CustomTimeColumn(ProgressColumn):
+ """Custom time column, as in Pytorch Lightning."""
+
+ # Only refresh twice a second to prevent jitter
+ max_refresh = 0.5
+
+ def render(self, task: Task) -> Text:
+ """Render time."""
+ elapsed = task.finished_time if task.finished else task.elapsed
+ remaining = task.time_remaining
+ elapsed_delta = "-:--:--" if elapsed is None else str(timedelta(seconds=int(elapsed)))
+ remaining_delta = (
+ "-:--:--" if remaining is None else str(timedelta(seconds=int(remaining)))
+ )
+ return Text(f"{elapsed_delta} • {remaining_delta}", style="progress.remaining")
+
+
+class BatchesProcessedColumn(ProgressColumn):
+ """Counter for processed."""
+
+ def render(self, task: Task) -> RenderableType:
+ """Render number of processed instances."""
+ total = "--" if task.total == float("inf") else task.total
+ return Text(f"{int(task.completed)}/{total}", style="progress.download")
+
+
+class ProcessingSpeedColumn(ProgressColumn):
+ """Column for processing speed."""
+
+ def render(self, task: Task) -> RenderableType:
+ """Render processing speed."""
+ task_speed = f"{task.speed:>.2f}" if task.speed is not None else "0.00"
+ return Text(f"{task_speed}it/s", style="progress.data.speed")
+
+
+def get_progress() -> Progress:
+ """Get custom progress with support for generators."""
+ return Progress(
+ "[progress.description]{task.description}",
+ BarColumn(),
+ BatchesProcessedColumn(),
+ CustomTimeColumn(),
+ ProcessingSpeedColumn(),
+ TextColumn("[purple]{task.fields[comment]}[/]"),
+ )
diff --git a/src/emma_datasets/common/settings.py b/src/emma_datasets/common/settings.py
new file mode 100644
index 0000000..d786fe4
--- /dev/null
+++ b/src/emma_datasets/common/settings.py
@@ -0,0 +1,120 @@
+from pathlib import Path
+
+from pydantic import BaseSettings
+
+from emma_datasets.constants import constants_absolute_path
+
+
+BASE_DIR = Path("storage/")
+
+
+class Paths: # noqa: WPS230
+ """Dataclass for data paths."""
+
+ def __init__(self, base_dir: Path = BASE_DIR) -> None:
+ self.storage = base_dir
+
+ # Temp directories
+ self.temp = self.storage.joinpath("temp/")
+
+ self.captions = self.temp.joinpath("captions/")
+ self.qa_pairs = self.temp.joinpath("qa_pairs/")
+ self.scene_graphs = self.temp.joinpath("scene_graphs/")
+ self.regions = self.temp.joinpath("regions/")
+ self.trajectories = self.temp.joinpath("trajectories/")
+ self.task_descriptions = self.temp.joinpath("task_descriptions/")
+
+ # Dataset source files
+ self.datasets = self.storage.joinpath("datasets/")
+
+ self.coco = self.datasets.joinpath("coco/")
+ self.visual_genome = self.datasets.joinpath("visual_genome/")
+ self.gqa = self.datasets.joinpath("gqa/")
+ self.epic_kitchens = self.datasets.joinpath("epic_kitchens/")
+ self.alfred = self.datasets.joinpath("alfred/")
+ self.teach = self.datasets.joinpath("teach/")
+ self.nlvr = self.datasets.joinpath("nlvr/")
+ self.vqa_v2 = self.datasets.joinpath("vqa_v2/")
+ self.conceptual_captions = self.datasets.joinpath("cc3m/")
+ self.ego4d = self.datasets.joinpath("ego4d/")
+ self.winoground = self.datasets.joinpath("winoground/")
+ self.refcoco = self.datasets.joinpath("refcoco/")
+ self.simbot = self.datasets.joinpath("simbot/")
+
+ self.ego4d_annotations = self.ego4d.joinpath("v1/annotations/")
+ self.coco_images = self.coco.joinpath("images/")
+ self.visual_genome_images = self.visual_genome.joinpath("images/")
+ self.gqa_images = self.gqa.joinpath("images/")
+ self.gqa_questions = self.gqa.joinpath("questions/")
+ self.gqa_scene_graphs = self.gqa.joinpath("scene_graphs/")
+ self.epic_kitchens_frames = self.epic_kitchens.joinpath("frames/")
+ self.alfred_data = self.alfred.joinpath("full_2.1.0/")
+ self.teach_edh_instances = self.teach.joinpath("edh_instances/")
+ self.nlvr_images = self.nlvr.joinpath("images/")
+ self.vqa_v2_images = self.coco_images
+ self.ego4d_clips = self.ego4d.joinpath("v1/clips/")
+ self.refcoco = self.coco_images
+ self.simbot_images = self.simbot.joinpath("mission_images/")
+
+ self.coco_features = self.coco.joinpath("image_features/")
+ self.visual_genome_features = self.visual_genome.joinpath("image_features/")
+ self.gqa_features = self.gqa.joinpath("image_features/")
+ self.epic_kitchens_features = self.epic_kitchens.joinpath("frame_features/")
+ self.alfred_features = self.alfred.joinpath("frame_features/")
+ self.teach_edh_features = self.teach.joinpath("frame_features/")
+ self.nlvr_features = self.nlvr.joinpath("image_features/")
+ self.vqa_v2_features = self.coco_features
+ self.conceptual_captions_features = self.conceptual_captions.joinpath("image_features/")
+ self.ego4d_features = self.ego4d.joinpath("frame_features")
+ self.refcoco_features = self.coco.joinpath("image_features_forced_bboxes/")
+ self.winoground_features = self.winoground.joinpath("image_features/")
+ self.simbot_features = self.simbot.joinpath("frame_features/")
+
+ # Databases for output
+ self.databases = self.storage.joinpath("db/")
+
+ self.constants = constants_absolute_path
+
+ def create_dirs(self) -> None: # noqa: WPS213
+ """Create directories for files if they do not exist."""
+ self.temp.mkdir(parents=True, exist_ok=True)
+
+ self.captions.mkdir(parents=True, exist_ok=True)
+ self.qa_pairs.mkdir(parents=True, exist_ok=True)
+ self.scene_graphs.mkdir(parents=True, exist_ok=True)
+ self.regions.mkdir(parents=True, exist_ok=True)
+ self.trajectories.mkdir(parents=True, exist_ok=True)
+ self.task_descriptions.mkdir(parents=True, exist_ok=True)
+
+ self.datasets.mkdir(parents=True, exist_ok=True)
+
+ self.coco.mkdir(parents=True, exist_ok=True)
+ self.visual_genome.mkdir(parents=True, exist_ok=True)
+ self.gqa.mkdir(parents=True, exist_ok=True)
+ self.epic_kitchens.mkdir(parents=True, exist_ok=True)
+ self.alfred.mkdir(parents=True, exist_ok=True)
+ self.teach.mkdir(parents=True, exist_ok=True)
+ self.nlvr.mkdir(parents=True, exist_ok=True)
+ self.vqa_v2.mkdir(parents=True, exist_ok=True)
+ self.ego4d.mkdir(parents=True, exist_ok=True)
+ self.winoground.mkdir(parents=True, exist_ok=True)
+ self.refcoco.mkdir(parents=True, exist_ok=True)
+ self.simbot.mkdir(parents=True, exist_ok=True)
+
+ self.coco_images.mkdir(parents=True, exist_ok=True)
+ self.visual_genome_images.mkdir(parents=True, exist_ok=True)
+ self.gqa_images.mkdir(parents=True, exist_ok=True)
+ self.gqa_questions.mkdir(parents=True, exist_ok=True)
+ self.gqa_scene_graphs.mkdir(parents=True, exist_ok=True)
+ self.epic_kitchens_frames.mkdir(parents=True, exist_ok=True)
+ self.alfred_data.mkdir(parents=True, exist_ok=True)
+ self.nlvr_images.mkdir(parents=True, exist_ok=True)
+ self.simbot_images.mkdir(parents=True, exist_ok=True)
+
+ self.databases.mkdir(parents=True, exist_ok=True)
+
+
+class Settings(BaseSettings):
+ """Common settings class for use throughout the repository."""
+
+ paths: Paths = Paths()
diff --git a/src/emma_datasets/constants/__init__.py b/src/emma_datasets/constants/__init__.py
new file mode 100644
index 0000000..db7aa55
--- /dev/null
+++ b/src/emma_datasets/constants/__init__.py
@@ -0,0 +1,4 @@
+from pathlib import Path
+
+
+constants_absolute_path = Path(__file__).parent.resolve()
diff --git a/src/emma_datasets/constants/dataset_downloads.csv b/src/emma_datasets/constants/dataset_downloads.csv
new file mode 100644
index 0000000..80ca092
--- /dev/null
+++ b/src/emma_datasets/constants/dataset_downloads.csv
@@ -0,0 +1,740 @@
+dataset,url
+sbu_captions,hf://sbu_captions?key=image_url&split=train
+conceptual_captions,hf://conceptual_captions?key=image_url&split=train
+conceptual_captions,hf://conceptual_captions?key=image_url&split=validation
+nlvr,https://github.com/lil-lab/nlvr/raw/master/nlvr2/data/train.json
+nlvr,https://github.com/lil-lab/nlvr/raw/master/nlvr2/data/balanced/balanced_dev.json
+nlvr,https://github.com/lil-lab/nlvr/raw/master/nlvr2/data/balanced/balanced_test1.json
+nlvr,https://lil.nlp.cornell.edu/resources/NLVR2/train_img.zip
+nlvr,https://lil.nlp.cornell.edu/resources/NLVR2/dev_img.zip
+nlvr,https://lil.nlp.cornell.edu/resources/NLVR2/test1_img.zip
+coco,http://images.cocodataset.org/zips/train2017.zip
+coco,http://images.cocodataset.org/zips/val2017.zip
+coco,http://images.cocodataset.org/annotations/annotations_trainval2017.zip
+visual_genome,http://visualgenome.org/static/data/dataset/region_descriptions.json.zip
+visual_genome,http://visualgenome.org/static/data/dataset/image_data.json.zip
+visual_genome,https://cs.stanford.edu/people/rak248/VG_100K_2/images.zip
+visual_genome,https://cs.stanford.edu/people/rak248/VG_100K_2/images2.zip
+gqa,https://downloads.cs.stanford.edu/nlp/data/gqa/sceneGraphs.zip
+gqa,https://downloads.cs.stanford.edu/nlp/data/gqa/questions1.2.zip
+gqa,https://downloads.cs.stanford.edu/nlp/data/gqa/images.zip
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P01/rgb_frames/P01_108.tar
+epic_kitchens,https://www.dropbox.com/s/mh7y0goc5x945nu/P01_109.tar?dl=1
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P01/P01_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P01/P01_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P01/P01_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P01/P01_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P01/P01_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P01/P01_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P02/P02_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_118.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_119.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P02/P02_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_120.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_121.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_122.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_123.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_124.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_125.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_126.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_127.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_128.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_129.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P02/P02_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_130.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_131.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_132.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_133.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_134.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_135.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_136.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P02/rgb_frames/P02_137.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P02/P02_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P02/P02_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_118.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_119.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_120.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_121.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_122.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P03/rgb_frames/P03_123.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_20.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P03/P03_21.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P03/P03_22.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P03/P03_23.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P03/P03_24.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P03/P03_25.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P03/P03_26.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_27.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P03/P03_28.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_118.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_119.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_120.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_121.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_122.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P04/rgb_frames/P04_123.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_20.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_21.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_22.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P04/P04_23.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_24.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_25.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_26.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_27.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_28.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_29.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_30.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_31.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_32.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P04/P04_33.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P05/P05_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P05/P05_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P05/P05_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P06/P06_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P06/P06_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P06/P06_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P06/rgb_frames/P06_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P06/P06_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P06/P06_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P06/P06_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P07/P07_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P07/rgb_frames/P07_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P07/P07_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P08/P08_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P08/P08_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P08/P08_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P08/P08_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P08/P08_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P08/P08_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_20.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_21.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_22.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_23.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_24.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_25.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_26.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_27.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P08/P08_28.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P09/P09_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P09/rgb_frames/P09_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P09/rgb_frames/P09_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P09/rgb_frames/P09_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P09/rgb_frames/P09_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P09/rgb_frames/P09_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P09/rgb_frames/P09_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P10/P10_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P10/P10_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P10/P10_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P10/P10_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P11/rgb_frames/P11_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_20.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_21.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_22.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_23.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P11/P11_24.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P12/P12_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P12/P12_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P12/P12_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P12/P12_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P12/P12_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P12/P12_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P12/P12_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P12/P12_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P12/rgb_frames/P12_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P12/rgb_frames/P12_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P12/rgb_frames/P12_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P12/rgb_frames/P12_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P12/rgb_frames/P12_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P13/P13_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P13/P13_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P13/P13_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P13/P13_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P14/P14_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P14/P14_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P14/P14_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P15/P15_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P15/P15_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P15/P15_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P15/P15_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P16/P16_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P16/P16_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P16/P16_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P16/P16_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P17/P17_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P17/P17_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P17/P17_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P17/P17_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P18/P18_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P19/P19_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P19/P19_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P19/P19_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P19/P19_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P19/P19_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P19/P19_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P20/P20_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P20/P20_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P20/P20_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P20/P20_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P20/P20_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P20/P20_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P20/P20_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P21/P21_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P21/P21_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P21/P21_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P21/P21_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P22/P22_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P22/P22_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P22/P22_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P22/P22_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P22/rgb_frames/P22_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P22/P22_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P23/P23_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P23/P23_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P23/P23_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P23/P23_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P23/P23_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P23/rgb_frames/P23_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P23/rgb_frames/P23_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P23/rgb_frames/P23_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P24/P24_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P24/P24_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P25/P25_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P25/P25_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P25/P25_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P25/rgb_frames/P25_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P25/P25_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_118.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_119.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_120.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_121.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_122.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_123.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P26/rgb_frames/P26_124.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_20.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_21.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_22.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_23.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_24.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_25.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_26.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_27.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_28.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P26/P26_29.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_30.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_31.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_32.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_33.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_34.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_35.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_36.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_37.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_38.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_39.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_40.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P26/P26_41.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P27/P27_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P27/P27_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P27/P27_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P27/P27_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P27/P27_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P27/P27_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P27/P27_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P27/rgb_frames/P27_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P27/rgb_frames/P27_102.tar
+epic_kitchens,https://www.dropbox.com/s/c1eo70v6dokr6cf/P27_103.tar?dl=1
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P27/rgb_frames/P27_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P27/rgb_frames/P27_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_115.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_116.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_117.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P28/rgb_frames/P28_118.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P28/P28_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_15.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_16.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_17.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_18.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_19.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_20.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_21.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_22.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_23.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_24.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_25.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P28/P28_26.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P29/P29_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P29/P29_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P29/P29_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P29/P29_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P29/P29_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P29/P29_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P30/P30_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P30/P30_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P30/P30_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P30/P30_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P30/rgb_frames/P30_114.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P31/P31_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P31/P31_11.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P31/P31_12.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_13.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/train/P31/P31_14.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_01.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_02.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_03.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_04.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_05.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_06.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_07.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_08.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_09.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/3h91syskeag572hl6tvuovwv4d/frames_rgb_flow/rgb/test/P32/P32_10.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P33/rgb_frames/P33_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_110.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_111.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_112.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P34/rgb_frames/P34_113.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_103.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_104.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_105.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_106.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_107.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_108.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P35/rgb_frames/P35_109.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P36/rgb_frames/P36_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P36/rgb_frames/P36_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P37/rgb_frames/P37_101.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P37/rgb_frames/P37_102.tar
+epic_kitchens,https://data.bris.ac.uk/datasets/2g1n6qdydwa9u22shpxqzp0t8m/P37/rgb_frames/P37_103.tar
+epic_kitchens,https://raw.githubusercontent.com/epic-kitchens/epic-kitchens-100-annotations/master/EPIC_100_train.csv
+epic_kitchens,https://raw.githubusercontent.com/epic-kitchens/epic-kitchens-100-annotations/master/EPIC_100_validation.csv
+epic_kitchens,https://raw.githubusercontent.com/epic-kitchens/epic-kitchens-100-annotations/master/EPIC_100_video_info.csv
+alfred,https://ai2-vision-alfred.s3-us-west-2.amazonaws.com/json_2.1.0.7z
+alfred,https://ai2-vision-alfred.s3-us-west-2.amazonaws.com/full_2.1.0.7z
+teach,s3://teach-dataset/all_games.tar.gz
+teach,s3://teach-dataset/edh_instances.tar.gz
+teach,s3://teach-dataset/experiment_games.tar.gz
+teach,s3://teach-dataset/images_and_states.tar.gz
+teach,https://raw.githubusercontent.com/alexa/teach/main/src/teach/meta_data_files/divided_split/edh_instances/divided_val_seen.txt
+teach,https://raw.githubusercontent.com/alexa/teach/main/src/teach/meta_data_files/divided_split/edh_instances/divided_test_seen.txt
+teach,https://raw.githubusercontent.com/alexa/teach/main/src/teach/meta_data_files/divided_split/edh_instances/divided_val_unseen.txt
+teach,https://raw.githubusercontent.com/alexa/teach/main/src/teach/meta_data_files/divided_split/edh_instances/divided_test_unseen.txt
+vqa_v2,https://s3.amazonaws.com/cvmlp/vqa/mscoco/vqa/v2_Questions_Train_mscoco.zip
+vqa_v2,https://s3.amazonaws.com/cvmlp/vqa/mscoco/vqa/v2_Annotations_Train_mscoco.zip
+vqa_v2,https://s3.amazonaws.com/cvmlp/vqa/mscoco/vqa/v2_Questions_Val_mscoco.zip
+vqa_v2,https://s3.amazonaws.com/cvmlp/vqa/mscoco/vqa/v2_Annotations_Val_mscoco.zip
+vqa_v2,https://s3.amazonaws.com/cvmlp/vqa/mscoco/vqa/v2_Questions_Test_mscoco.zip
+ego4d,s3://emma-simbot/datasets/ego4d/v1/annotations/
+refcoco, https://bvisionweb1.cs.unc.edu/licheng/referit/data/refcocog.zip
diff --git a/src/emma_datasets/constants/simbot/ObjectManifest.json b/src/emma_datasets/constants/simbot/ObjectManifest.json
new file mode 100644
index 0000000..30733a2
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/ObjectManifest.json
@@ -0,0 +1,7905 @@
+{
+ "ActionFigure": {
+ "ObjectID": "ActionFigure",
+ "ObjectName": "ActionFigure",
+ "ReadableName": "Action Figure",
+ "Description": "An action figure",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "880fd42012f5f4846ae6d156eb832b7e",
+ "ObjectSalientProperties": ["Small"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.3254826, "y": 0.5874163, "z": 0.156518847 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "Apple": {
+ "ObjectID": "Apple",
+ "ObjectName": "Apple",
+ "ReadableName": "Apple",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "bcbdc52d16ea73c4bb23219a41fd5bb8",
+ "ObjectSalientProperties": ["Round"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.148952708, "y": 0.166814059, "z": 0.148952782 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AppleSlice_01": {
+ "ObjectID": "AppleSlice_01",
+ "ObjectName": "AppleSlice_01",
+ "ReadableName": "Apple Slice",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "9e63f054dbb42ab4f83c323835cba4da",
+ "ObjectSalientProperties": ["Small"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.06319903, "y": 0.110455193, "z": 0.06432065 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Bld_Ceiling_Aircon_01": {
+ "ObjectID": "AP_Bld_Ceiling_Aircon_01",
+ "ObjectName": "AP_Bld_Ceiling_Aircon_01",
+ "ReadableName": "Vent",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Bld_Wall_Glass_Large_Door_01": {
+ "ObjectID": "AP_Bld_Wall_Glass_Large_Door_01",
+ "ObjectName": "AP_Bld_Wall_Glass_Large_Door_01",
+ "ReadableName": "Glass Doors",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Item_Tape_01": {
+ "ObjectID": "AP_Item_Tape_01",
+ "ObjectName": "AP_Item_Tape_01",
+ "ReadableName": "Tape",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Item_Tool_Board": {
+ "ObjectID": "AP_Item_Tool_Board",
+ "ObjectName": "AP_Item_Tool_Board",
+ "ReadableName": "Tool Board",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Barrel_Open_01": {
+ "ObjectID": "AP_Prop_Barrel_Open_01",
+ "ObjectName": "AP_Prop_Barrel_Open_01",
+ "ReadableName": "Water Barrel",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Barrel_Water_01": {
+ "ObjectID": "AP_Prop_Barrel_Water_01",
+ "ObjectName": "AP_Prop_Barrel_Water_01",
+ "ReadableName": "Water Barrel",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Bin_Rubbish_01": {
+ "ObjectID": "AP_Prop_Bin_Rubbish_01",
+ "ObjectName": "AP_Prop_Bin_Rubbish_01",
+ "ReadableName": "Trash",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Bucket_02": {
+ "ObjectID": "AP_Prop_Bucket_02",
+ "ObjectName": "AP_Prop_Bucket_02",
+ "ReadableName": "Trash Can",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Cabinets_01": {
+ "ObjectID": "AP_Prop_Cabinets_01",
+ "ObjectName": "AP_Prop_Cabinets_01",
+ "ReadableName": "Cabinet",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_CardboardBox_Open_05": {
+ "ObjectID": "AP_Prop_CardboardBox_Open_05",
+ "ObjectName": "AP_Prop_CardboardBox_Open_05",
+ "ReadableName": "Cardboard Box",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_CardboardBox_Stack_02": {
+ "ObjectID": "AP_Prop_CardboardBox_Stack_02",
+ "ObjectName": "AP_Prop_CardboardBox_Stack_02",
+ "ReadableName": "Cardboard Boxes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Cellotape_01": {
+ "ObjectID": "AP_Prop_Cellotape_01",
+ "ObjectName": "AP_Prop_Cellotape_01",
+ "ReadableName": "Tape",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_CorkBoard_02": {
+ "ObjectID": "AP_Prop_CorkBoard_02",
+ "ObjectName": "AP_Prop_CorkBoard_02",
+ "ReadableName": "Cork Board",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Couch_02": {
+ "ObjectID": "AP_Prop_Couch_02",
+ "ObjectName": "AP_Prop_Couch_02",
+ "ReadableName": "Couch",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Couch_06": {
+ "ObjectID": "AP_Prop_Couch_06",
+ "ObjectName": "AP_Prop_Couch_06",
+ "ReadableName": "Chair",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Desk_Blue": {
+ "ObjectID": "AP_Prop_Desk_Blue",
+ "ObjectName": "AP_Prop_Desk_Blue",
+ "ReadableName": "Desk",
+ "Description": "A blue wooden desk",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "c453a4b115771da46ada252cc7374719",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Blue"],
+ "ObjectSize": { "x": 1.95805478, "y": 0.75, "z": 0.884768069 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Desk_Green": {
+ "ObjectID": "AP_Prop_Desk_Green",
+ "ObjectName": "AP_Prop_Desk_Green",
+ "ReadableName": "Desk",
+ "Description": "A green wooden desk",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "fc57999579b6d91458837f249295fd4c",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Green"],
+ "ObjectSize": { "x": 1.95805478, "y": 0.75, "z": 0.884768069 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Desk_Green_model": {
+ "ObjectID": "AP_Prop_Desk_Green_model",
+ "ObjectName": "AP_Prop_Desk_Green_model",
+ "ReadableName": "Desk",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Desk_Red": {
+ "ObjectID": "AP_Prop_Desk_Red",
+ "ObjectName": "AP_Prop_Desk_Red",
+ "ReadableName": "Desk",
+ "Description": "A red wooden desk",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "d0979c940bf45f44dba23e7998540322",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 1.95805478, "y": 0.75, "z": 0.884768069 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Desk_Red_model": {
+ "ObjectID": "AP_Prop_Desk_Red_model",
+ "ObjectName": "AP_Prop_Desk_Red_model",
+ "ReadableName": "Desk",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Desk_Yellow": {
+ "ObjectID": "AP_Prop_Desk_Yellow",
+ "ObjectName": "AP_Prop_Desk_Yellow",
+ "ReadableName": "Desk",
+ "Description": "A yellow wooden desk",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "58bdb689f1fc5184a925307351b6810b",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 1.95805478, "y": 0.75, "z": 0.884768069 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Fire_Extinguisher_01": {
+ "ObjectID": "AP_Prop_Fire_Extinguisher_01",
+ "ObjectName": "AP_Prop_Fire_Extinguisher_01",
+ "ReadableName": "Fire Extinguisher",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Folder_PVC_02": {
+ "ObjectID": "AP_Prop_Folder_PVC_02",
+ "ObjectName": "AP_Prop_Folder_PVC_02",
+ "ReadableName": "Folders",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Generator_Large_02": {
+ "ObjectID": "AP_Prop_Generator_Large_02",
+ "ObjectName": "AP_Prop_Generator_Large_02",
+ "ReadableName": "Generator",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Lab_Clamp_02_Arm_01": {
+ "ObjectID": "AP_Prop_Lab_Clamp_02_Arm_01",
+ "ObjectName": "AP_Prop_Lab_Clamp_02_Arm_01",
+ "ReadableName": "Clamp",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Lab_MachinePanel_01": {
+ "ObjectID": "AP_Prop_Lab_MachinePanel_01",
+ "ObjectName": "AP_Prop_Lab_MachinePanel_01",
+ "ReadableName": "Machine Panel",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Lab_MachinePanel_02": {
+ "ObjectID": "AP_Prop_Lab_MachinePanel_02",
+ "ObjectName": "AP_Prop_Lab_MachinePanel_02",
+ "ReadableName": "Machine Panel",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Lab_Tank_01": {
+ "ObjectID": "AP_Prop_Lab_Tank_01",
+ "ObjectName": "AP_Prop_Lab_Tank_01",
+ "ReadableName": "Tank",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Lab_Tank_02": {
+ "ObjectID": "AP_Prop_Lab_Tank_02",
+ "ObjectName": "AP_Prop_Lab_Tank_02",
+ "ReadableName": "Tank",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Minigolf_Ball_01": {
+ "ObjectID": "AP_Prop_Minigolf_Ball_01",
+ "ObjectName": "AP_Prop_Minigolf_Ball_01",
+ "ReadableName": "Golf Ball",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Minigolf_Club_01": {
+ "ObjectID": "AP_Prop_Minigolf_Club_01",
+ "ObjectName": "AP_Prop_Minigolf_Club_01",
+ "ReadableName": "Golf Club",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Note_05": {
+ "ObjectID": "AP_Prop_Note_05",
+ "ObjectName": "AP_Prop_Note_05",
+ "ReadableName": "Sticky Notes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_PaperTray_01_Full_01": {
+ "ObjectID": "AP_Prop_PaperTray_01_Full_01",
+ "ObjectName": "AP_Prop_PaperTray_01_Full_01",
+ "ReadableName": "Paper Tray",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Pen_01": {
+ "ObjectID": "AP_Prop_Pen_01",
+ "ObjectName": "AP_Prop_Pen_01",
+ "ReadableName": "Pen",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Pen_03": {
+ "ObjectID": "AP_Prop_Pen_03",
+ "ObjectName": "AP_Prop_Pen_03",
+ "ReadableName": "Pen",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Pen_06": {
+ "ObjectID": "AP_Prop_Pen_06",
+ "ObjectName": "AP_Prop_Pen_06",
+ "ReadableName": "Pen",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Photocopier_01": {
+ "ObjectID": "AP_Prop_Photocopier_01",
+ "ObjectName": "AP_Prop_Photocopier_01",
+ "ReadableName": "Photocopier",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Plant_01": {
+ "ObjectID": "AP_Prop_Plant_01",
+ "ObjectName": "AP_Prop_Plant_01",
+ "ReadableName": "Plant",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Plant_09": {
+ "ObjectID": "AP_Prop_Plant_09",
+ "ObjectName": "AP_Prop_Plant_09",
+ "ReadableName": "Plant",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Print_Tube_01": {
+ "ObjectID": "AP_Prop_Print_Tube_01",
+ "ObjectName": "AP_Prop_Print_Tube_01",
+ "ReadableName": "Print Tube",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Safety_Barrier_02": {
+ "ObjectID": "AP_Prop_Safety_Barrier_02",
+ "ObjectName": "AP_Prop_Safety_Barrier_02",
+ "ReadableName": "Wet Floor Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Shelf_06": {
+ "ObjectID": "AP_Prop_Shelf_06",
+ "ObjectName": "AP_Prop_Shelf_06",
+ "ReadableName": "Shelf",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Shelf_Wall_04": {
+ "ObjectID": "AP_Prop_Shelf_Wall_04",
+ "ObjectName": "AP_Prop_Shelf_Wall_04",
+ "ReadableName": "Shelf",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "ccfffd459f484054db5c1635662bcbdd",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["USE", "PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.414896131, "y": 0.3510792, "z": 0.437452883 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "AP_Prop_Shelf_Wall_FreezeRay": {
+ "ObjectID": "AP_Prop_Shelf_Wall_FreezeRay",
+ "ObjectName": "AP_Prop_Shelf_Wall_FreezeRay",
+ "ReadableName": "Blue wall shelf",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "62bf8701fb1458b458d70a3c76eb7dbd",
+ "ObjectSalientProperties": ["Small", "Flat", "Square"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["Blue"],
+ "ObjectSize": { "x": 0.414896131, "y": 0.3510792, "z": 0.437452883 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Shelf_Wall_Laser": {
+ "ObjectID": "AP_Prop_Shelf_Wall_Laser",
+ "ObjectName": "AP_Prop_Shelf_Wall_Laser",
+ "ReadableName": "Red wall shelf",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "969624cec10b0e24f87003d885d75ca2",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["USE", "PLACE"],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.414896131, "y": 0.3510792, "z": 0.437452883 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": ["ObjectColors"]
+ },
+ "AP_Prop_Sign_OutofOrder_01": {
+ "ObjectID": "AP_Prop_Sign_OutofOrder_01",
+ "ObjectName": "AP_Prop_Sign_OutofOrder_01",
+ "ReadableName": "Sign",
+ "Description": "Looks like this is out of order",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Target_Circle_01": {
+ "ObjectID": "AP_Prop_Target_Circle_01",
+ "ObjectName": "AP_Prop_Target_Circle_01",
+ "ReadableName": "Target",
+ "Description": "Looks like a target to hit",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_03": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_03",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_03",
+ "ReadableName": "Whiteboard",
+ "Description": "This has instructions for operating the laser cannon",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_04": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_04",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_04",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a whiteboard explaining how to operate the quantum carrot maker",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_05": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_05",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_05",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a whiteboard explaining how to operate the embiggenator",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_06": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_06",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_06",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a whiteboard explaining how to operate the color swapper",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_07": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_07",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_07",
+ "ReadableName": "Whiteboard",
+ "Description": "This has instructions for operating the freeze ray",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_08": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_08",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_08",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a whiteboard explaining how to operate the gravity flipper",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_09": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_09",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_09",
+ "ReadableName": "Whiteboard",
+ "Description": "This has instructions for operating the 3D printer",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_10": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_10",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_10",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a whiteboard explaining how to operate the portal generator",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_11": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_11",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_11",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a whiteboard explaining how to fix the electrified puddles I've been seeing",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_12": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_12",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_12",
+ "ReadableName": "Whiteboard",
+ "Description": "This has instructions for operating the prototype emotion tester",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_13": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_13",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_13",
+ "ReadableName": "Whiteboard",
+ "Description": "This has instructions for operating the robo lifter",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_14": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_14",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_14",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like a seating chart for who sits where in this office",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Flat", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Prop_Whiteboard_Devices_15": {
+ "ObjectID": "AP_Prop_Whiteboard_Devices_15",
+ "ObjectName": "AP_Prop_Whiteboard_Devices_15",
+ "ReadableName": "Whiteboard",
+ "Description": "Looks like there's multiple cartridges to 3D print items with",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "AP_Tool_Buffer_01_Battery": {
+ "ObjectID": "AP_Tool_Buffer_01_Battery",
+ "ObjectName": "AP_Tool_Buffer_01_Battery",
+ "ReadableName": "Battery",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "BananaBunch_01": {
+ "ObjectID": "BananaBunch_01",
+ "ObjectName": "BananaBunch_01",
+ "ReadableName": "Banana Bunch",
+ "Description": "",
+ "MaxSpawns": 2,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "2f308eccce86a0649bc2b4a3d1b6df9a",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.274477363, "y": 0.16448091, "z": 0.394305348 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Banana_01": {
+ "ObjectID": "Banana_01",
+ "ObjectName": "Banana_01",
+ "ReadableName": "Banana",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "25e53e571bbd9494e81af4f783a634d5",
+ "ObjectSalientProperties": ["Small", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.06670226, "y": 0.121121489, "z": 0.362891346 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Bookshelf_Wooden_01": {
+ "ObjectID": "Bookshelf_Wooden_01",
+ "ObjectName": "Bookshelf_Wooden_01",
+ "ReadableName": "Bookshelf",
+ "Description": "A wooden bookshelf",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "30376b070aa96c544be3fddda140bd60",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 1.40410888, "y": 0.892888, "z": 0.38236326 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Bowl_01": {
+ "ObjectID": "Bowl_01",
+ "ObjectName": "Bowl_01",
+ "ReadableName": "Bowl",
+ "Description": "",
+ "MaxSpawns": 5,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "720b3e1c5e8891744b9f2a13da438a0d",
+ "ObjectSalientProperties": ["Round", "Ceramic"],
+ "ObjectProperties": [
+ "PICKUPABLE",
+ "BREAKABLE",
+ "HEATABLE",
+ "CHILLABLE",
+ "FILLABLE",
+ "USABLE"
+ ],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.274163842, "y": 0.08907737, "z": 0.274163842 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "BreadLoaf": {
+ "ObjectID": "BreadLoaf",
+ "ObjectName": "BreadLoaf",
+ "ReadableName": "Loaf of Bread",
+ "Description": "This is a loaf of bread.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "315854c114de05a4ca4425b7c2e4d1d9",
+ "ObjectSalientProperties": ["Big", "Square"],
+ "ObjectProperties": ["PICKUPABLE", "CUTTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.170894772, "y": 0.176492661, "z": 0.3480128 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "BreadSlice_01": {
+ "ObjectID": "BreadSlice_01",
+ "ObjectName": "BreadSlice_01",
+ "ReadableName": "Bread Slice",
+ "Description": "A slice of bread.",
+ "MaxSpawns": 3,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "e88227f25d74eab46a1777dfe7f53c26",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE", "COOKABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.172020927, "y": 0.0219130944, "z": 0.1778479 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Broken_Cord_01": {
+ "ObjectID": "Broken_Cord_01",
+ "ObjectName": "Broken_Cord_01",
+ "ReadableName": "Cord",
+ "Description": "Well this looks particularly dangerous.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 1,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["POWERABLE", "TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black", "White"],
+ "ObjectSize": { "x": 0.7271042, "y": 0.451028019, "z": 0.5381069 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Burger_04": {
+ "ObjectID": "Burger_04",
+ "ObjectName": "Burger_04",
+ "ReadableName": "Burger",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "033fa1ba58995624897c0a29b65bd16a",
+ "ObjectSalientProperties": ["Round"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.213704824, "y": 0.176506847, "z": 0.215008423 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CableFrayed_01": {
+ "ObjectID": "CableFrayed_01",
+ "ObjectName": "CableFrayed_01",
+ "ReadableName": "Cord",
+ "Description": "It's a frayed cable. Looks dangerous.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "1b0d40d1db4eb5043a4ae2a5731a5d7e",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.7271042, "y": 0.451028019, "z": 0.5381088 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CakeSlice_02": {
+ "ObjectID": "CakeSlice_02",
+ "ObjectName": "CakeSlice_02",
+ "ReadableName": "Cake Slice",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "6dbe64b6b588bcb43abe642087961fc1",
+ "ObjectSalientProperties": ["Small", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red", "White"],
+ "ObjectSize": { "x": 0.112906784, "y": 0.197670415, "z": 0.193635479 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Cake_02": {
+ "ObjectID": "Cake_02",
+ "ObjectName": "Cake_02",
+ "ReadableName": "Cake",
+ "Description": "",
+ "MaxSpawns": 1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "3930133e72b57564fafa9848ecd5abdc",
+ "ObjectSalientProperties": ["Big"],
+ "ObjectProperties": ["PICKUPABLE", "CUTTABLE", "HEATABLE", "CHILLABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red", "White"],
+ "ObjectSize": { "x": 0.37086755, "y": 0.203705519, "z": 0.38738358 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CandyBar_01": {
+ "ObjectID": "CandyBar_01",
+ "ObjectName": "CandyBar_01",
+ "ReadableName": "Candy Bar",
+ "Description": "An unopened candy bar.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "ea320e02d09f03e47b37da402d6a04e3",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["PICKUPABLE", "OPENABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Blue", "White"],
+ "ObjectSize": { "x": 0.125544429, "y": 0.0139330812, "z": 0.3553606 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CandyJar_01": {
+ "ObjectID": "CandyJar_01",
+ "ObjectName": "CandyJar_01",
+ "ReadableName": "Jar",
+ "Description": "This glass vessel seems to have been designed to hold confections.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "a56718b6e03861743b40fc8e6d72a8e6",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.2854852, "y": 0.3591103, "z": 0.292952538 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "CandyBar_01",
+ "CandyBar_Eaten_01",
+ "CandyBar_Open_01"
+ ],
+ "isKeyed": true,
+ "KeyedList": ["CandyBar_01"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "CandyBar_01",
+ "CandyBar_Eaten_01",
+ "CandyBar_Open_01"
+ ],
+ "isKeyed": true,
+ "KeyedList": ["CandyBar_01"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "CanSodaNew_01": {
+ "ObjectID": "CanSodaNew_01",
+ "ObjectName": "CanSodaNew_01",
+ "ReadableName": "Can",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "30701f5c86c828247ac4ee5875d29ad0",
+ "ObjectSalientProperties": ["Small", "Metal"],
+ "ObjectProperties": ["PICKUPABLE", "CHILLABLE", "HEATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow", "Blue"],
+ "ObjectSize": { "x": 0.109560587, "y": 0.194638252, "z": 0.108131714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CanSodaNew_Crushed_01": {
+ "ObjectID": "CanSodaNew_Crushed_01",
+ "ObjectName": "CanSodaNew_Crushed_01",
+ "ReadableName": "Can",
+ "Description": "A crushed, empty can of soda.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "c6f95ba0ebf2e5944a0d7d337292b207",
+ "ObjectSalientProperties": ["Small", "Round", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow", "Blue", "Gray"],
+ "ObjectSize": { "x": 0.11922361, "y": 0.157105684, "z": 0.109055862 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CanSodaNew_Open_01": {
+ "ObjectID": "CanSodaNew_Open_01",
+ "ObjectName": "CanSodaNew_Open_01",
+ "ReadableName": "Can",
+ "Description": "An open can of soda.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "cc88bec4d6fdc1c43a2ccbeefea5a59e",
+ "ObjectSalientProperties": ["Small", "Round", "Metal"],
+ "ObjectProperties": ["PICKUPABLE", "CHILLABLE", "HEATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow", "Blue", "Gray"],
+ "ObjectSize": { "x": 0.110466093, "y": 0.1962687, "z": 0.109029889 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CanSoda_01": {
+ "ObjectID": "CanSoda_01",
+ "ObjectName": "CanSoda_01",
+ "ReadableName": null,
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "c9652a8a4141c9641b48f3fe19497abf",
+ "ObjectSalientProperties": ["Small", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP"],
+ "ObjectColors": ["Yellow", "Blue"],
+ "ObjectSize": { "x": 0.109560587, "y": 0.194638252, "z": 0.108131714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Carrot_01": {
+ "ObjectID": "Carrot_01",
+ "ObjectName": "Carrot_01",
+ "ReadableName": "Carrot",
+ "Description": "A carrot.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "4c1c51d039d72484994e58cb308575e3",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Orange"],
+ "ObjectSize": { "x": 0.08106506, "y": 0.07919037, "z": 0.362399429 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Cereal_Box_01": {
+ "ObjectID": "Cereal_Box_01",
+ "ObjectName": "Cereal_Box_01",
+ "ReadableName": "Cereal Box",
+ "Description": "Sure does look tasty!",
+ "MaxSpawns": 2,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "77d069880d0c24040954665f9e7128d4",
+ "ObjectSalientProperties": ["Square"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["POUR"],
+ "ObjectColors": ["Blue", "White"],
+ "ObjectSize": { "x": 0.271286845, "y": 0.4515061, "z": 0.1516281 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CoffeeBeans_01": {
+ "ObjectID": "CoffeeBeans_01",
+ "ObjectName": "CoffeeBeans_01",
+ "ReadableName": "Coffee Beans",
+ "Description": "A packet of coffee beans.",
+ "MaxSpawns": 2,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "62254de23be9a8c45a734670d7b00400",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE", "FILLABLE"],
+ "ObjectVerbs": ["POUR"],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.166088775, "y": 0.2637905, "z": 0.1301771 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CoffeeCup_Lid_01": {
+ "ObjectID": "CoffeeCup_Lid_01",
+ "ObjectName": "CoffeeCup_Lid_01",
+ "ReadableName": "Lid",
+ "Description": "This is a coffee cup lid.",
+ "MaxSpawns": 10,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.179779053, "y": 0.0497195721, "z": 0.179779053 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["CoffeeCup_Lid_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "CoffeeCup_Open_Empty_01": {
+ "ObjectID": "CoffeeCup_Open_Empty_01",
+ "ObjectName": "CoffeeCup_Open_Empty_01",
+ "ReadableName": "Cup",
+ "Description": "This is an empty coffee cup.",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE", "RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Blue"],
+ "ObjectSize": { "x": 0.163642883, "y": 0.1824348, "z": 0.163640976 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["CoffeeCup_Open_Empty_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "CoffeeCup_Open_Empty_02": {
+ "ObjectID": "CoffeeCup_Open_Empty_02",
+ "ObjectName": "CoffeeCup_Open_Empty_02",
+ "ReadableName": "Cup",
+ "Description": "This is an empty coffee cup.",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE", "RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.163642883, "y": 0.1824348, "z": 0.163640976 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CoffeeMaker_01": {
+ "ObjectID": "CoffeeMaker_01",
+ "ObjectName": "CoffeeMaker_01",
+ "ReadableName": "Coffee Maker",
+ "Description": "This is the most popular machine in the office come morning time.",
+ "MaxSpawns": 1,
+ "MaxStack": 1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Square", "Metal"],
+ "ObjectProperties": ["TOGGLEABLE", "RECEPTACLE", "POWERABLE", "FILLABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.743783951, "y": 0.6100199, "z": 0.645092 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["CoffeePot_01"],
+ "isKeyed": true,
+ "KeyedList": [
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeePot_01",
+ "Bowl_01"
+ ],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "CoffeeMug_Boss": {
+ "ObjectID": "CoffeeMug_Boss",
+ "ObjectName": "CoffeeMug_Boss",
+ "ReadableName": "Mug",
+ "Description": "The Manager's Cofee Mug",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "b3203a6164105d540808477befa9a996",
+ "ObjectSalientProperties": ["Round", "Ceramic"],
+ "ObjectProperties": [
+ "PICKUPABLE",
+ "BREAKABLE",
+ "FILLABLE",
+ "HEATABLE",
+ "CHILLABLE",
+ "USABLE"
+ ],
+ "ObjectVerbs": ["POUR", "FILL"],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.270085752, "y": 0.2020734, "z": 0.186607867 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CoffeeMug_Yellow": {
+ "ObjectID": "CoffeeMug_Yellow",
+ "ObjectName": "CoffeeMug_Yellow",
+ "ReadableName": "Mug",
+ "Description": "This is a ceramic coffee mug.",
+ "MaxSpawns": 3,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "73e28cd8ba73db4469d10ac5d1b28f90",
+ "ObjectSalientProperties": ["Round", "Ceramic"],
+ "ObjectProperties": [
+ "PICKUPABLE",
+ "BREAKABLE",
+ "FILLABLE",
+ "HEATABLE",
+ "CHILLABLE"
+ ],
+ "ObjectVerbs": ["POUR", "FILL"],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.210216075, "y": 0.15768227, "z": 0.15369384 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CoffeePot_01": {
+ "ObjectID": "CoffeePot_01",
+ "ObjectName": "CoffeePot_01",
+ "ReadableName": "Coffee Pot",
+ "Description": "This can be used to brew coffee in.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Shiny", "Round", "Glass"],
+ "ObjectProperties": ["PICKUPABLE", "HEATABLE", "FILLABLE", "CHILLABLE"],
+ "ObjectVerbs": ["POUR", "FILL"],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 0.27828598, "y": 0.272213131, "z": 0.365064621 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CoffeeUnMaker_01": {
+ "ObjectID": "CoffeeUnMaker_01",
+ "ObjectName": "CoffeeUnMaker_01",
+ "ReadableName": "Coffee Unmaker",
+ "Description": "The coffee un-maker will turn coffee back into coffee beans.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "9b112376ac11796449553b5135e7f8e2",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "RECEPTACLE", "POWERABLE", "FILLABLE"],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.12711465, "y": 1.11197245, "z": 0.63023746 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["CoffeeBeans_01"],
+ "isKeyed": true,
+ "KeyedList": ["CoffeeBeans_01"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "ColorChangerStation": {
+ "ObjectID": "ColorChangerStation",
+ "ObjectName": "ColorChangerStation",
+ "ReadableName": "Color Changer",
+ "Description": "Color Changer Station",
+ "MaxSpawns": 5,
+ "MaxStack": 1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE", "USABLE", "POWERABLE"],
+ "ObjectVerbs": ["USE", "EXAMINE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 10.8900127, "y": 1.981947, "z": 14.711586 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "ColorChanger_Button_Blue": {
+ "ObjectID": "ColorChanger_Button_Blue",
+ "ObjectName": "ColorChanger_Button_Blue",
+ "ReadableName": "Blue Button",
+ "Description": "Color Changer Blue Button",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["Blue"],
+ "ObjectSize": { "x": 0.132104874, "y": 0.0563749075, "z": 0.138614655 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "ColorChanger_Button_Green": {
+ "ObjectID": "ColorChanger_Button_Green",
+ "ObjectName": "ColorChanger_Button_Green",
+ "ReadableName": "Green Button",
+ "Description": "Color Changer Green Button",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["Green"],
+ "ObjectSize": { "x": 0.132095337, "y": 0.0563749075, "z": 0.138612747 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "ColorChanger_Button_Red": {
+ "ObjectID": "ColorChanger_Button_Red",
+ "ObjectName": "ColorChanger_Button_Red",
+ "ReadableName": "Red Button",
+ "Description": "Color Changer Red Button",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.132095337, "y": 0.0563749075, "z": 0.138612747 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "Computer_Monitor_01": {
+ "ObjectID": "Computer_Monitor_01",
+ "ObjectName": "Computer_Monitor_01",
+ "ReadableName": "Computer",
+ "Description": "This is a computer monitor.",
+ "MaxSpawns": -1,
+ "MaxStack": 1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE", "POWERABLE", "INFECTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.467256546, "y": 0.354029655, "z": 0.365781784 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["Floppy_Virus", "Floppy_AntiVirus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Computer_Monitor_Broken": {
+ "ObjectID": "Computer_Monitor_Broken",
+ "ObjectName": "Computer_Monitor_Broken",
+ "ReadableName": "Computer",
+ "Description": "A broken monitor",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "327152015696b88488fe65125dbc113c",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.4672559, "y": 0.354029626, "z": 0.365781546 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Computer_Monitor_New": {
+ "ObjectID": "Computer_Monitor_New",
+ "ObjectName": "Computer_Monitor_New",
+ "ReadableName": "Computer",
+ "Description": "A new computer monitor ready to be set up",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "327152015696b88488fe65125dbc113c",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE", "POWERABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.4672559, "y": 0.354029626, "z": 0.365781546 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "CounterBase_03": {
+ "ObjectID": "CounterBase_03",
+ "ObjectName": "CounterBase_03",
+ "ReadableName": "Counter",
+ "Description": "This is a counter",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 2.0, "y": 0.949573, "z": 1.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Cutting_Board": {
+ "ObjectID": "Cutting_Board",
+ "ObjectName": "Cutting_Board",
+ "ReadableName": "Cutting Board",
+ "Description": "I can use this to cut food.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["USABLE", "RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.5207405, "y": 0.457071781, "z": 0.697244644 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Dart": {
+ "ObjectID": "Dart",
+ "ObjectName": "Dart",
+ "ReadableName": "Dart",
+ "Description": "",
+ "MaxSpawns": 4,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "bfe6c7a90365c0c4da547188b62d061f",
+ "ObjectSalientProperties": ["Sharp"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["THROW"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.06863173, "y": 0.334911317, "z": 0.06863142 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "DartBoard": {
+ "ObjectID": "DartBoard",
+ "ObjectName": "DartBoard",
+ "ReadableName": "Dart Board",
+ "Description": "DartBoard",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "9cce8743c032db349b3ca0759e2af7af",
+ "ObjectSalientProperties": ["Round"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.713743269, "y": 0.678809464, "z": 0.0424733 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Apple"],
+ "isKeyed": true,
+ "KeyedList": ["Dart"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Apple"],
+ "isKeyed": true,
+ "KeyedList": ["Dart"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Apple"],
+ "isKeyed": true,
+ "KeyedList": ["Dart"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Deembiggenator_Crates": {
+ "ObjectID": "Deembiggenator_Crates",
+ "ObjectName": "Deembiggenator_Crates",
+ "ReadableName": "Boxes",
+ "Description": "This is a stack of boxes",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.182160378, "y": 0.126503766, "z": 0.178980589 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "DeskFan_Broken_01": {
+ "ObjectID": "DeskFan_Broken_01",
+ "ObjectName": "DeskFan_Broken_01",
+ "ReadableName": "Fan",
+ "Description": "A metal desk fan",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "20edaa6c36298384eb63dc1fdc0898c6",
+ "ObjectSalientProperties": ["Small", "Round", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.6411363, "y": 0.8734331, "z": 0.476484954 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "DeskFan_New_01": {
+ "ObjectID": "DeskFan_New_01",
+ "ObjectName": "DeskFan_New_01",
+ "ReadableName": "Fan",
+ "Description": "A brand new metal desk fan",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "20edaa6c36298384eb63dc1fdc0898c6",
+ "ObjectSalientProperties": ["Small", "Round", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.6411363, "y": 0.8734331, "z": 0.476484954 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Desk_01": {
+ "ObjectID": "Desk_01",
+ "ObjectName": "Desk_01",
+ "ReadableName": "Table",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "f136486fa42fab345a1980f589f57ea6",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 1.95805478, "y": 0.75, "z": 0.884768069 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Donut_01": {
+ "ObjectID": "Donut_01",
+ "ObjectName": "Donut_01",
+ "ReadableName": "Donut",
+ "Description": "A delicious looking donut.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "bf24ae23d67bf92429daa9c45eb645f4",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Purple", "Pink"],
+ "ObjectSize": { "x": 0.215099484, "y": 0.0714741945, "z": 0.213694975 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Door_01": {
+ "ObjectID": "Door_01",
+ "ObjectName": "Door_01",
+ "ReadableName": "Door",
+ "Description": "This is a door.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 1,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 1.02917385, "y": 1.96685934, "z": 0.247297287 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "EAC_Machine": {
+ "ObjectID": "EAC_Machine",
+ "ObjectName": "EAC_Machine",
+ "ReadableName": "Everything's A Carrot Machine",
+ "Description": "A device that is capable of turning objects into a carrot.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 2.94654846, "y": 2.94069481, "z": 1.69961929 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Embiggenator": {
+ "ObjectID": "Embiggenator",
+ "ObjectName": "Embiggenator",
+ "ReadableName": "Embiggenator",
+ "Description": "Looks like this is capable of resizing objects.",
+ "MaxSpawns": 5,
+ "MaxStack": 10,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["POWERABLE", "USABLE", "TOGGLEABLE", "RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 2.32528687, "y": 3.024, "z": 2.325283 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "BananaBunch_01",
+ "Bowl_01",
+ "BreadLoaf",
+ "Burger_04",
+ "CakeSlice_02",
+ "Cake_02",
+ "CanSodaNew_01",
+ "CanSodaNew_Crushed_01",
+ "Carrot_01",
+ "Cereal_Box_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeePot_01",
+ "Donut_01",
+ "FoodPlate_01",
+ "Hammer",
+ "Handsaw",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "MilkCarton_01",
+ "PaperCup_01",
+ "Pear_01",
+ "PieFruitSlice_01",
+ "PieFruit_01",
+ "Printer_Cartridge",
+ "Radio_01",
+ "SandwichHalf_01",
+ "Screwdriver",
+ "TrashCan_01",
+ "Trophy01",
+ "Banana_01",
+ "CandyBar_01",
+ "FireExtinguisher_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "EmptyPaperTray": {
+ "ObjectID": "EmptyPaperTray",
+ "ObjectName": "EmptyPaperTray",
+ "ReadableName": "Tray",
+ "Description": "This is where meaningless tree fiber sheets are deposited.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "3d7ebc7cb5185704d94149a3b9c891f7",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.3492801, "y": 0.30714345, "z": 0.455588669 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "CandyBar_01",
+ "CandyBar_Eaten_01",
+ "CandyBar_Open_01",
+ "CanSoda_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Boss_ContainsCoffee",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "CoffeeMug_Yellow_ContainsCoffee",
+ "Dart"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "FireAlarm_01": {
+ "ObjectID": "FireAlarm_01",
+ "ObjectName": "FireAlarm_01",
+ "ReadableName": "Fire Alarm",
+ "Description": "",
+ "MaxSpawns": 0,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "5e405af710452cf4ebc0ff46a4f5b65b",
+ "ObjectSalientProperties": ["Square", "Metal"],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.246899575, "y": 0.427812636, "z": 0.11861743 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "FireExtinguisher_01": {
+ "ObjectID": "FireExtinguisher_01",
+ "ObjectName": "FireExtinguisher_01",
+ "ReadableName": "Fire Extinguisher",
+ "Description": "Looks like a fire extinguisher.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Shiny", "Round", "Metal"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.452033043, "y": 0.7997051, "z": 0.246738434 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Floppy_AntiVirus": {
+ "ObjectID": "Floppy_AntiVirus",
+ "ObjectName": "Floppy_AntiVirus",
+ "ReadableName": "Floppy Disk",
+ "Description": "Looks like an antivirus disk.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "b68dbd99284c70b4eab5d650ade67706",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Green", "White"],
+ "ObjectSize": { "x": 0.160155326, "y": 0.01603706, "z": 0.159781486 },
+ "VerbTests": [],
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Floppy_AntiVirus_Broken": {
+ "ObjectID": "Floppy_AntiVirus_Broken",
+ "ObjectName": "Floppy_AntiVirus_Broken",
+ "ReadableName": "Broken AntiVirus Floppy Disk",
+ "Description": "A broken antivirus floppy disk",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "a981311a65ea93142809f87b6a92dce7",
+ "ObjectSalientProperties": ["Small", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.160155326, "y": 0.01603706, "z": 0.159781486 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Floppy_Virus": {
+ "ObjectID": "Floppy_Virus",
+ "ObjectName": "Floppy_Virus",
+ "ReadableName": "Floppy Disk",
+ "Description": "I think there's malicious code on this.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "c814eebd7f8f5af4e893035c9f2519dc",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE", "HEATABLE", "BREAKABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black", "White"],
+ "ObjectSize": { "x": 0.160155326, "y": 0.01603706, "z": 0.159781486 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Floppy_Virus_Broken": {
+ "ObjectID": "Floppy_Virus_Broken",
+ "ObjectName": "Floppy_Virus_Broken",
+ "ReadableName": "Broken Virus Floppy Disk",
+ "Description": "A broken virus floppy disk",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "056bcc6a5432d0c49bd574764a6fdd14",
+ "ObjectSalientProperties": ["Small", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 0.160155326, "y": 0.01603706, "z": 0.159781486 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "FoodPlate_01": {
+ "ObjectID": "FoodPlate_01",
+ "ObjectName": "FoodPlate_01",
+ "ReadableName": "Plate",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "3146f607480da204b863889da1c64b94",
+ "ObjectSalientProperties": ["Small", "Ceramic"],
+ "ObjectProperties": ["PICKUPABLE", "BREAKABLE", "RECEPTACLE", "DIRTYABLE"],
+ "ObjectVerbs": ["CLEAN"],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.4359709, "y": 0.02626417, "z": 0.4359709 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Apple",
+ "AppleCut_01",
+ "AppleSlice_01",
+ "Banana_01",
+ "BreadSlice_01",
+ "BurgerEaten_04",
+ "Burger_04",
+ "CakeCut_02",
+ "CakeSlice_02",
+ "Cake_02",
+ "FoodPlate_01",
+ "Pear_01",
+ "PieFruitCut_01",
+ "PieFruitSlice_01",
+ "SandwichHalf_01",
+ "BreadLoaf",
+ "BreadLoaf_Sliced",
+ "CandyBar_01",
+ "Carrot_01",
+ "Donut_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "ForkLift": {
+ "ObjectID": "ForkLift",
+ "ObjectName": "ForkLift",
+ "ReadableName": "Forklift",
+ "Description": "ForkLift",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "78a4a2fd9b79bb9409b34339dfeef18d",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 3.59425974, "y": 2.550777, "z": 1.101444 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Fork_01": {
+ "ObjectID": "Fork_01",
+ "ObjectName": "Fork_01",
+ "ReadableName": "Fork",
+ "Description": "Fork",
+ "MaxSpawns": 6,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "19e055a59ab442948860cfb5af38218d",
+ "ObjectSalientProperties": ["Shiny", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.0459886938, "y": 0.019711813, "z": 0.223071367 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "FreezeRay": {
+ "ObjectID": "FreezeRay",
+ "ObjectName": "FreezeRay",
+ "ReadableName": "Freeze Ray",
+ "Description": "Seems to be a freeze ray of some sort.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE", "USABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 3.01662922, "y": 2.78441238, "z": 1.69096947 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "FridgeLower_02": {
+ "ObjectID": "FridgeLower_02",
+ "ObjectName": "FridgeLower_02",
+ "ReadableName": "Fridge",
+ "Description": "",
+ "MaxSpawns": 2,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "40c6eeee47d302a42ab8ab9effba668d",
+ "ObjectSalientProperties": ["Big", "Square"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.934003949, "y": 1.46863067, "z": 0.8474475 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "MilkCarton_01",
+ "Bowl_01",
+ "FoodPlate_01",
+ "CanSodaNew_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": [
+ "Cake_02",
+ "Laser_Tip",
+ "DeskFan_New_01",
+ "Laser_Tip_Broken",
+ "DeskFan_Broken_01",
+ "Cereal_Box_01",
+ "MilkCarton_01",
+ "CoffeePot_01",
+ "Radio_01",
+ "Trophy01"
+ ]
+ },
+ {
+ "AllowedSpawns": [
+ "MilkCarton_01",
+ "Bowl_01",
+ "FoodPlate_01",
+ "CanSodaNew_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": [
+ "Cake_02",
+ "Laser_Tip",
+ "Laser_Tip_Broken",
+ "DeskFan_Broken_01",
+ "DeskFan_New_01",
+ "Cereal_Box_01",
+ "MilkCarton_01",
+ "CoffeePot_01",
+ "Radio_01",
+ "Trophy01"
+ ]
+ },
+ {
+ "AllowedSpawns": [
+ "MilkCarton_01",
+ "Bowl_01",
+ "FoodPlate_01",
+ "CanSodaNew_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "MilkCarton_01",
+ "Bowl_01",
+ "FoodPlate_01",
+ "CanSodaNew_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "FridgeUpper_02": {
+ "ObjectID": "FridgeUpper_02",
+ "ObjectName": "FridgeUpper_02",
+ "ReadableName": "Freezer",
+ "Description": "",
+ "MaxSpawns": 2,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "6a394378d8f4d454e8e69c9bba83c216",
+ "ObjectSalientProperties": ["Big", "Square"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.934002638, "y": 0.687001944, "z": 0.895949364 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": [
+ "Laser_Tip_Broken",
+ "Laser_Tip",
+ "DeskFan_Broken_01",
+ "DeskFan_New_01",
+ "Cereal_Box_01",
+ "MilkCarton_01",
+ "CoffeePot_01",
+ "Radio_01",
+ "Trophy01"
+ ]
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "FulllPaperTray_01": {
+ "ObjectID": "FulllPaperTray_01",
+ "ObjectName": "FulllPaperTray_01",
+ "ReadableName": "Tray",
+ "Description": "Whoever owns this paper storage platform must be very busy.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "32c4275924223274ba550e8e18f640ea",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.3492801, "y": 0.30714345, "z": 0.455588669 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "FuseBox_01": {
+ "ObjectID": "FuseBox_01",
+ "ObjectName": "FuseBox_01",
+ "ReadableName": "Fuse Box",
+ "Description": "This box powers everything here.",
+ "MaxSpawns": -1,
+ "MaxStack": 1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Shiny", "Square", "Metal"],
+ "ObjectProperties": ["OPENABLE", "TOGGLEABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.5746765, "y": 1.202591, "z": 0.386352539 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["FuseBox_01_Lever"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "FuseBox_01_Lever": {
+ "ObjectID": "FuseBox_01_Lever",
+ "ObjectName": "FuseBox_01_Lever",
+ "ReadableName": "Lever",
+ "Description": "",
+ "MaxSpawns": 0,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "0cafb3e4f883f254f9f2495dc893b1e1",
+ "ObjectSalientProperties": ["Metal"],
+ "ObjectProperties": ["TOGGLEABLE", "PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.459134519, "y": 1.2025907, "z": 0.3863533 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "FuseBox_02": {
+ "ObjectID": "FuseBox_02",
+ "ObjectName": "FuseBox_02",
+ "ReadableName": "Fuse Box",
+ "Description": "Master fusebox",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "31b9ad592df20304a88ac8663f868ece",
+ "ObjectSalientProperties": ["Shiny", "Square", "Metal"],
+ "ObjectProperties": ["TOGGLEABLE", "OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.459134519, "y": 1.2025907, "z": 0.3863533 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["FuseBox_01_Lever"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "GravityPad": {
+ "ObjectID": "GravityPad",
+ "ObjectName": "GravityPad",
+ "ReadableName": "Gravity Pad",
+ "Description": "Looks like this is capable of generating a gravitational field.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 14.2653637, "y": 7.80164242, "z": 26.9653625 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "Banana_01",
+ "CakeCut_02",
+ "Cake_02",
+ "Dart",
+ "Floppy_Virus",
+ "Hammer",
+ "Apple",
+ "Burger_04",
+ "CanSodaNew_01",
+ "Cereal_Box_01",
+ "BananaBunch_01",
+ "BreadSlice_01",
+ "CoffeePotEmpty_01",
+ "CoffeePot_WithCoffee_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Hammer": {
+ "ObjectID": "Hammer",
+ "ObjectName": "Hammer",
+ "ReadableName": "Hammer",
+ "Description": "",
+ "MaxSpawns": 5,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "48b8344bd15cf2342af1daaa0b806b11",
+ "ObjectSalientProperties": ["Metal", "Small"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["BREAK"],
+ "ObjectColors": ["Black", "Gray"],
+ "ObjectSize": { "x": 0.06573391, "y": 0.214136809, "z": 0.489313871 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Handsaw": {
+ "ObjectID": "Handsaw",
+ "ObjectName": "Handsaw",
+ "ReadableName": "Saw",
+ "Description": "",
+ "MaxSpawns": 5,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "df4878df08a8f584aae65f11744fb557",
+ "ObjectSalientProperties": ["Shiny", "Square", "Flat", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP", "BREAK", "USE"],
+ "ObjectColors": ["Brown", "Gray"],
+ "ObjectSize": { "x": 0.03956051, "y": 0.238980576, "z": 0.8061825 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Jar_Jam_01": {
+ "ObjectID": "Jar_Jam_01",
+ "ObjectName": "Jar_Jam_01",
+ "ReadableName": "Jelly",
+ "Description": "A full jar of jam.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "37e487afe3279de418cb57fbfbac9045",
+ "ObjectSalientProperties": ["Small", "Round", "Glass"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.166923821, "y": 0.219869286, "z": 0.16527839 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Jar_PeanutButter_01": {
+ "ObjectID": "Jar_PeanutButter_01",
+ "ObjectName": "Jar_PeanutButter_01",
+ "ReadableName": "Peanut Butter",
+ "Description": "A full jar of peanut butter.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "748d2486fc6be2a4bbd5029b22810a0b",
+ "ObjectSalientProperties": ["Small", "Round", "Glass"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.166923821, "y": 0.219869286, "z": 0.16527839 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Keyboard": {
+ "ObjectID": "Keyboard",
+ "ObjectName": "Keyboard",
+ "ReadableName": "Keyboard",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "KitchenCabinet_01": {
+ "ObjectID": "KitchenCabinet_01",
+ "ObjectName": "KitchenCabinet_01",
+ "ReadableName": "Cabinet",
+ "Description": "",
+ "MaxSpawns": 0,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "1e1dbce4e1d4aef48bad6c40f14ba12e",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": ["OPEN", "CLOSE"],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.0, "y": 1.04381716, "z": 0.713019967 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "KitchenCabinet_01_Trapped": {
+ "ObjectID": "KitchenCabinet_01_Trapped",
+ "ObjectName": "KitchenCabinet_01_Trapped",
+ "ReadableName": null,
+ "Description": "This is a kitchen cabinet.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 1.0147934, "y": 1.06068993, "z": 0.733478546 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "KitchenCabinet_02": {
+ "ObjectID": "KitchenCabinet_02",
+ "ObjectName": "KitchenCabinet_02",
+ "ReadableName": "Cabinet",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "83429801919910f46b7bd538b053a64a",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.235, "y": 1.04381716, "z": 0.713019967 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Bowl_01", "FoodPlate_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenCounter01": {
+ "ObjectID": "KitchenCounter01",
+ "ObjectName": "KitchenCounter01",
+ "ReadableName": "Counter",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "3913181ee09015744838ab4e478d59ae",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.235, "y": 0.949573, "z": 1.032959 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "CanSodaNew_01",
+ "CanSoda_01",
+ "MugYellowClean_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "CanSodaNew_01",
+ "CanSoda_01",
+ "MugYellowClean_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "CanSodaNew_01",
+ "CanSoda_01",
+ "MugYellowClean_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "CanSodaNew_01",
+ "CanSoda_01",
+ "MugYellowClean_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "CanSodaNew_01",
+ "CanSoda_01",
+ "MugYellowClean_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "CanSodaNew_01",
+ "CanSoda_01",
+ "MugYellowClean_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenCounterBase_02": {
+ "ObjectID": "KitchenCounterBase_02",
+ "ObjectName": "KitchenCounterBase_02",
+ "ReadableName": "Counter",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "5cce6b21185a31444a17988b95baef29",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": ["OPEN", "CLOSE"],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.235, "y": 0.949573, "z": 1.03295648 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenCounterBase_03": {
+ "ObjectID": "KitchenCounterBase_03",
+ "ObjectName": "KitchenCounterBase_03",
+ "ReadableName": "Counter",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "ad27827a9294ad145a0df616e3ddce9c",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": ["OPEN", "CLOSE"],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 2.0, "y": 0.949573, "z": 1.03295648 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Bowl_01",
+ "CoffeeMug_Yellow",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "FoodPlate_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenCounterDrawer_02": {
+ "ObjectID": "KitchenCounterDrawer_02",
+ "ObjectName": "KitchenCounterDrawer_02",
+ "ReadableName": "Drawer",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "6b495ab6717ccef4ea6af93bee1092cb",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": ["OPEN", "CLOSE"],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.170354, "y": 0.173026323, "z": 0.9224707 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Fork_01", "Knife_01", "Spoon_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Fork_01", "Knife_01", "Spoon_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Fork_01", "Knife_01", "Spoon_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Fork_01", "Knife_01", "Spoon_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenCounterDrawer_03": {
+ "ObjectID": "KitchenCounterDrawer_03",
+ "ObjectName": "KitchenCounterDrawer_03",
+ "ReadableName": "Drawer",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "0c1b1edd00ec9934e8c6e6a0368c89ca",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE"],
+ "ObjectVerbs": ["OPEN", "CLOSE"],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.89530993, "y": 0.173026323, "z": 0.9224707 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenCounterSink_01": {
+ "ObjectID": "KitchenCounterSink_01",
+ "ObjectName": "KitchenCounterSink_01",
+ "ReadableName": "Sink",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "e0cc04585f6d4334d88fa27aedba63dd",
+ "ObjectSalientProperties": ["Square"],
+ "ObjectProperties": ["TOGGLEABLE", "RECEPTACLE", "FILLABLE", "OPENABLE"],
+ "ObjectVerbs": ["CLEAN", "FILL"],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 1.0, "y": 1.46698332, "z": 1.03295648 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "KitchenCounterTop_02": {
+ "ObjectID": "KitchenCounterTop_02",
+ "ObjectName": "KitchenCounterTop_02",
+ "ReadableName": "Counter Top",
+ "Description": "This is a counter top.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": ["Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Cereal_Box_01",
+ "Bowl_01",
+ "BananaBunch_01",
+ "Banana_01",
+ "Apple",
+ "Fork_01",
+ "Knife_01",
+ "Spoon_01",
+ "CoffeeBeans_01",
+ "CoffeeMug_Yellow",
+ "CanSodaNew_01",
+ "BreadLoaf",
+ "Jar_Jam_01",
+ "Jar_PeanutButter_01",
+ "PaperCup_01",
+ "PaperCup_Crushed_01",
+ "FoodPlate_01",
+ "PieFruit_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "KitchenStool_01": {
+ "ObjectID": "KitchenStool_01",
+ "ObjectName": "KitchenStool_01",
+ "ReadableName": "Stool",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "c26cd3a7c064eea449ede5854e3253a4",
+ "ObjectSalientProperties": ["Small", "Round", "Metal"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Blue", "Gray"],
+ "ObjectSize": { "x": 0.377114236, "y": 0.509419858, "z": 0.377114236 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Knife_01": {
+ "ObjectID": "Knife_01",
+ "ObjectName": "Knife_01",
+ "ReadableName": "Knife",
+ "Description": "A knife",
+ "MaxSpawns": 6,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "b0171c19b17b91a46b91880fe0b8f871",
+ "ObjectSalientProperties": ["Shiny", "Small", "Pointy", "Sharp"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.0331360623, "y": 0.0101451734, "z": 0.2221334 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Lab_Terminal": {
+ "ObjectID": "Lab_Terminal",
+ "ObjectName": "Lab_Terminal",
+ "ReadableName": "Computer",
+ "Description": "This looks to be some kind of lab terminal.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "ca07dd13e4785ee4cac840ca72c90a4b",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": ["POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.353824526, "y": 0.467111051, "z": 0.369030535 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Laser": {
+ "ObjectID": "Laser",
+ "ObjectName": "Laser",
+ "ReadableName": "Laser",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big"],
+ "ObjectProperties": ["RECEPTACLE", "POWERABLE", "USABLE", "TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.6597414, "y": 1.87520874, "z": 2.638462 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Laser_CircuitBoard"],
+ "isKeyed": true,
+ "KeyedList": ["Laser_CircuitBoard"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Laser_Tip"],
+ "isKeyed": true,
+ "KeyedList": ["Laser_Tip", "Laser_Tip_Broken"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Laser_ControlPanel"],
+ "isKeyed": false,
+ "KeyedList": ["Laser_ControlPanel"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "LaserBase_toy": {
+ "ObjectID": "LaserBase_toy",
+ "ObjectName": "LaserBase_toy",
+ "ReadableName": "Laser Toy",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Laser_CircuitBoard": {
+ "ObjectID": "Laser_CircuitBoard",
+ "ObjectName": "Laser_CircuitBoard",
+ "ReadableName": "Circuit Board",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP", "PLACE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.33541584, "y": 0.1271398, "z": 0.0283279419 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Laser_ControlPanel": {
+ "ObjectID": "Laser_ControlPanel",
+ "ObjectName": "Laser_ControlPanel",
+ "ReadableName": "Control Panel",
+ "Description": "Laser Control Panel",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE", "USABLE"],
+ "ObjectVerbs": ["PICKUP", "USE", "PLACE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.08314133, "y": 0.311643362, "z": 0.406917572 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Laser_Tip": {
+ "ObjectID": "Laser_Tip",
+ "ObjectName": "Laser_Tip",
+ "ReadableName": "Laser Tip",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP", "PLACE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.3345871, "y": 0.3437295, "z": 0.713859558 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Laser_Tip_Broken": {
+ "ObjectID": "Laser_Tip_Broken",
+ "ObjectName": "Laser_Tip_Broken",
+ "ReadableName": "Broken Laser Tip",
+ "Description": "A broken tip to the laser device",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "0a7674d5def69f9498519816f6dd72c3",
+ "ObjectSalientProperties": ["Big", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.3345871, "y": 0.343729526, "z": 0.71385777 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "LightSwitch_01": {
+ "ObjectID": "LightSwitch_01",
+ "ObjectName": "LightSwitch_01",
+ "ReadableName": "Light Switch",
+ "Description": "It looks like a light switch.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE", "USABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.12172699, "y": 0.202784777, "z": 0.0569782257 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "ManagerDesk": {
+ "ObjectID": "ManagerDesk",
+ "ObjectName": "ManagerDesk",
+ "ReadableName": "Desk",
+ "Description": "It's the manager's desk. Where they get all their not-work done.",
+ "MaxSpawns": 0,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "06ab10c8cba260d44b63d45612216ef2",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["SCAN", "EXAMINE"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.95805478, "y": 0.75, "z": 0.884768069 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Floppy_AntiVirus"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Floppy_AntiVirus"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Floppy_AntiVirus"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Manager_Chair": {
+ "ObjectID": "Manager_Chair",
+ "ObjectName": "Manager_Chair",
+ "ReadableName": "Chair",
+ "Description": "This is an office chair.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Microwave_01": {
+ "ObjectID": "Microwave_01",
+ "ObjectName": "Microwave_01",
+ "ReadableName": "Microwave",
+ "Description": "Microwave",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "2deafa4bc7f8e704aa9a34feba450618",
+ "ObjectSalientProperties": ["Square"],
+ "ObjectProperties": ["OPENABLE", "RECEPTACLE", "POWERABLE", "TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 1.50200307, "y": 0.612694144, "z": 1.22732949 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "Banana_01",
+ "BreadSlice_01",
+ "Burger_04",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_ContainsCoffee",
+ "FoodPlateDirty_01",
+ "FoodPlate_01",
+ "MugYellowClean_01",
+ "Pear_01",
+ "SandwichHalf_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": [
+ "Cake_02",
+ "Laser_Tip",
+ "Laser_Tip_Broken",
+ "DeskFan_Broken_01",
+ "DeskFan_New_01",
+ "Cereal_Box_01",
+ "MilkCarton_01",
+ "CoffeePot_01",
+ "Radio_01",
+ "Trophy01",
+ "Computer_Monitor_Broken",
+ "Computer_Monitor_New"
+ ]
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "MilkCarton_01": {
+ "ObjectID": "MilkCarton_01",
+ "ObjectName": "MilkCarton_01",
+ "ReadableName": "Milk",
+ "Description": "A carton of milk.",
+ "MaxSpawns": 3,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "2721e1d98648df749801fcbda128db02",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE", "OPENABLE", "FILLABLE"],
+ "ObjectVerbs": ["POUR"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.174048156, "y": 0.412403435, "z": 0.174046919 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "MissionItemHolder": {
+ "ObjectID": "MissionItemHolder",
+ "ObjectName": "MissionItemHolder",
+ "ReadableName": null,
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 3.60455132, "y": 2.97929645, "z": 8.074594 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Office_Chair": {
+ "ObjectID": "Office_Chair",
+ "ObjectName": "Office_Chair",
+ "ReadableName": "Chair",
+ "Description": "This is an office chair.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PackingBox": {
+ "ObjectID": "PackingBox",
+ "ObjectName": "PackingBox",
+ "ReadableName": "Box",
+ "Description": "Packing box to ship out broken hardware",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "7edaaae22fee67e46a9139a04b66f857",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.076958, "y": 0.479566723, "z": 0.728206158 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "PaperCup_01": {
+ "ObjectID": "PaperCup_01",
+ "ObjectName": "PaperCup_01",
+ "ReadableName": "Cup",
+ "Description": "A paper cup.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "7bd836e0fbc4a9945ba30bc46360cdfe",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.149652556, "y": 0.3446747, "z": 0.149453372 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PaperCup_Crushed_01": {
+ "ObjectID": "PaperCup_Crushed_01",
+ "ObjectName": "PaperCup_Crushed_01",
+ "ReadableName": "Cup",
+ "Description": "A crushed paper cup.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "1cab4ca7536638f448c8d8f1c77c200d",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.14327921, "y": 0.269135, "z": 0.1494626 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PBJ_Sandwich": {
+ "ObjectID": "PBJ_Sandwich",
+ "ObjectName": "PBJ_Sandwich",
+ "ReadableName": "Peanut Butter and Jelly Sandwich",
+ "Description": "A peanut butter and jelly sandwich",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "843e4b41d94e1aa44bcc950b49cda9bd",
+ "ObjectSalientProperties": ["Small", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.199752, "y": 0.0778393, "z": 0.213549674 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Pear_01": {
+ "ObjectID": "Pear_01",
+ "ObjectName": "Pear_01",
+ "ReadableName": "Pear",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "7c8bd61185cc89541a3c825cdba1e806",
+ "ObjectSalientProperties": ["Small", "Round"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Green"],
+ "ObjectSize": { "x": 0.150217965, "y": 0.245783448, "z": 0.15021801 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PieFruitSlice_01": {
+ "ObjectID": "PieFruitSlice_01",
+ "ObjectName": "PieFruitSlice_01",
+ "ReadableName": "Pie Slice",
+ "Description": "",
+ "MaxSpawns": 3,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "a87006d7359eb0f4e843b4ca5150eb8a",
+ "ObjectSalientProperties": ["Small", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE", "EATABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red"],
+ "ObjectSize": { "x": 0.246423945, "y": 0.075832136, "z": 0.281383038 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PieFruit_01": {
+ "ObjectID": "PieFruit_01",
+ "ObjectName": "PieFruit_01",
+ "ReadableName": "Pie",
+ "Description": "",
+ "MaxSpawns": 2,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "4edc7e7da285b8d49af7d9654df67385",
+ "ObjectSalientProperties": ["Big", "Round"],
+ "ObjectProperties": ["PICKUPABLE", "CUTTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red"],
+ "ObjectSize": { "x": 0.575205743, "y": 0.07568264, "z": 0.5667981 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PinBoard_01": {
+ "ObjectID": "PinBoard_01",
+ "ObjectName": "PinBoard_01",
+ "ReadableName": "Board",
+ "Description": "Pin board",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "18533e741dbb988429987e5cbb9c843a",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": ["USE"],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 2.04485, "y": 1.82019353, "z": 0.171803281 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PinBoard_02": {
+ "ObjectID": "PinBoard_02",
+ "ObjectName": "PinBoard_02",
+ "ReadableName": "Board",
+ "Description": "Pin board",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "3e60b45e1a07f5c40bd94ed201c0b308",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 2.04485059, "y": 1.73665631, "z": 0.150445551 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PortalGenerator": {
+ "ObjectID": "PortalGenerator",
+ "ObjectName": "PortalGenerator",
+ "ReadableName": "Generator",
+ "Description": "This generates portals.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Metal"],
+ "ObjectProperties": ["POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.64839554, "y": 3.14431381, "z": 3.680931 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "PowerOutlet_01": {
+ "ObjectID": "PowerOutlet_01",
+ "ObjectName": "PowerOutlet_01",
+ "ReadableName": "Outlet",
+ "Description": "Things plug into this.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.05179596, "y": 0.202784836, "z": 0.12172699 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Printer_3D": {
+ "ObjectID": "Printer_3D",
+ "ObjectName": "Printer_3D",
+ "ReadableName": "Printer",
+ "Description": "3D Printer",
+ "MaxSpawns": -1,
+ "MaxStack": 1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big"],
+ "ObjectProperties": ["RECEPTACLE", "POWERABLE", "TOGGLEABLE"],
+ "ObjectVerbs": ["USE", "SCAN"],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.52817965, "y": 0.718124866, "z": 0.8897476 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": [
+ "Printer_Cartridge_Figure",
+ "Printer_Cartridge_Hammer",
+ "Printer_Cartridge_Lever",
+ "Printer_Cartridge_Mug"
+ ],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Printer_Cartridge": {
+ "ObjectID": "Printer_Cartridge",
+ "ObjectName": "Printer_Cartridge",
+ "ReadableName": "Printer Cartridge",
+ "Description": "3D Printer Cartridge",
+ "MaxSpawns": -1,
+ "MaxStack": 5,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "3b0f6d592440da945a1cabed5c29d122",
+ "ObjectSalientProperties": ["Small"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP", "SCAN", "PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.162916556, "y": 0.04620609, "z": 0.2167714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Printer_Cartridge_Figure": {
+ "ObjectID": "Printer_Cartridge_Figure",
+ "ObjectName": "Printer_Cartridge_Figure",
+ "ReadableName": "Figure Print Cartridge",
+ "Description": "A 3D print cartridge for an action figure",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "25174211e94156445b24a23150bb8474",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.162916556, "y": 0.04620609, "z": 0.2167714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Printer_Cartridge_Hammer": {
+ "ObjectID": "Printer_Cartridge_Hammer",
+ "ObjectName": "Printer_Cartridge_Hammer",
+ "ReadableName": "Hammer Print Cartridge",
+ "Description": "A 3D print cartridge for hammers",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "bcc44fdaa527c0a4894471b7a5ae3bb7",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.162916556, "y": 0.04620609, "z": 0.2167714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Printer_Cartridge_Lever": {
+ "ObjectID": "Printer_Cartridge_Lever",
+ "ObjectName": "Printer_Cartridge_Lever",
+ "ReadableName": "Lever Print Cartridge",
+ "Description": "A 3D print cartridge for power levers",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "436c5347d8a449648b10427dd93628b3",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.162916556, "y": 0.04620609, "z": 0.2167714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Printer_Cartridge_Mug": {
+ "ObjectID": "Printer_Cartridge_Mug",
+ "ObjectName": "Printer_Cartridge_Mug",
+ "ReadableName": "Mug Printer Cartridge",
+ "Description": "A 3D print cartridge for mugs",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "dd6978e5ae0f6294189b5b6c8b9d7df2",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.162916556, "y": 0.04620609, "z": 0.2167714 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Radio_01": {
+ "ObjectID": "Radio_01",
+ "ObjectName": "Radio_01",
+ "ReadableName": "Radio",
+ "Description": "Looks like a radio.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "5942aeb8378002643b10a0c0764738bd",
+ "ObjectSalientProperties": ["Small", "Square", "Metal"],
+ "ObjectProperties": ["PICKUPABLE", "TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.3862338, "y": 0.408162564, "z": 0.14038384 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Radio_01_Broken": {
+ "ObjectID": "Radio_01_Broken",
+ "ObjectName": "Radio_01_Broken",
+ "ReadableName": "Broken Radio",
+ "Description": "A broken radio",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "1163dcf6e784bdb4cbb9d980887196c3",
+ "ObjectSalientProperties": ["Small", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 0.3862338, "y": 0.408162564, "z": 0.14038384 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "ReceptionDesk": {
+ "ObjectID": "ReceptionDesk",
+ "ObjectName": "ReceptionDesk",
+ "ReadableName": "Desk",
+ "Description": "This is a desk, but with a pleasant sort of swoop.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "23963ec48f89b964c8ff9cee56c6a3cd",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 3.13852882, "y": 0.9281243, "z": 1.78340769 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Radio_01", "Floppy_Virus"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Apple",
+ "AppleCut_01",
+ "Apple_Eaten",
+ "Banana_Eaten_01",
+ "Bowl_ContainsMilkAndCereal",
+ "BurgerEaten_04",
+ "Donut_Eaten_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Record_01": {
+ "ObjectID": "Record_01",
+ "ObjectName": "Record_01",
+ "ReadableName": "Record",
+ "Description": "An ancient musical disk.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "aa4e4e0a84ef63344a181ae2888d8957",
+ "ObjectSalientProperties": ["Round"],
+ "ObjectProperties": ["PICKUPABLE", "BREAKABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black"],
+ "ObjectSize": { "x": 0.3055599, "y": 0.3055599, "z": 0.008067767 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "RoboticArm_01": {
+ "ObjectID": "RoboticArm_01",
+ "ObjectName": "RoboticArm_01",
+ "ReadableName": "Robot Arm",
+ "Description": "This looks like a gigantic robotic arm.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Metal"],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Blue", "Gray"],
+ "ObjectSize": { "x": 2.447083, "y": 2.99751377, "z": 2.1575222 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SafetyBarrier_02": {
+ "ObjectID": "SafetyBarrier_02",
+ "ObjectName": "SafetyBarrier_02",
+ "ReadableName": "Wet Floor Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "ccfc701585165694b8209a494f91f90b",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.5321758, "y": 0.8021586, "z": 0.6484621 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": ["ObjectColors"]
+ },
+ "SandwichHalf_01": {
+ "ObjectID": "SandwichHalf_01",
+ "ObjectName": "SandwichHalf_01",
+ "ReadableName": "Sandwich",
+ "Description": "",
+ "MaxSpawns": 2,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "14a59236ba839a044af6de8f4b3a259a",
+ "ObjectSalientProperties": ["Small", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red", "Yellow", "Green"],
+ "ObjectSize": { "x": 0.200604886, "y": 0.08533428, "z": 0.2259945 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Screwdriver": {
+ "ObjectID": "Screwdriver",
+ "ObjectName": "Screwdriver",
+ "ReadableName": "Screw Driver",
+ "Description": "",
+ "MaxSpawns": 5,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "0f1415db20102274abd63796b562ea1b",
+ "ObjectSalientProperties": ["Shiny", "Small", "Pointy", "Metal"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP", "OPEN", "USE", "CLOSE"],
+ "ObjectColors": ["Brown", "Gray"],
+ "ObjectSize": { "x": 0.05164995, "y": 0.0447301529, "z": 0.3931427 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Security_Button": {
+ "ObjectID": "Security_Button",
+ "ObjectName": "Security_Button",
+ "ReadableName": "Button",
+ "Description": "It's a big red button.",
+ "MaxSpawns": 0,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "cf9768118d2226a43b50c627171a7bb2",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["POWERABLE", "TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.142730713, "y": 0.0302080624, "z": 0.153859317 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Shelf_01": {
+ "ObjectID": "Shelf_01",
+ "ObjectName": "Shelf_01",
+ "ReadableName": "Shelf",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "93dceebb0adaa3d4b913b028470d8688",
+ "ObjectSalientProperties": ["Big", "Square", "Metal"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Gray"],
+ "ObjectSize": { "x": 2.21274614, "y": 1.59752655, "z": 0.5083539 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver", "Apple"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver", "Apple"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver", "Apple"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver", "Apple"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Hammer", "Handsaw", "Screwdriver"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Shelves_Tall_01": {
+ "ObjectID": "Shelves_Tall_01",
+ "ObjectName": "Shelves_Tall_01",
+ "ReadableName": "Shelf",
+ "Description": "A tall set of shelves. They could hold anything. Even more shelves.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "fc95783ae0c840442a5d6ef2a61c7446",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.18080711, "y": 1.80564117, "z": 0.477919459 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [
+ "Trophy01",
+ "CoffeeMug_Boss_Broken",
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Yellow_Broken",
+ "Hammer",
+ "Jar_PeanutButter_01",
+ "Jar_Jam_01",
+ "Radio_01",
+ "TAMPrototypeHead_01"
+ ],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "sign_diamond_carrot": {
+ "ObjectID": "sign_diamond_carrot",
+ "ObjectName": "sign_diamond_carrot",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_diamond_fire": {
+ "ObjectID": "sign_diamond_fire",
+ "ObjectName": "sign_diamond_fire",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_diamond_freeze": {
+ "ObjectID": "sign_diamond_freeze",
+ "ObjectName": "sign_diamond_freeze",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_diamond_gravity": {
+ "ObjectID": "sign_diamond_gravity",
+ "ObjectName": "sign_diamond_gravity",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_diamond_laser": {
+ "ObjectID": "sign_diamond_laser",
+ "ObjectName": "sign_diamond_laser",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_diamond_quantum": {
+ "ObjectID": "sign_diamond_quantum",
+ "ObjectName": "sign_diamond_quantum",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_diamond_shrink": {
+ "ObjectID": "sign_diamond_shrink",
+ "ObjectName": "sign_diamond_shrink",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_office_layout_1": {
+ "ObjectID": "sign_office_layout_1",
+ "ObjectName": "sign_office_layout_1",
+ "ReadableName": "Map",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_breakroom_1": {
+ "ObjectID": "sign_short_breakroom_1",
+ "ObjectName": "sign_short_breakroom_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_breakroom_2": {
+ "ObjectID": "sign_short_breakroom_2",
+ "ObjectName": "sign_short_breakroom_2",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_carrot": {
+ "ObjectID": "sign_short_caution_carrot",
+ "ObjectName": "sign_short_caution_carrot",
+ "ReadableName": "Sign",
+ "Description": "I guess carrots aren't allowed",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_electrical": {
+ "ObjectID": "sign_short_caution_electrical",
+ "ObjectName": "sign_short_caution_electrical",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_gravity_1": {
+ "ObjectID": "sign_short_caution_gravity_1",
+ "ObjectName": "sign_short_caution_gravity_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_gravity_2": {
+ "ObjectID": "sign_short_caution_gravity_2",
+ "ObjectName": "sign_short_caution_gravity_2",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_quantum_1": {
+ "ObjectID": "sign_short_caution_quantum_1",
+ "ObjectName": "sign_short_caution_quantum_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_quantum_2": {
+ "ObjectID": "sign_short_caution_quantum_2",
+ "ObjectName": "sign_short_caution_quantum_2",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_restricted_1": {
+ "ObjectID": "sign_short_caution_restricted_1",
+ "ObjectName": "sign_short_caution_restricted_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_caution_shrink": {
+ "ObjectID": "sign_short_caution_shrink",
+ "ObjectName": "sign_short_caution_shrink",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_office_1": {
+ "ObjectID": "sign_short_office_1",
+ "ObjectName": "sign_short_office_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_poster_delwan_1": {
+ "ObjectID": "sign_short_poster_delwan_1",
+ "ObjectName": "sign_short_poster_delwan_1",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_poster_delwan_2": {
+ "ObjectID": "sign_short_poster_delwan_2",
+ "ObjectName": "sign_short_poster_delwan_2",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_poster_delwan_3": {
+ "ObjectID": "sign_short_poster_delwan_3",
+ "ObjectName": "sign_short_poster_delwan_3",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_poster_delwan_4": {
+ "ObjectID": "sign_short_poster_delwan_4",
+ "ObjectName": "sign_short_poster_delwan_4",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_poster_tam": {
+ "ObjectID": "sign_short_poster_tam",
+ "ObjectName": "sign_short_poster_tam",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_quantum_1": {
+ "ObjectID": "sign_short_quantum_1",
+ "ObjectName": "sign_short_quantum_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_quantum_2": {
+ "ObjectID": "sign_short_quantum_2",
+ "ObjectName": "sign_short_quantum_2",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_robotics_1": {
+ "ObjectID": "sign_short_robotics_1",
+ "ObjectName": "sign_short_robotics_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_robotics_2": {
+ "ObjectID": "sign_short_robotics_2",
+ "ObjectName": "sign_short_robotics_2",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_short_warehouse_1": {
+ "ObjectID": "sign_short_warehouse_1",
+ "ObjectName": "sign_short_warehouse_1",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_square_breakroom": {
+ "ObjectID": "sign_square_breakroom",
+ "ObjectName": "sign_square_breakroom",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_caution_carrot": {
+ "ObjectID": "sign_tall_caution_carrot",
+ "ObjectName": "sign_tall_caution_carrot",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_caution_electrical": {
+ "ObjectID": "sign_tall_caution_electrical",
+ "ObjectName": "sign_tall_caution_electrical",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_caution_freeze": {
+ "ObjectID": "sign_tall_caution_freeze",
+ "ObjectName": "sign_tall_caution_freeze",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_caution_laser": {
+ "ObjectID": "sign_tall_caution_laser",
+ "ObjectName": "sign_tall_caution_laser",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_caution_robotics": {
+ "ObjectID": "sign_tall_caution_robotics",
+ "ObjectName": "sign_tall_caution_robotics",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_caution_shrink": {
+ "ObjectID": "sign_tall_caution_shrink",
+ "ObjectName": "sign_tall_caution_shrink",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_poster_tam_1": {
+ "ObjectID": "sign_tall_poster_tam_1",
+ "ObjectName": "sign_tall_poster_tam_1",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "sign_tall_poster_tam_2": {
+ "ObjectID": "sign_tall_poster_tam_2",
+ "ObjectName": "sign_tall_poster_tam_2",
+ "ReadableName": "Poster",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SK_Veh_Pickup_01_ToolBox": {
+ "ObjectID": "SK_Veh_Pickup_01_ToolBox",
+ "ObjectName": "SK_Veh_Pickup_01_ToolBox",
+ "ReadableName": "Tool Box",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Bld_Door_02": {
+ "ObjectID": "SM_Bld_Door_02",
+ "ObjectName": "SM_Bld_Door_02",
+ "ReadableName": "Door",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Bld_Wall_Metal_Slide_02": {
+ "ObjectID": "SM_Bld_Wall_Metal_Slide_02",
+ "ObjectName": "SM_Bld_Wall_Metal_Slide_02",
+ "ReadableName": "Garage Door",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Bld_Wall_Window_Blinds_Open_04": {
+ "ObjectID": "SM_Bld_Wall_Window_Blinds_Open_04",
+ "ObjectName": "SM_Bld_Wall_Window_Blinds_Open_04",
+ "ReadableName": "Blinds",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Item_Clipboard_01": {
+ "ObjectID": "SM_Item_Clipboard_01",
+ "ObjectName": "SM_Item_Clipboard_01",
+ "ReadableName": "Clipboard",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_AirVent_01": {
+ "ObjectID": "SM_Prop_AirVent_01",
+ "ObjectName": "SM_Prop_AirVent_01",
+ "ReadableName": "Vent",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_AirVent_Wall_01": {
+ "ObjectID": "SM_Prop_AirVent_Wall_01",
+ "ObjectName": "SM_Prop_AirVent_Wall_01",
+ "ReadableName": "Vent",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_01": {
+ "ObjectID": "SM_Prop_Book_Group_01",
+ "ObjectName": "SM_Prop_Book_Group_01",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_02": {
+ "ObjectID": "SM_Prop_Book_Group_02",
+ "ObjectName": "SM_Prop_Book_Group_02",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_03": {
+ "ObjectID": "SM_Prop_Book_Group_03",
+ "ObjectName": "SM_Prop_Book_Group_03",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_04": {
+ "ObjectID": "SM_Prop_Book_Group_04",
+ "ObjectName": "SM_Prop_Book_Group_04",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_05": {
+ "ObjectID": "SM_Prop_Book_Group_05",
+ "ObjectName": "SM_Prop_Book_Group_05",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_06": {
+ "ObjectID": "SM_Prop_Book_Group_06",
+ "ObjectName": "SM_Prop_Book_Group_06",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_07": {
+ "ObjectID": "SM_Prop_Book_Group_07",
+ "ObjectName": "SM_Prop_Book_Group_07",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Group_08": {
+ "ObjectID": "SM_Prop_Book_Group_08",
+ "ObjectName": "SM_Prop_Book_Group_08",
+ "ReadableName": "Books",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Magazine_01": {
+ "ObjectID": "SM_Prop_Book_Magazine_01",
+ "ObjectName": "SM_Prop_Book_Magazine_01",
+ "ReadableName": "Magazine",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Book_Phone_Open_01": {
+ "ObjectID": "SM_Prop_Book_Phone_Open_01",
+ "ObjectName": "SM_Prop_Book_Phone_Open_01",
+ "ReadableName": "Book",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Buttons_02": {
+ "ObjectID": "SM_Prop_Buttons_02",
+ "ObjectName": "SM_Prop_Buttons_02",
+ "ReadableName": "Key Pad",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Buttons_05": {
+ "ObjectID": "SM_Prop_Buttons_05",
+ "ObjectName": "SM_Prop_Buttons_05",
+ "ReadableName": "Buttons",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Calender_01": {
+ "ObjectID": "SM_Prop_Calender_01",
+ "ObjectName": "SM_Prop_Calender_01",
+ "ReadableName": "Calendar",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Cart_01": {
+ "ObjectID": "SM_Prop_Cart_01",
+ "ObjectName": "SM_Prop_Cart_01",
+ "ReadableName": "Cart",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Certificate_01": {
+ "ObjectID": "SM_Prop_Certificate_01",
+ "ObjectName": "SM_Prop_Certificate_01",
+ "ReadableName": "Certificate",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Crate_Stack_01": {
+ "ObjectID": "SM_Prop_Crate_Stack_01",
+ "ObjectName": "SM_Prop_Crate_Stack_01",
+ "ReadableName": "Crates",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Drink_Dispenser_01": {
+ "ObjectID": "SM_Prop_Drink_Dispenser_01",
+ "ObjectName": "SM_Prop_Drink_Dispenser_01",
+ "ReadableName": "Cooler",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_FlatPackCardboardBoxes_03": {
+ "ObjectID": "SM_Prop_FlatPackCardboardBoxes_03",
+ "ObjectName": "SM_Prop_FlatPackCardboardBoxes_03",
+ "ReadableName": "Cardboard Boxes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_FlatPackCardboardBoxes_04": {
+ "ObjectID": "SM_Prop_FlatPackCardboardBoxes_04",
+ "ObjectName": "SM_Prop_FlatPackCardboardBoxes_04",
+ "ReadableName": "Cardboard Boxes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_FolderTray_01": {
+ "ObjectID": "SM_Prop_FolderTray_01",
+ "ObjectName": "SM_Prop_FolderTray_01",
+ "ReadableName": "Tray",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_FolderTray_02": {
+ "ObjectID": "SM_Prop_FolderTray_02",
+ "ObjectName": "SM_Prop_FolderTray_02",
+ "ReadableName": "Paper Tray",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_FolderTray_03": {
+ "ObjectID": "SM_Prop_FolderTray_03",
+ "ObjectName": "SM_Prop_FolderTray_03",
+ "ReadableName": "Tray",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_FolderTray_04": {
+ "ObjectID": "SM_Prop_FolderTray_04",
+ "ObjectName": "SM_Prop_FolderTray_04",
+ "ReadableName": "Paper Tray",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Holder_01": {
+ "ObjectID": "SM_Prop_Folder_Holder_01",
+ "ObjectName": "SM_Prop_Folder_Holder_01",
+ "ReadableName": "Folder Holder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Holder_02": {
+ "ObjectID": "SM_Prop_Folder_Holder_02",
+ "ObjectName": "SM_Prop_Folder_Holder_02",
+ "ReadableName": "Folder Holder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Holder_03": {
+ "ObjectID": "SM_Prop_Folder_Holder_03",
+ "ObjectName": "SM_Prop_Folder_Holder_03",
+ "ReadableName": "Folder Holder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Holder_04": {
+ "ObjectID": "SM_Prop_Folder_Holder_04",
+ "ObjectName": "SM_Prop_Folder_Holder_04",
+ "ReadableName": "Folder Holder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Manila_01": {
+ "ObjectID": "SM_Prop_Folder_Manila_01",
+ "ObjectName": "SM_Prop_Folder_Manila_01",
+ "ReadableName": "Folder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Manila_02": {
+ "ObjectID": "SM_Prop_Folder_Manila_02",
+ "ObjectName": "SM_Prop_Folder_Manila_02",
+ "ReadableName": "Folder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Manila_03": {
+ "ObjectID": "SM_Prop_Folder_Manila_03",
+ "ObjectName": "SM_Prop_Folder_Manila_03",
+ "ReadableName": "Folder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_Manila_04": {
+ "ObjectID": "SM_Prop_Folder_Manila_04",
+ "ObjectName": "SM_Prop_Folder_Manila_04",
+ "ReadableName": "Folder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_PVC_01": {
+ "ObjectID": "SM_Prop_Folder_PVC_01",
+ "ObjectName": "SM_Prop_Folder_PVC_01",
+ "ReadableName": "Folder",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Folder_PVC_02": {
+ "ObjectID": "SM_Prop_Folder_PVC_02",
+ "ObjectName": "SM_Prop_Folder_PVC_02",
+ "ReadableName": "Folders",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Lighting_Cable_Bulb_01": {
+ "ObjectID": "SM_Prop_Lighting_Cable_Bulb_01",
+ "ObjectName": "SM_Prop_Lighting_Cable_Bulb_01",
+ "ReadableName": "Light Bulb",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_NetCable_03": {
+ "ObjectID": "SM_Prop_NetCable_03",
+ "ObjectName": "SM_Prop_NetCable_03",
+ "ReadableName": "Cable Spool",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_NotePad_01": {
+ "ObjectID": "SM_Prop_NotePad_01",
+ "ObjectName": "SM_Prop_NotePad_01",
+ "ReadableName": "Notepad",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Oxygen_Tank": {
+ "ObjectID": "SM_Prop_Oxygen_Tank",
+ "ObjectName": "SM_Prop_Oxygen_Tank",
+ "ReadableName": "Water Tank",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Oxygen_Tank_Large": {
+ "ObjectID": "SM_Prop_Oxygen_Tank_Large",
+ "ObjectName": "SM_Prop_Oxygen_Tank_Large",
+ "ReadableName": "Water Tank",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_PalletStack_02": {
+ "ObjectID": "SM_Prop_PalletStack_02",
+ "ObjectName": "SM_Prop_PalletStack_02",
+ "ReadableName": "Pallets",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Papers_01": {
+ "ObjectID": "SM_Prop_Papers_01",
+ "ObjectName": "SM_Prop_Papers_01",
+ "ReadableName": "Papers",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_PaperTray_01_Full_01": {
+ "ObjectID": "SM_Prop_PaperTray_01_Full_01",
+ "ObjectName": "SM_Prop_PaperTray_01_Full_01",
+ "ReadableName": "Paper Tray",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Paper_04": {
+ "ObjectID": "SM_Prop_Paper_04",
+ "ObjectName": "SM_Prop_Paper_04",
+ "ReadableName": "Paper",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Paper_05": {
+ "ObjectID": "SM_Prop_Paper_05",
+ "ObjectName": "SM_Prop_Paper_05",
+ "ReadableName": "Paper",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Paper_06": {
+ "ObjectID": "SM_Prop_Paper_06",
+ "ObjectName": "SM_Prop_Paper_06",
+ "ReadableName": "Paper",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Paper_Pile_01": {
+ "ObjectID": "SM_Prop_Paper_Pile_01",
+ "ObjectName": "SM_Prop_Paper_Pile_01",
+ "ReadableName": "Stack of Papers",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Paper_Pile_03": {
+ "ObjectID": "SM_Prop_Paper_Pile_03",
+ "ObjectName": "SM_Prop_Paper_Pile_03",
+ "ReadableName": "Stack of Papers",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Plastic_Pipe_Spool_01": {
+ "ObjectID": "SM_Prop_Plastic_Pipe_Spool_01",
+ "ObjectName": "SM_Prop_Plastic_Pipe_Spool_01",
+ "ReadableName": "Wire Coil",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_PowerBoxes_01": {
+ "ObjectID": "SM_Prop_PowerBoxes_01",
+ "ObjectName": "SM_Prop_PowerBoxes_01",
+ "ReadableName": "Power Boxes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Powercable_01": {
+ "ObjectID": "SM_Prop_Powercable_01",
+ "ObjectName": "SM_Prop_Powercable_01",
+ "ReadableName": "Cable",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Powercable_02": {
+ "ObjectID": "SM_Prop_Powercable_02",
+ "ObjectName": "SM_Prop_Powercable_02",
+ "ReadableName": "Cable Spool",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Powercable_03": {
+ "ObjectID": "SM_Prop_Powercable_03",
+ "ObjectName": "SM_Prop_Powercable_03",
+ "ReadableName": "Cable",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Scales_01": {
+ "ObjectID": "SM_Prop_Scales_01",
+ "ObjectName": "SM_Prop_Scales_01",
+ "ReadableName": "Scale",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Server_Cabinet_01": {
+ "ObjectID": "SM_Prop_Server_Cabinet_01",
+ "ObjectName": "SM_Prop_Server_Cabinet_01",
+ "ReadableName": "Server Cabinet",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Server_Node_01": {
+ "ObjectID": "SM_Prop_Server_Node_01",
+ "ObjectName": "SM_Prop_Server_Node_01",
+ "ReadableName": "Server",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Table_02": {
+ "ObjectID": "SM_Prop_Table_02",
+ "ObjectName": "SM_Prop_Table_02",
+ "ReadableName": "Table",
+ "Description": "A wooden table",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "7e28ee99834b9a940aad57edd442451f",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": ["PLACE"],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 2.00865221, "y": 0.8724135, "z": 0.932905257 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_ToolBox_01": {
+ "ObjectID": "SM_Prop_ToolBox_01",
+ "ObjectName": "SM_Prop_ToolBox_01",
+ "ReadableName": "Tool Box",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Warehouse_Boxes_Stacked_03": {
+ "ObjectID": "SM_Prop_Warehouse_Boxes_Stacked_03",
+ "ObjectName": "SM_Prop_Warehouse_Boxes_Stacked_03",
+ "ReadableName": "Cardboard Boxes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Warehouse_Boxes_Stacked_04": {
+ "ObjectID": "SM_Prop_Warehouse_Boxes_Stacked_04",
+ "ObjectName": "SM_Prop_Warehouse_Boxes_Stacked_04",
+ "ReadableName": "Pallet",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Warehouse_Light_04": {
+ "ObjectID": "SM_Prop_Warehouse_Light_04",
+ "ObjectName": "SM_Prop_Warehouse_Light_04",
+ "ReadableName": "Light",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Warehouse_Platform_Trolley_01": {
+ "ObjectID": "SM_Prop_Warehouse_Platform_Trolley_01",
+ "ObjectName": "SM_Prop_Warehouse_Platform_Trolley_01",
+ "ReadableName": "Dolly",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Wirespool_01": {
+ "ObjectID": "SM_Prop_Wirespool_01",
+ "ObjectName": "SM_Prop_Wirespool_01",
+ "ReadableName": "Cable Spool",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Prop_Wirespool_Small_01": {
+ "ObjectID": "SM_Prop_Wirespool_Small_01",
+ "ObjectName": "SM_Prop_Wirespool_Small_01",
+ "ReadableName": "Cable Spool",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Sign_Exit_02": {
+ "ObjectID": "SM_Sign_Exit_02",
+ "ObjectName": "SM_Sign_Exit_02",
+ "ReadableName": "Sign",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Tool_Buffer_01_Battery": {
+ "ObjectID": "SM_Tool_Buffer_01_Battery",
+ "ObjectName": "SM_Tool_Buffer_01_Battery",
+ "ReadableName": "Battery",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Tool_Drill_Chuck_01": {
+ "ObjectID": "SM_Tool_Drill_Chuck_01",
+ "ObjectName": "SM_Tool_Drill_Chuck_01",
+ "ReadableName": "Drill Chuck",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "SM_Tool_Handsaw_01": {
+ "ObjectID": "SM_Tool_Handsaw_01",
+ "ObjectName": "SM_Tool_Handsaw_01",
+ "ReadableName": "Handsaw",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Spoon_01": {
+ "ObjectID": "Spoon_01",
+ "ObjectName": "Spoon_01",
+ "ReadableName": "Spoon",
+ "Description": "Spoon",
+ "MaxSpawns": 6,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00b8a367c1e547d419a6a941fce88d1d",
+ "ObjectSalientProperties": ["Small", "Pointy"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.05445816, "y": 0.02623532, "z": 0.222290844 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "StickyNote": {
+ "ObjectID": "StickyNote",
+ "ObjectName": "StickyNote",
+ "ReadableName": "Sticky Note",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.143346861, "y": 0.155019984, "z": 0.0117828362 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "TableRoundSmall_02": {
+ "ObjectID": "TableRoundSmall_02",
+ "ObjectName": "TableRoundSmall_02",
+ "ReadableName": "Table Round Small",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "77b96f2149a81dd4cbd6c05718db3bd5",
+ "ObjectSalientProperties": ["Small", "Round", "Metal"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Gray", "White"],
+ "ObjectSize": { "x": 0.777677, "y": 0.7500001, "z": 0.777677 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "TableRound_02": {
+ "ObjectID": "TableRound_02",
+ "ObjectName": "TableRound_02",
+ "ReadableName": "Table",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "4bedf7e2d9c60ca48a9fb6c0ed8532ef",
+ "ObjectSalientProperties": ["Big", "Round", "Metal"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Gray", "White"],
+ "ObjectSize": { "x": 1.29612839, "y": 0.7500001, "z": 1.29612839 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Record_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Record_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": ["Record_01"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Table_Metal_01": {
+ "ObjectID": "Table_Metal_01",
+ "ObjectName": "Table_Metal_01",
+ "ReadableName": "Table",
+ "Description": "This is a table.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Shiny", "Big", "Flat", "Metal"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 2.3223114, "y": 0.9217651, "z": 1.07302332 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "TAMPrototypeHead_01": {
+ "ObjectID": "TAMPrototypeHead_01",
+ "ObjectName": "TAMPrototypeHead_01",
+ "ReadableName": "TAM Prototype",
+ "Description": "It's an older model of me.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["POWERABLE", "TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.07180214, "y": 0.654439449, "z": 1.61873627 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "TeslaCoil": {
+ "ObjectID": "TeslaCoil",
+ "ObjectName": "TeslaCoil",
+ "ReadableName": "Tesla Coil",
+ "Description": "This is a tesla coil.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.9394474, "y": 1.80708909, "z": 1.09014606 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "TeslaCoil_Small": {
+ "ObjectID": "TeslaCoil_Small",
+ "ObjectName": "TeslaCoil_Small",
+ "ReadableName": "Tesla Coil",
+ "Description": "This is a toy model of a tesla coil.",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": null,
+ "ObjectSalientProperties": null,
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": null,
+ "ObjectColors": null,
+ "ObjectSize": { "x": 0.0, "y": 0.0, "z": 0.0 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Toaster_02": {
+ "ObjectID": "Toaster_02",
+ "ObjectName": "Toaster_02",
+ "ReadableName": "Toaster",
+ "Description": "",
+ "MaxSpawns": 0,
+ "MaxStack": 1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "68d2ab6418fc12d429c8b207e73deacb",
+ "ObjectSalientProperties": ["Shiny", "Small", "Metal"],
+ "ObjectProperties": ["TOGGLEABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": ["USE", "PLACE"],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.8090372, "y": 0.5126033, "z": 0.452452838 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["BreadSlice_01", "Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["BreadSlice_01", "Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["BreadSlice_01", "Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["BreadSlice_01", "Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "Toast_01": {
+ "ObjectID": "Toast_01",
+ "ObjectName": "Toast_01",
+ "ReadableName": "Toast",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "c5eb6751df985194489998af86e43b04",
+ "ObjectSalientProperties": ["Small"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP"],
+ "ObjectColors": ["Black", "Brown"],
+ "ObjectSize": { "x": 0.172020927, "y": 0.0219130944, "z": 0.1778479 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Toast_02": {
+ "ObjectID": "Toast_02",
+ "ObjectName": "Toast_02",
+ "ReadableName": "Toast",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "725279a28b0718a4b95bfc79ed26342d",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP"],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.169899508, "y": 0.0219130982, "z": 0.177847922 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Toast_03": {
+ "ObjectID": "Toast_03",
+ "ObjectName": "Toast_03",
+ "ReadableName": "Toast",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "2899f3ee9fc52984ea4e35ddebefdc4c",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP"],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.172020927, "y": 0.0219130944, "z": 0.1778479 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Toast_04": {
+ "ObjectID": "Toast_04",
+ "ObjectName": "Toast_04",
+ "ReadableName": "Toast",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "e88227f25d74eab46a1777dfe7f53c26",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": ["PICKUP"],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 0.172020927, "y": 0.0219130944, "z": 0.1778479 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Toast_04_Jam": {
+ "ObjectID": "Toast_04_Jam",
+ "ObjectName": "Toast_04_Jam",
+ "ReadableName": "Toast",
+ "Description": "Toast with jam.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "e67029de26037044b80ce9de991c8167",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red"],
+ "ObjectSize": { "x": 0.170894772, "y": 0.03726736, "z": 0.176492691 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Toast_04_PBJ": {
+ "ObjectID": "Toast_04_PBJ",
+ "ObjectName": "Toast_04_PBJ",
+ "ReadableName": "Toast",
+ "Description": "Toast with peanut butter and jam.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "894a749a8a3266440a777dcd13c0affd",
+ "ObjectSalientProperties": ["Small", "Square", "Flat"],
+ "ObjectProperties": ["PICKUPABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown", "Red"],
+ "ObjectSize": { "x": 0.170894772, "y": 0.03726736, "z": 0.176492691 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "ToyBed": {
+ "ObjectID": "ToyBed",
+ "ObjectName": "ToyBed",
+ "ReadableName": "Toy Bed",
+ "Description": "Nice toy.",
+ "MaxSpawns": 0,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Small", "Square"],
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red", "White"],
+ "ObjectSize": { "x": 0.223474249, "y": 0.07516843, "z": 0.125588149 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "TrashCan_01": {
+ "ObjectID": "TrashCan_01",
+ "ObjectName": "TrashCan_01",
+ "ReadableName": "Trash Can",
+ "Description": "Trash can",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "f4092f6feeade9f4d9000840db738738",
+ "ObjectSalientProperties": ["Round", "Metal"],
+ "ObjectProperties": ["RECEPTACLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray"],
+ "ObjectSize": { "x": 0.5241046, "y": 0.70953536, "z": 0.5039929 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Trophy01": {
+ "ObjectID": "Trophy01",
+ "ObjectName": "Trophy01",
+ "ReadableName": "Trophy",
+ "Description": "A trophy. Looks like somebody was the \"#1 Customer at Joey's Trophy Hut\"!",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "b030f9319ef60eb458ab2a3f10580104",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["PICKUPABLE", "BREAKABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.316952169, "y": 0.467798859, "z": 0.2424121 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "VendingMachine_01": {
+ "ObjectID": "VendingMachine_01",
+ "ObjectName": "VendingMachine_01",
+ "ReadableName": "Vending Machine",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "71331e8b3c78f7345b1087cc75b69c5a",
+ "ObjectSalientProperties": ["Big", "Square", "Metal", "Glass"],
+ "ObjectProperties": ["RECEPTACLE", "OPENABLE", "POWERABLE", "USABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black", "Gray"],
+ "ObjectSize": { "x": 2.818795, "y": 1.98849654, "z": 0.830685854 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": ["Hammer"],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ },
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "VendingMachine_01_B4_Button": {
+ "ObjectID": "VendingMachine_01_B4_Button",
+ "ObjectName": "VendingMachine_01_B4_Button",
+ "ReadableName": "B4 Button",
+ "Description": "It says B4 on the button.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "afb33bca531242745ba3f2ca6079688f",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.181225583, "y": 0.04514214, "z": 0.151133418 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "VendingMachine_01_E5_Button": {
+ "ObjectID": "VendingMachine_01_E5_Button",
+ "ObjectName": "VendingMachine_01_E5_Button",
+ "ReadableName": "E5 Button",
+ "Description": "It says E5 on the button.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "54613446576ee0b4ea384e45ace3b6d2",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.3798828, "y": 0.03203773, "z": 0.3591652 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "VendingMachine_01_E7_Button": {
+ "ObjectID": "VendingMachine_01_E7_Button",
+ "ObjectName": "VendingMachine_01_E7_Button",
+ "ReadableName": "E7 Button",
+ "Description": "It says E7 on the button.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "931935a02ceba66438e93679993aef40",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.197540283, "y": 0.0796147138, "z": 0.183262259 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "VendingMachine_01_M8_Button": {
+ "ObjectID": "VendingMachine_01_M8_Button",
+ "ObjectName": "VendingMachine_01_M8_Button",
+ "ReadableName": "M8 Button",
+ "Description": "It says M8 on the button.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "0dd04934f03a0444fa275258a8d88e49",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.295245349, "y": 0.0587849, "z": 0.191684529 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "V_Monitor_Embiggenator": {
+ "ObjectID": "V_Monitor_Embiggenator",
+ "ObjectName": "V_Monitor_Embiggenator",
+ "ReadableName": "Computer",
+ "Description": "Embiggenator Monitor",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["POWERABLE", "TOGGLEABLE", "RECEPTACLE", "INFECTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Pink"],
+ "ObjectSize": { "x": 0.366075516, "y": 0.4671111, "z": 0.354125977 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "V_Monitor_FreezeRay": {
+ "ObjectID": "V_Monitor_FreezeRay",
+ "ObjectName": "V_Monitor_FreezeRay",
+ "ReadableName": "Computer",
+ "Description": "Looks to be the controls for some sort of freeze ray.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE", "RECEPTACLE", "INFECTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Blue"],
+ "ObjectSize": { "x": 0.364182472, "y": 0.4671111, "z": 0.375793457 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": ["ObjectColors"]
+ },
+ "V_Monitor_Gravity": {
+ "ObjectID": "V_Monitor_Gravity",
+ "ObjectName": "V_Monitor_Gravity",
+ "ReadableName": "Computer",
+ "Description": "Looks like the controls for a gravity pad.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE", "RECEPTACLE", "INFECTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Green"],
+ "ObjectSize": { "x": 0.3980732, "y": 0.4671111, "z": 0.387317657 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": ["ObjectColors"]
+ },
+ "V_Monitor_Laser": {
+ "ObjectID": "V_Monitor_Laser",
+ "ObjectName": "V_Monitor_Laser",
+ "ReadableName": "Computer",
+ "Description": "Looks to be the controls for a laser.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE", "RECEPTACLE", "INFECTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Red"],
+ "ObjectSize": { "x": 0.353824615, "y": 0.4671111, "z": 0.365779877 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": ["ObjectColors"]
+ },
+ "V_Monitor_Portal": {
+ "ObjectID": "V_Monitor_Portal",
+ "ObjectName": "V_Monitor_Portal",
+ "ReadableName": "Computer",
+ "Description": "Looks like the controls for a portal generator of some sort.",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["TOGGLEABLE", "POWERABLE", "RECEPTACLE", "INFECTABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 0.385942459, "y": 0.4671111, "z": 0.374710083 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": true,
+ "KeyedList": ["Floppy_AntiVirus", "Floppy_Virus"],
+ "BlacklistedItems": []
+ }
+ ]
+ },
+ "use_properties": []
+ },
+ "WallClock_01": {
+ "ObjectID": "WallClock_01",
+ "ObjectName": "WallClock_01",
+ "ReadableName": "Clock",
+ "Description": "Wall clock",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "9e72f8d1fecd01b4e92b1fff2be1a241",
+ "ObjectSalientProperties": ["Round", "Flat"],
+ "ObjectProperties": ["DECOR"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black", "White"],
+ "ObjectSize": { "x": 0.391294956, "y": 0.372143865, "z": 0.0541722775 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Warehouse_Boxes": {
+ "ObjectID": "Warehouse_Boxes",
+ "ObjectName": "Warehouse_Boxes",
+ "ReadableName": "Boxes",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Brown"],
+ "ObjectSize": { "x": 1.443038, "y": 1.26503778, "z": 1.3912046 },
+ "VerbTests": [],
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "WarningSign_01": {
+ "ObjectID": "WarningSign_01",
+ "ObjectName": "WarningSign_01",
+ "ReadableName": "Warning Sign",
+ "Description": "Warning sign",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "ccfc701585165694b8209a494f91f90b",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Yellow"],
+ "ObjectSize": { "x": 0.5321758, "y": 0.8021586, "z": 0.6484621 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "WaterCooler_01": {
+ "ObjectID": "WaterCooler_01",
+ "ObjectName": "WaterCooler_01",
+ "ReadableName": "Water Cooler",
+ "Description": "Lots of conversations have been had here.",
+ "MaxSpawns": 3,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Gray", "White"],
+ "ObjectSize": { "x": 0.5695915, "y": 1.6809, "z": 0.472654343 },
+ "VerbTests": [],
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "WaterPuddle_01": {
+ "ObjectID": "WaterPuddle_01",
+ "ObjectName": "WaterPuddle_01",
+ "ReadableName": "Puddle",
+ "Description": "",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "5221ec39054aec94fa258519de936617",
+ "ObjectSalientProperties": ["Big", "Round"],
+ "ObjectProperties": ["POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Blue"],
+ "ObjectSize": { "x": 0.75367403, "y": 0.0, "z": 0.81277585 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "WhiteBoard_01": {
+ "ObjectID": "WhiteBoard_01",
+ "ObjectName": "WhiteBoard_01",
+ "ReadableName": "White Board",
+ "Description": "White board",
+ "MaxSpawns": -1,
+ "MaxStack": -1,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "9977a5317ae4976459a490ddd9014dd9",
+ "ObjectSalientProperties": ["Square", "Flat"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["Black", "White"],
+ "ObjectSize": { "x": 1.49734092, "y": 1.02334523, "z": 0.05674995 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Whiteboard_CoffeeUnmaker": {
+ "ObjectID": "Whiteboard_CoffeeUnmaker",
+ "ObjectName": "Whiteboard_CoffeeUnmaker",
+ "ReadableName": "White Board",
+ "Description": "What will they think of next? Juice unsqueezers?",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0822525, "y": 1.27918148, "z": 1.8716774 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "Whiteboard_YesterdayMachine": {
+ "ObjectID": "Whiteboard_YesterdayMachine",
+ "ObjectName": "Whiteboard_YesterdayMachine",
+ "ReadableName": "White Board",
+ "Description": "How antiquated. Time travel sure has come a long way.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "00000000000000000000000000000000",
+ "ObjectSalientProperties": ["Big", "Square"],
+ "ObjectProperties": [],
+ "ObjectVerbs": [],
+ "ObjectColors": ["White"],
+ "ObjectSize": { "x": 0.0822525, "y": 1.27918148, "z": 1.87167549 },
+ "VerbTests": null,
+ "ReceptacleInformation": { "ReceptacleAnchorPoints": null },
+ "use_properties": []
+ },
+ "YesterdayMachine_01": {
+ "ObjectID": "YesterdayMachine_01",
+ "ObjectName": "YesterdayMachine_01",
+ "ReadableName": "Time Machine",
+ "Description": "It's a machine that will take an object back in time 24 hours.",
+ "MaxSpawns": 1,
+ "MaxStack": 0,
+ "FocusPriority": 0,
+ "ObjectMeshGUID": "dd91d95569b3c824c8457d2d1cf192b5",
+ "ObjectSalientProperties": [],
+ "ObjectProperties": ["OPENABLE", "TOGGLEABLE", "RECEPTACLE", "POWERABLE"],
+ "ObjectVerbs": [],
+ "ObjectColors": [],
+ "ObjectSize": { "x": 1.658149, "y": 0.506925344, "z": 1.3111819 },
+ "VerbTests": null,
+ "ReceptacleInformation": {
+ "ReceptacleAnchorPoints": [
+ {
+ "AllowedSpawns": [],
+ "isKeyed": false,
+ "KeyedList": [],
+ "BlacklistedItems": [
+ "Cake_02",
+ "Laser_Tip",
+ "Laser_Tip_Broken",
+ "DeskFan_New_01",
+ "DeskFan_Broken_01",
+ "Cereal_Box_01",
+ "MilkCarton_01",
+ "CoffeePot_01",
+ "Radio_01",
+ "Trophy01",
+ "Computer_Monitor_Broken",
+ "Computer_Monitor_New"
+ ]
+ }
+ ]
+ },
+ "use_properties": []
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/arena_definitions.json b/src/emma_datasets/constants/simbot/arena_definitions.json
new file mode 100644
index 0000000..c2c804c
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/arena_definitions.json
@@ -0,0 +1,679 @@
+{
+ "image_width": 300,
+ "image_height": 300,
+ "room_names": [
+ "BreakRoom",
+ "Lab1",
+ "Lab2",
+ "MainOffice",
+ "Reception",
+ "SmallOffice",
+ "Warehouse"
+ ],
+ "action_list": [
+ "Break",
+ "Burn",
+ "CameraChange",
+ "Clean",
+ "Close",
+ "Examine",
+ "Fill",
+ "Goto",
+ "Look",
+ "Move",
+ "Open",
+ "Pickup",
+ "Place",
+ "Pour",
+ "Rotate",
+ "Scan",
+ "Throw",
+ "Toggle",
+ "Use",
+ "Use2"
+ ],
+ "label_to_idx": {
+ "Background": 0,
+ "Action Figure": 1,
+ "Apple": 2,
+ "Banana": 3,
+ "Battery": 4,
+ "Bed Toy": 5,
+ "Blinds": 6,
+ "Board": 7,
+ "Books": 8,
+ "Bowl": 9,
+ "Boxes": 10,
+ "Bread": 11,
+ "Burger": 12,
+ "Button": 13,
+ "Cabinet": 14,
+ "Cable": 15,
+ "Cake": 16,
+ "Calendar": 17,
+ "Can": 18,
+ "Candy Bar": 19,
+ "Carrot": 20,
+ "Cart": 21,
+ "Cereal Box": 22,
+ "Chair": 23,
+ "Circuit Board": 24,
+ "Clamp": 25,
+ "Clipboard": 26,
+ "Clock": 27,
+ "Coffee Beans": 28,
+ "Coffee Maker": 29,
+ "Coffee Pot": 30,
+ "Coffee Unmaker": 31,
+ "Color Changer": 32,
+ "Computer": 33,
+ "Control Panel": 34,
+ "Cooler": 35,
+ "Couch": 36,
+ "Counter": 37,
+ "Counter Top": 38,
+ "Crate": 39,
+ "Cup": 40,
+ "Cutting Board": 41,
+ "Dart": 42,
+ "Dart Board": 43,
+ "Donut": 44,
+ "Door": 45,
+ "Door Sign": 46,
+ "Drawer": 47,
+ "Drill Chuck": 48,
+ "Embiggenator": 49,
+ "Everything's A Carrot Machine": 50,
+ "Fan": 51,
+ "Fire Alarm": 52,
+ "Fire Extinguisher": 53,
+ "Floppy Disk": 54,
+ "Folder": 55,
+ "Folder Holder": 56,
+ "Fork": 57,
+ "Forklift": 58,
+ "Freeze Ray": 59,
+ "Freezer": 60,
+ "Fridge": 61,
+ "Fuse Box": 62,
+ "Generator": 63,
+ "Golf Ball": 64,
+ "Golf Club": 65,
+ "Gravity Pad": 66,
+ "Hammer": 67,
+ "Handsaw": 68,
+ "Jar": 69,
+ "Keyboard": 70,
+ "Knife": 71,
+ "Laser": 72,
+ "Laser Tip": 73,
+ "Laser Toy": 74,
+ "Lever": 75,
+ "Lid": 76,
+ "Light": 77,
+ "Light Bulb": 78,
+ "Light Switch": 79,
+ "Machine Panel": 80,
+ "Map": 81,
+ "Microwave": 82,
+ "Milk": 83,
+ "Mug": 84,
+ "Notepad": 85,
+ "Oxygen Tank": 86,
+ "Pallets": 87,
+ "Paper": 88,
+ "Pear": 89,
+ "Pen": 90,
+ "Photocopier": 91,
+ "Pie": 92,
+ "Plant": 93,
+ "Plate": 94,
+ "Poster": 95,
+ "Power Boxes": 96,
+ "Print Tube": 97,
+ "Printer": 98,
+ "Printer Cartridge": 99,
+ "Puddle": 100,
+ "Radio": 101,
+ "Record": 102,
+ "Robot Arm": 103,
+ "Sandwich": 104,
+ "Scale": 105,
+ "Screwdriver": 106,
+ "Server": 107,
+ "Shelf": 108,
+ "Sink": 109,
+ "Spoon": 110,
+ "Sticky Note": 111,
+ "Stool": 112,
+ "Table": 113,
+ "Tank": 114,
+ "Tape": 115,
+ "Target": 116,
+ "Tesla Coil": 117,
+ "Time Machine": 118,
+ "Toaster": 119,
+ "Tool Board": 120,
+ "Toolbox": 121,
+ "Trash Can": 122,
+ "Tray": 123,
+ "Trolley": 124,
+ "Trophy": 125,
+ "Vending Machine": 126,
+ "Vent": 127,
+ "Wall Shelf": 128,
+ "Warning Sign": 129,
+ "Water Barrel": 130,
+ "Whiteboard": 131,
+ "Unassigned": 132
+ },
+ "idx_to_label": {
+ "0": "Background",
+ "1": "Action Figure",
+ "2": "Apple",
+ "3": "Banana",
+ "4": "Battery",
+ "5": "Bed Toy",
+ "6": "Blinds",
+ "7": "Board",
+ "8": "Books",
+ "9": "Bowl",
+ "10": "Boxes",
+ "11": "Bread",
+ "12": "Burger",
+ "13": "Button",
+ "14": "Cabinet",
+ "15": "Cable",
+ "16": "Cake",
+ "17": "Calendar",
+ "18": "Can",
+ "19": "Candy Bar",
+ "20": "Carrot",
+ "21": "Cart",
+ "22": "Cereal Box",
+ "23": "Chair",
+ "24": "Circuit Board",
+ "25": "Clamp",
+ "26": "Clipboard",
+ "27": "Clock",
+ "28": "Coffee Beans",
+ "29": "Coffee Maker",
+ "30": "Coffee Pot",
+ "31": "Coffee Unmaker",
+ "32": "Color Changer",
+ "33": "Computer",
+ "34": "Control Panel",
+ "35": "Cooler",
+ "36": "Couch",
+ "37": "Counter",
+ "38": "Counter Top",
+ "39": "Crate",
+ "40": "Cup",
+ "41": "Cutting Board",
+ "42": "Dart",
+ "43": "Dart Board",
+ "44": "Donut",
+ "45": "Door",
+ "46": "Door Sign",
+ "47": "Drawer",
+ "48": "Drill Chuck",
+ "49": "Embiggenator",
+ "50": "Everything's A Carrot Machine",
+ "51": "Fan",
+ "52": "Fire Alarm",
+ "53": "Fire Extinguisher",
+ "54": "Floppy Disk",
+ "55": "Folder",
+ "56": "Folder Holder",
+ "57": "Fork",
+ "58": "Forklift",
+ "59": "Freeze Ray",
+ "60": "Freezer",
+ "61": "Fridge",
+ "62": "Fuse Box",
+ "63": "Generator",
+ "64": "Golf Ball",
+ "65": "Golf Club",
+ "66": "Gravity Pad",
+ "67": "Hammer",
+ "68": "Handsaw",
+ "69": "Jar",
+ "70": "Keyboard",
+ "71": "Knife",
+ "72": "Laser",
+ "73": "Laser Tip",
+ "74": "Laser Toy",
+ "75": "Lever",
+ "76": "Lid",
+ "77": "Light",
+ "78": "Light Bulb",
+ "79": "Light Switch",
+ "80": "Machine Panel",
+ "81": "Map",
+ "82": "Microwave",
+ "83": "Milk",
+ "84": "Mug",
+ "85": "Notepad",
+ "86": "Oxygen Tank",
+ "87": "Pallets",
+ "88": "Paper",
+ "89": "Pear",
+ "90": "Pen",
+ "91": "Photocopier",
+ "92": "Pie",
+ "93": "Plant",
+ "94": "Plate",
+ "95": "Poster",
+ "96": "Power Boxes",
+ "97": "Print Tube",
+ "98": "Printer",
+ "99": "Printer Cartridge",
+ "100": "Puddle",
+ "101": "Radio",
+ "102": "Record",
+ "103": "Robot Arm",
+ "104": "Sandwich",
+ "105": "Scale",
+ "106": "Screwdriver",
+ "107": "Server",
+ "108": "Shelf",
+ "109": "Sink",
+ "110": "Spoon",
+ "111": "Sticky Note",
+ "112": "Stool",
+ "113": "Table",
+ "114": "Tank",
+ "115": "Tape",
+ "116": "Target",
+ "117": "Tesla Coil",
+ "118": "Time Machine",
+ "119": "Toaster",
+ "120": "Tool Board",
+ "121": "Toolbox",
+ "122": "Trash Can",
+ "123": "Tray",
+ "124": "Trolley",
+ "125": "Trophy",
+ "126": "Vending Machine",
+ "127": "Vent",
+ "128": "Wall Shelf",
+ "129": "Warning Sign",
+ "130": "Water Barrel",
+ "131": "Whiteboard",
+ "132": "Unassigned"
+ },
+ "asset_to_label": {
+ "AP_Bld_Ceiling_Aircon_01": "Vent",
+ "AP_Bld_Wall_Glass_Large_Door_01": "Door",
+ "AP_Item_Tape_01": "Tape",
+ "AP_Item_Tool_Board": "Tool Board",
+ "AP_Prop_Barrel_Open_01": "Water Barrel",
+ "AP_Prop_Barrel_Water_01": "Water Barrel",
+ "AP_Prop_Bin_Rubbish_01": "Trash Can",
+ "AP_Prop_Bucket_02": "Trash Can",
+ "AP_Prop_Cabinets_01": "Cabinet",
+ "AP_Prop_CardboardBox_Open_05": "Boxes",
+ "AP_Prop_CardboardBox_Stack_02": "Boxes",
+ "AP_Prop_Cellotape_01": "Tape",
+ "AP_Prop_CorkBoard_02": "Board",
+ "AP_Prop_Couch_02": "Couch",
+ "AP_Prop_Couch_06": "Couch",
+ "AP_Prop_Desk_Blue": "Table",
+ "AP_Prop_Desk_Green": "Table",
+ "AP_Prop_Desk_Green_model": "Table",
+ "AP_Prop_Desk_Red": "Table",
+ "AP_Prop_Desk_Red_model": "Table",
+ "AP_Prop_Desk_Yellow": "Table",
+ "AP_Prop_Fire_Extinguisher_01": "Fire Extinguisher",
+ "AP_Prop_Folder_PVC_02": "Folder",
+ "AP_Prop_Generator_Large_02": "Generator",
+ "AP_Prop_Lab_Clamp_02_Arm_01": "Clamp",
+ "AP_Prop_Lab_MachinePanel_01": "Machine Panel",
+ "AP_Prop_Lab_MachinePanel_02": "Machine Panel",
+ "AP_Prop_Lab_Tank_01": "Tank",
+ "AP_Prop_Lab_Tank_02": "Tank",
+ "AP_Prop_Minigolf_Ball_01": "Golf Ball",
+ "AP_Prop_Minigolf_Club_01": "Golf Club",
+ "AP_Prop_Note_05": "Sticky Note",
+ "AP_Prop_PaperTray_01_Full_01": "Tray",
+ "AP_Prop_Pen_01": "Pen",
+ "AP_Prop_Pen_03": "Pen",
+ "AP_Prop_Pen_06": "Pen",
+ "AP_Prop_Photocopier_01": "Photocopier",
+ "AP_Prop_Plant_01": "Plant",
+ "AP_Prop_Plant_09": "Plant",
+ "AP_Prop_Print_Tube_01": "Print Tube",
+ "AP_Prop_Safety_Barrier_02": "Warning Sign",
+ "AP_Prop_Shelf_06": "Shelf",
+ "AP_Prop_Shelf_Wall_04": "Wall Shelf",
+ "AP_Prop_Shelf_Wall_FreezeRay": "Wall Shelf",
+ "AP_Prop_Shelf_Wall_Laser": "Wall Shelf",
+ "AP_Prop_Sign_OutofOrder_01": "Door Sign",
+ "AP_Prop_Target_Circle_01": "Target",
+ "AP_Prop_Whiteboard_Devices_03": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_04": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_05": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_06": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_07": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_08": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_09": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_10": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_11": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_12": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_13": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_14": "Whiteboard",
+ "AP_Prop_Whiteboard_Devices_15": "Whiteboard",
+ "AP_Tool_Buffer_01_Battery": "Battery",
+ "ActionFigure": "Action Figure",
+ "Apple": "Apple",
+ "AppleSlice_01": "Apple",
+ "BananaBunch_01": "Banana",
+ "Banana_01": "Banana",
+ "Bookshelf_Wooden_01": "Shelf",
+ "Bowl_01": "Bowl",
+ "BreadLoaf": "Bread",
+ "BreadSlice_01": "Bread",
+ "Broken_Cord_01": "Cable",
+ "Burger_04": "Burger",
+ "CableFrayed_01": "Cable",
+ "CakeSlice_02": "Cake",
+ "Cake_02": "Cake",
+ "CanSodaNew_01": "Can",
+ "CanSodaNew_Crushed_01": "Can",
+ "CanSodaNew_Open_01": "Can",
+ "CanSoda_01": "Can",
+ "CandyBar_01": "Candy Bar",
+ "CandyJar_01": "Jar",
+ "Carrot_01": "Carrot",
+ "Cereal_Box_01": "Cereal Box",
+ "CoffeeBeans_01": "Coffee Beans",
+ "CoffeeCup_Lid_01": "Lid",
+ "CoffeeCup_Open_Empty_01": "Cup",
+ "CoffeeCup_Open_Empty_02": "Cup",
+ "CoffeeMaker_01": "Coffee Maker",
+ "CoffeeMug_Boss": "Mug",
+ "CoffeeMug_Yellow": "Mug",
+ "CoffeePot_01": "Coffee Pot",
+ "CoffeeUnMaker_01": "Coffee Unmaker",
+ "ColorChangerStation": "Color Changer",
+ "ColorChanger_Button_Blue": "Button",
+ "ColorChanger_Button_Green": "Button",
+ "ColorChanger_Button_Red": "Button",
+ "Computer_Monitor_01": "Computer",
+ "Computer_Monitor_Broken": "Computer",
+ "Computer_Monitor_New": "Computer",
+ "CounterBase_03": "Counter",
+ "Cutting_Board": "Cutting Board",
+ "Dart": "Dart",
+ "DartBoard": "Dart Board",
+ "Deembiggenator_Crates": "Crate",
+ "DeskFan_Broken_01": "Fan",
+ "DeskFan_New_01": "Fan",
+ "Desk_01": "Table",
+ "Donut_01": "Donut",
+ "Door_01": "Door",
+ "EAC_Machine": "Everything's A Carrot Machine",
+ "Embiggenator": "Embiggenator",
+ "EmptyPaperTray": "Tray",
+ "FireAlarm_01": "Fire Alarm",
+ "FireExtinguisher_01": "Fire Extinguisher",
+ "Floppy_AntiVirus": "Floppy Disk",
+ "Floppy_AntiVirus_Broken": "Floppy Disk",
+ "Floppy_Virus": "Floppy Disk",
+ "Floppy_Virus_Broken": "Floppy Disk",
+ "FoodPlate_01": "Plate",
+ "ForkLift": "Forklift",
+ "Fork_01": "Fork",
+ "Fork_Lift": "Forklift",
+ "FreezeRay": "Freeze Ray",
+ "FridgeLower_02": "Fridge",
+ "FridgeUpper_02": "Freezer",
+ "FulllPaperTray_01": "Tray",
+ "FuseBox_01": "Fuse Box",
+ "FuseBox_01_Lever": "Lever",
+ "FuseBox_02": "Fuse Box",
+ "GravityPad": "Gravity Pad",
+ "Hammer": "Hammer",
+ "Handsaw": "Handsaw",
+ "Jar_Jam_01": "Jar",
+ "Jar_PeanutButter_01": "Jar",
+ "Keyboard": "Keyboard",
+ "KitchenCabinet_01": "Cabinet",
+ "KitchenCabinet_01_Trapped": "Cabinet",
+ "KitchenCabinet_02": "Cabinet",
+ "KitchenCounter01": "Counter",
+ "KitchenCounterBase_02": "Counter",
+ "KitchenCounterBase_03": "Counter",
+ "KitchenCounterDrawer_02": "Drawer",
+ "KitchenCounterDrawer_03": "Drawer",
+ "KitchenCounterSink_01": "Sink",
+ "KitchenCounterTop_02": "Counter Top",
+ "KitchenStool_01": "Stool",
+ "Knife_01": "Knife",
+ "Lab_Terminal": "Computer",
+ "Laser": "Laser",
+ "LaserBase_toy": "Laser Toy",
+ "Laser_CircuitBoard": "Circuit Board",
+ "Laser_ControlPanel": "Control Panel",
+ "Laser_Tip": "Laser Tip",
+ "Laser_Tip_Broken": "Laser Tip",
+ "LightSwitch_01": "Light Switch",
+ "ManagerDesk": "Table",
+ "Manager_Chair": "Chair",
+ "Microwave_01": "Microwave",
+ "MilkCarton_01": "Milk",
+ "MissionItemHolder": "Unassigned",
+ "Office_Chair": "Chair",
+ "PBJ_Sandwich": "Sandwich",
+ "PackingBox": "Boxes",
+ "PaperCup_01": "Cup",
+ "PaperCup_Crushed_01": "Cup",
+ "Pear_01": "Pear",
+ "PieFruitSlice_01": "Pie",
+ "PieFruit_01": "Pie",
+ "PinBoard_01": "Board",
+ "PinBoard_02": "Board",
+ "PortalGenerator": "Generator",
+ "PowerOutlet_01": "Outlet",
+ "Printer_3D": "Printer",
+ "Printer_Cartridge": "Printer Cartridge",
+ "Printer_Cartridge_Figure": "Printer Cartridge",
+ "Printer_Cartridge_Hammer": "Printer Cartridge",
+ "Printer_Cartridge_Lever": "Printer Cartridge",
+ "Printer_Cartridge_Mug": "Printer Cartridge",
+ "Radio_01": "Radio",
+ "Radio_01_Broken": "Radio",
+ "ReceptionDesk": "Table",
+ "Record_01": "Record",
+ "RoboticArm_01": "Robot Arm",
+ "SK_Veh_Pickup_01_ToolBox": "Toolbox",
+ "SM_Bld_Door_02": "Door",
+ "SM_Bld_Wall_Metal_Slide_02": "Door",
+ "SM_Bld_Wall_Window_Blinds_Open_04": "Blinds",
+ "SM_Item_Clipboard_01": "Clipboard",
+ "SM_Prop_AirVent_01": "Vent",
+ "SM_Prop_AirVent_Wall_01": "Vent",
+ "SM_Prop_Book_Group_01": "Books",
+ "SM_Prop_Book_Group_02": "Books",
+ "SM_Prop_Book_Group_03": "Books",
+ "SM_Prop_Book_Group_04": "Books",
+ "SM_Prop_Book_Group_05": "Books",
+ "SM_Prop_Book_Group_06": "Books",
+ "SM_Prop_Book_Group_07": "Books",
+ "SM_Prop_Book_Group_08": "Books",
+ "SM_Prop_Book_Magazine_01": "Books",
+ "SM_Prop_Book_Phone_Open_01": "Books",
+ "SM_Prop_Buttons_02": "Button",
+ "SM_Prop_Buttons_05": "Button",
+ "SM_Prop_Calender_01": "Calendar",
+ "SM_Prop_Cart_01": "Cart",
+ "SM_Prop_Certificate_01": "Poster",
+ "SM_Prop_Crate_Stack_01": "Crate",
+ "SM_Prop_Drink_Dispenser_01": "Cooler",
+ "SM_Prop_FlatPackCardboardBoxes_03": "Boxes",
+ "SM_Prop_FlatPackCardboardBoxes_04": "Boxes",
+ "SM_Prop_FolderTray_01": "Tray",
+ "SM_Prop_FolderTray_02": "Tray",
+ "SM_Prop_FolderTray_03": "Tray",
+ "SM_Prop_FolderTray_04": "Tray",
+ "SM_Prop_Folder_Holder_01": "Folder Holder",
+ "SM_Prop_Folder_Holder_02": "Folder Holder",
+ "SM_Prop_Folder_Holder_03": "Folder Holder",
+ "SM_Prop_Folder_Holder_04": "Folder Holder",
+ "SM_Prop_Folder_Manila_01": "Folder",
+ "SM_Prop_Folder_Manila_02": "Folder",
+ "SM_Prop_Folder_Manila_03": "Folder",
+ "SM_Prop_Folder_Manila_04": "Folder",
+ "SM_Prop_Folder_PVC_01": "Folder",
+ "SM_Prop_Folder_PVC_02": "Folder",
+ "SM_Prop_Lighting_Cable_Bulb_01": "Light Bulb",
+ "SM_Prop_NetCable_03": "Cable",
+ "SM_Prop_NotePad_01": "Notepad",
+ "SM_Prop_Oxygen_Tank": "Oxygen Tank",
+ "SM_Prop_Oxygen_Tank Water": "Unassigned",
+ "SM_Prop_Oxygen_Tank_Large": "Oxygen Tank",
+ "SM_Prop_PalletStack_02": "Pallets",
+ "SM_Prop_PaperTray_01_Full_01": "Tray",
+ "SM_Prop_Paper_04": "Paper",
+ "SM_Prop_Paper_05": "Paper",
+ "SM_Prop_Paper_06": "Paper",
+ "SM_Prop_Paper_Pile_01": "Paper",
+ "SM_Prop_Paper_Pile_03": "Paper",
+ "SM_Prop_Papers_01": "Paper",
+ "SM_Prop_Plastic_Pipe_Spool_01": "Cable",
+ "SM_Prop_PowerBoxes_01": "Power Boxes",
+ "SM_Prop_Powercable_01": "Cable",
+ "SM_Prop_Powercable_02": "Cable",
+ "SM_Prop_Powercable_03": "Cable",
+ "SM_Prop_Scales_01": "Scale",
+ "SM_Prop_Server_Cabinet_01": "Cabinet",
+ "SM_Prop_Server_Node_01": "Server",
+ "SM_Prop_Table_02": "Table",
+ "SM_Prop_ToolBox_01": "Toolbox",
+ "SM_Prop_Warehouse_Boxes_Stacked_03": "Boxes",
+ "SM_Prop_Warehouse_Boxes_Stacked_04": "Boxes",
+ "SM_Prop_Warehouse_Light_04": "Light",
+ "SM_Prop_Warehouse_Platform_Trolley_01": "Trolley",
+ "SM_Prop_Wirespool_01": "Cable",
+ "SM_Prop_Wirespool_Small_01": "Cable",
+ "SM_Sign_Exit_02": "Door Sign",
+ "SM_Tool_Buffer_01_Battery": "Battery",
+ "SM_Tool_Drill_Chuck_01": "Drill Chuck",
+ "SM_Tool_Handsaw_01": "Handsaw",
+ "SafetyBarrier_02": "Warning Sign",
+ "SandwichHalf_01": "Sandwich",
+ "Screwdriver": "Screwdriver",
+ "Security_Button": "Button",
+ "Shelf_01": "Shelf",
+ "Shelves_Tall_01": "Shelf",
+ "Spoon_01": "Spoon",
+ "StickyNote": "Sticky Note",
+ "TableRoundSmall_02": "Table",
+ "TableRound_02": "Table",
+ "Table_Metal_01": "Table",
+ "TeslaCoil": "Tesla Coil",
+ "TeslaCoil_Small": "Tesla Coil",
+ "Toast_01": "Bread",
+ "Toast_02": "Bread",
+ "Toast_03": "Bread",
+ "Toast_04": "Bread",
+ "Toast_04_Jam": "Bread",
+ "Toast_04_PBJ": "Bread",
+ "Toaster_02": "Toaster",
+ "ToyBed": "Bed Toy",
+ "TrashCan_01": "Trash Can",
+ "Trophy01": "Trophy",
+ "Unassigned": "Unassigned",
+ "V_Monitor_Embiggenator": "Computer",
+ "V_Monitor_FreezeRay": "Computer",
+ "V_Monitor_Gravity": "Computer",
+ "V_Monitor_Laser": "Computer",
+ "V_Monitor_Portal": "Computer",
+ "TAMPrototypeHead_01": "Computer",
+ "VendingMachine_01": "Vending Machine",
+ "VendingMachine_01_B4_Button": "Button",
+ "VendingMachine_01_E5_Button": "Button",
+ "VendingMachine_01_E7_Button": "Button",
+ "VendingMachine_01_M8_Button": "Button",
+ "WallClock_01": "Clock",
+ "Warehouse_Boxes": "Boxes",
+ "WarningSign_01": "Warning Sign",
+ "WaterCooler_01": "Cooler",
+ "WaterPuddle_01": "Puddle",
+ "WhiteBoard_01": "Whiteboard",
+ "Whiteboard_CoffeeUnmaker": "Whiteboard",
+ "Whiteboard_YesterdayMachine": "Whiteboard",
+ "YesterdayMachine_01": "Time Machine",
+ "sign_diamond_carrot": "Warning Sign",
+ "sign_diamond_fire": "Warning Sign",
+ "sign_diamond_freeze": "Warning Sign",
+ "sign_diamond_gravity": "Warning Sign",
+ "sign_diamond_laser": "Warning Sign",
+ "sign_diamond_quantum": "Warning Sign",
+ "sign_diamond_shrink": "Warning Sign",
+ "sign_office_layout_1": "Map",
+ "sign_short_breakroom_1": "Door Sign",
+ "sign_short_breakroom_2": "Door Sign",
+ "sign_short_caution_carrot": "Door Sign",
+ "sign_short_caution_electrical": "Door Sign",
+ "sign_short_caution_gravity_1": "Door Sign",
+ "sign_short_caution_gravity_2": "Door Sign",
+ "sign_short_caution_quantum_1": "Door Sign",
+ "sign_short_caution_quantum_2": "Door Sign",
+ "sign_short_caution_restricted_1": "Door Sign",
+ "sign_short_caution_shrink": "Door Sign",
+ "sign_short_office_1": "Door Sign",
+ "sign_short_poster_delwan_1": "Poster",
+ "sign_short_poster_delwan_2": "Poster",
+ "sign_short_poster_delwan_3": "Poster",
+ "sign_short_poster_delwan_4": "Poster",
+ "sign_short_poster_tam": "Poster",
+ "sign_short_quantum_1": "Door Sign",
+ "sign_short_quantum_2": "Door Sign",
+ "sign_short_robotics_1": "Door Sign",
+ "sign_short_robotics_2": "Door Sign",
+ "sign_short_warehouse_1": "Door Sign",
+ "sign_square_breakroom": "Door Sign",
+ "sign_tall_caution_carrot": "Door Sign",
+ "sign_tall_caution_electrical": "Door Sign",
+ "sign_tall_caution_freeze": "Door Sign",
+ "sign_tall_caution_laser": "Door Sign",
+ "sign_tall_caution_robotics": "Door Sign",
+ "sign_tall_caution_shrink": "Door Sign",
+ "sign_tall_poster_tam_1": "Poster",
+ "sign_tall_poster_tam_2": "Poster",
+ "Water": "Water",
+ "Printer_3D_1_Spawned_FuseBox_01_Lever_1": "Lever",
+ "Printer_3D_1_Spawned_Hammer_1": "Hammer",
+ "Printer_3D_1_Spawned_ActionFigure_1": "Action Figure",
+ "EAC_Machine_Spawned_Carrot_01_1": "Carrot"
+ },
+ "special_asset_to_readable_name": {
+ "AP_Prop_Shelf_Wall_04": "Freeze Ray Shelf",
+ "AP_Prop_Shelf_Wall_FreezeRay": "Freeze Ray Shelf",
+ "AP_Prop_Shelf_Wall_Laser": "Laser Shelf",
+ "AP_Prop_Desk_Blue": "Blue Desk",
+ "AP_Prop_Desk_Green": "Green Desk",
+ "AP_Prop_Desk_Green_model": "Green Desk",
+ "AP_Prop_Desk_Red": "Red Desk",
+ "AP_Prop_Desk_Red_model": "Red Desk",
+ "AP_Prop_Desk_Yellow": "Yellow Desk",
+ "Bookshelf_Wooden_01": "Bookshelf",
+ "ColorChanger_Button_Blue": "Blue Button",
+ "ColorChanger_Button_Green": "Green Button",
+ "ColorChanger_Button_Red": "Red Button",
+ "ManagerDesk": "Desk",
+ "Desk_01": "Desk",
+ "PinBoard_01": "Pin Board",
+ "PinBoard_02": "Pin Board",
+ "ReceptionDesk": "Reception Desk",
+ "Sticky Note": "Sticky Note",
+ "StickyNote": "Sticky Note",
+ "V_Monitor_Embiggenator": "Embiggenator Monitor",
+ "V_Monitor_FreezeRay": "Freeze Ray Monitor",
+ "V_Monitor_Gravity": "Gravity Monitor",
+ "V_Monitor_Laser": "Laser Monitor",
+ "V_Monitor_Portal": "Portal Generator Monitor",
+ "TAMPrototypeHead_01": "Emotion Tester"
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/asset_synonyms.json b/src/emma_datasets/constants/simbot/asset_synonyms.json
new file mode 100644
index 0000000..a2c6e7e
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/asset_synonyms.json
@@ -0,0 +1,824 @@
+{
+ "Computer_Monitor_01": [
+ "Computer",
+ "Monitor",
+ "Computer Monitor",
+ "Office Computer",
+ "PC",
+ "Desktop",
+ "Screen",
+ "Computer Screen"
+ ],
+ "TAMPrototypeHead_01": [
+ "Emotion Tester",
+ "Emotion Tester",
+ "Emotion Tester",
+ "Emotion Tester",
+ "Emotion Test",
+ "Emotion Machine",
+ "Emotion Tester Machine",
+ "Machine of Emotions",
+ "Emotion Testing",
+ "Emotion Testing Machine",
+ "In Motion Machine",
+ "Emission Machine",
+ "Robot Prototype",
+ "Prototype",
+ "White Computer",
+ "White Computer Displaying a Face",
+ "Happy Machine",
+ "Happy Computer",
+ "Harpie Machine",
+ "Sad Machine",
+ "Sad Computer",
+ "Computer"
+ ],
+ "V_Monitor_Gravity": [
+ "Computer",
+ "Gravity Computer",
+ "Gravity Flipper Computer",
+ "Gravity Monitor",
+ "Gravity Flipper Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "Computer_Monitor_New": [
+ "Computer",
+ "Monitor",
+ "Computer Monitor",
+ "PC",
+ "Desktop",
+ "Screen",
+ "Computer Screen",
+ "New Computer",
+ "Brand New Computer"
+ ],
+ "Lab_Terminal": ["Machine Panel"],
+ "V_Monitor_Laser": [
+ "Computer",
+ "Laser Computer",
+ "Laser Cannon Computer",
+ "Laser Monitor",
+ "Laser Cannon Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "V_Monitor_Portal": [
+ "Computer",
+ "Monitor",
+ "Portal Computer",
+ "Portal Generator Computer",
+ "Portal Monitor",
+ "Portal Generator Monitor",
+ "Time Portal Generator",
+ "Time Portal Computer",
+ "Time Portal Monitor",
+ "Desktop",
+ "Screen"
+ ],
+ "V_Monitor_Embiggenator": [
+ "Computer",
+ "Embiggenator Computer",
+ "Embiggenator Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "Computer_Monitor_Broken": [
+ "Computer",
+ "Broken Computer",
+ "Monitor",
+ "Broken Monitor",
+ "Screen",
+ "Broken Screen",
+ "Computer Monitor",
+ "Broken Computer Monitor",
+ "PC",
+ "Broken PC",
+ "Desktop",
+ "Broken Desktop",
+ "Computer Screen",
+ "Broken Computer Screen"
+ ],
+ "V_Monitor_FreezeRay": [
+ "Computer",
+ "Freeze Ray Monitor",
+ "Freeze Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "Toast_04": [
+ "Toast",
+ "Toast",
+ "Coast",
+ "Ghost",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Slice of Coast",
+ "Slice of Ghost"
+ ],
+ "Toast_04_Jam": [
+ "Toast",
+ "Toast",
+ "Coast",
+ "Ghost",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Slice of Coast",
+ "Slice of Ghost"
+ ],
+ "Toast_04_PBJ": [
+ "Toast",
+ "Toast",
+ "Coast",
+ "Ghost",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Slice of Coast",
+ "Slice of Ghost"
+ ],
+ "Toast_01": [
+ "Toast",
+ "Toast",
+ "Coast",
+ "Ghost",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Slice of Coast",
+ "Slice of Ghost"
+ ],
+ "Toast_02": [
+ "Toast",
+ "Toast",
+ "Coast",
+ "Ghost",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Slice of Coast",
+ "Slice of Ghost"
+ ],
+ "Toast_03": [
+ "Toast",
+ "Toast",
+ "Coast",
+ "Ghost",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Slice of Coast",
+ "Slice of Ghost"
+ ],
+ "ForkLift": [
+ "Forklift",
+ "Forklift Truck",
+ "Lift",
+ "Lifter",
+ "Lifting Machine",
+ "Lifting Truck"
+ ],
+ "Fork_Lift": [
+ "Forklift",
+ "Forklift Truck",
+ "Lift",
+ "Lifter",
+ "Lifting Machine",
+ "Lifting Truck"
+ ],
+ "AP_Prop_Couch_06": ["Couch"],
+ "Manager_Chair": ["Chair"],
+ "Office_Chair": ["Chair"],
+ "FoodPlate_01": ["Plate", "Plate", "Dish", "Platter", "Side Plate"],
+ "AP_Prop_PaperTray_01_Full_01": ["Tray", "Paper Tray"],
+ "SM_Prop_FolderTray_02": ["Tray", "Paper Tray"],
+ "SM_Prop_PaperTray_01_Full_01": ["Tray", "Paper Tray"],
+ "SM_Prop_FolderTray_04": ["Tray", "Paper Tray"],
+ "SM_Prop_Oxygen_Tank_Large": ["Water Tank"],
+ "SM_Prop_Oxygen_Tank": ["Water Tank"],
+ "SM_Prop_Oxygen_Tank Water": ["Water Tank"],
+ "DeskFan_Broken_01": ["Fan", "Broken Fan"],
+ "DeskFan_New_01": ["Fan"],
+ "SM_Prop_PowerBoxes_01": ["Power Boxes"],
+ "GravityPad": [
+ "Gravity Pad",
+ "Gravity Pad",
+ "Gravity Flipper",
+ "Gravity Machine",
+ "Gravity Flipping Machine",
+ "Gravity Flipper Machine",
+ "Pad"
+ ],
+ "KitchenStool_01": ["Stool"],
+ "AP_Prop_Lab_MachinePanel_01": ["Machine Panel"],
+ "AP_Prop_Lab_MachinePanel_02": ["Machine Panel"],
+ "KitchenCounterBase_02": [
+ "Counter",
+ "Countertop",
+ "Counter Surface",
+ "Slab",
+ "Lower Cabinet"
+ ],
+ "KitchenCounter01": [
+ "Counter",
+ "Countertop",
+ "Counter Surface",
+ "Slab",
+ "Lower Cabinet"
+ ],
+ "KitchenCounterBase_03": [
+ "Counter",
+ "Countertop",
+ "Counter Surface",
+ "Slab",
+ "Lower Cabinet"
+ ],
+ "CounterBase_03": ["Counter", "Countertop", "Counter Surface", "Slab"],
+ "KitchenCounterTop_02": ["Counter", "Countertop", "Counter Surface", "Slab"],
+ "ColorChangerStation": [
+ "Color Changer",
+ "Color Changer",
+ "Color Changer",
+ "Color Swapper",
+ "Color Changer Machine",
+ "Color Changer Station",
+ "Color Machine"
+ ],
+ "Spoon_01": ["Spoon", "Scoop"],
+ "Laser_CircuitBoard": ["Circuit Board"],
+ "FireExtinguisher_01": ["Fire Extinguisher"],
+ "AP_Prop_Fire_Extinguisher_01": ["Fire Extinguisher"],
+ "Carrot_01": ["Carrot"],
+ "AP_Prop_Pen_06": ["Pen"],
+ "AP_Prop_Pen_03": ["Pen"],
+ "AP_Prop_Pen_01": ["Pen"],
+ "VendingMachine_01": ["Vending Machine"],
+ "EAC_Machine": [
+ "Carrot Machine",
+ "Carrot Machine",
+ "Carrot Maker",
+ "Carrot Maker",
+ "Carrot Maker Device",
+ "Machine For Carrots",
+ "Quantum Carrot Maker",
+ "Card Machine",
+ "Cart Machine",
+ "Everything's a carrot machine"
+ ],
+ "Jar_Jam_01": ["Jelly", "Jam", "Jar", "Jelly Jar", "Container"],
+ "PowerOutlet_01": ["Outlet", "Plug", "Socket"],
+ "Keyboard": ["Keyboard"],
+ "CoffeeCup_Lid_01": ["Lid"],
+ "SM_Tool_Buffer_01_Battery": [
+ "Battery",
+ "Battery",
+ "Battery Cell",
+ "Battery Power"
+ ],
+ "AP_Tool_Buffer_01_Battery": [
+ "Battery",
+ "Battery",
+ "Battery Cell",
+ "Battery Power"
+ ],
+ "Toaster_02": ["Toaster"],
+ "SM_Prop_ToolBox_01": [
+ "Tool Box",
+ "Tool Chest",
+ "Tool case",
+ "Toolcase",
+ "Toolbox"
+ ],
+ "SK_Veh_Pickup_01_ToolBox": [
+ "Tool Box",
+ "Tool Chest",
+ "Tool case",
+ "Toolcase",
+ "Toolbox"
+ ],
+ "Cutting_Board": ["Cutting Board"],
+ "Dart": ["Dart", "Arrow"],
+ "FulllPaperTray_01": ["Tray"],
+ "SM_Prop_FolderTray_01": ["Tray"],
+ "EmptyPaperTray": ["Tray", "Paper Tray"],
+ "SM_Prop_FolderTray_03": ["Tray"],
+ "sign_tall_poster_tam_1": ["Poster"],
+ "sign_short_poster_tam": ["Poster"],
+ "sign_short_poster_delwan_3": ["Poster"],
+ "sign_short_poster_delwan_1": ["Poster"],
+ "sign_short_poster_delwan_2": ["Poster"],
+ "sign_short_poster_delwan_4": ["Poster"],
+ "sign_tall_poster_tam_2": ["Poster"],
+ "AP_Prop_Target_Circle_01": ["Target"],
+ "AP_Prop_CardboardBox_Open_05": ["Cardboard Box", "Box", "Open Box"],
+ "AP_Prop_Lab_Tank_01": ["Tank"],
+ "AP_Prop_Lab_Tank_02": ["Tank"],
+ "sign_office_layout_1": ["Map"],
+ "SM_Prop_Cart_01": ["Cart"],
+ "FreezeRay": [
+ "Freeze Ray",
+ "Freeze Ray",
+ "Freeze Ray",
+ "Freeze Ray Machine",
+ "Freeze Machine",
+ "Freezing Machine"
+ ],
+ "ManagerDesk": ["Desk", "Manager's Desk", "Manager Desk"],
+ "AP_Prop_Desk_Green_model": ["Desk"],
+ "AP_Prop_Desk_Blue": ["Desk"],
+ "AP_Prop_Desk_Red": ["Desk"],
+ "ReceptionDesk": ["Desk"],
+ "AP_Prop_Desk_Yellow": ["Desk"],
+ "AP_Prop_Desk_Red_model": ["Desk"],
+ "AP_Prop_Desk_Green": ["Desk"],
+ "FireAlarm_01": ["Fire Alarm", "Alarm"],
+ "AP_Prop_Couch_02": ["Couch"],
+ "SM_Bld_Wall_Window_Blinds_Open_04": ["Blinds"],
+ "AP_Prop_Lab_Clamp_02_Arm_01": ["Clamp"],
+ "ActionFigure": ["Action Figure", "Toy"],
+ "ToyBed": ["Toy", "Toy Bed", "Bed", "Small Bed"],
+ "WaterPuddle_01": ["Puddle", "Spill"],
+ "CoffeeMaker_01": [
+ "Coffee Maker",
+ "Coffee Machine",
+ "Coffee Maker Machine",
+ "CoffeeMaker",
+ "French Coffee Maker"
+ ],
+ "SM_Prop_Plastic_Pipe_Spool_01": ["Wire Coil"],
+ "SM_Prop_Folder_Holder_02": ["Folder Holder"],
+ "SM_Prop_Folder_Holder_01": ["Folder Holder"],
+ "SM_Prop_Folder_Holder_04": ["Folder Holder"],
+ "SM_Prop_Folder_Holder_03": ["Folder Holder"],
+ "CanSodaNew_01": ["Can", "Soda Can", "Soda", "Pop", "Coke"],
+ "CanSodaNew_Open_01": ["Can", "Soda Can", "Soda", "Pop", "Coke", "Open Can"],
+ "CanSodaNew_Crushed_01": [
+ "Can",
+ "Soda Can",
+ "Soda",
+ "Pop",
+ "Coke",
+ "Crushed Can"
+ ],
+ "CanSoda_01": ["Can", "Soda Can", "Soda", "Pop", "Coke"],
+ "SM_Prop_AirVent_Wall_01": ["Vent"],
+ "SM_Prop_AirVent_01": ["Vent"],
+ "AP_Bld_Ceiling_Aircon_01": ["Vent"],
+ "SM_Prop_Crate_Stack_01": ["Crates"],
+ "TeslaCoil_Small": [
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Soil",
+ "Soil",
+ "Tesla Oil",
+ "Oil",
+ "Tesla Boil",
+ "Boil"
+ ],
+ "TeslaCoil": [
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Soil",
+ "Soil",
+ "Tesla Oil",
+ "Oil",
+ "Tesla Boil",
+ "Boil"
+ ],
+ "Record_01": ["Record", "Record", "Record Disk", "Music Disk", "Vinyl"],
+ "SM_Prop_PalletStack_02": ["Pallets"],
+ "PortalGenerator": [
+ "Generator",
+ "Generator Machine",
+ "Portal Generator",
+ "Portal Generator Machine"
+ ],
+ "AP_Prop_Generator_Large_02": [
+ "Generator",
+ "Generator Machine",
+ "Portal Generator",
+ "Portal Generator Machine"
+ ],
+ "LightSwitch_01": ["Light Switch", "Switch", "Light"],
+ "KitchenCounterSink_01": [
+ "Sink",
+ "Sink",
+ "Sink",
+ "Sink",
+ "Sink",
+ "Sing",
+ "Stink",
+ "Sting",
+ "Shrink",
+ "Tap",
+ "Kitchen Sink",
+ "Kitchen Tap"
+ ],
+ "AP_Prop_Plant_01": ["Plant"],
+ "AP_Prop_Plant_09": ["Plant"],
+ "AP_Prop_Barrel_Water_01": ["Water Barrel"],
+ "AP_Prop_Barrel_Open_01": ["Water Barrel"],
+ "CoffeeBeans_01": [
+ "Coffee Beans",
+ "Beans",
+ "Coffee Bag",
+ "Bag of Coffee Beans"
+ ],
+ "AP_Prop_Bin_Rubbish_01": ["Trash"],
+ "SM_Prop_Warehouse_Light_04": ["Light"],
+ "Embiggenator": [
+ "Embiggenator",
+ "Embiggenator",
+ "Embiggenator",
+ "Embiggenator",
+ "Innovator"
+ ],
+ "DartBoard": ["Dart Board", "Board", "Target", "Bullseye", "Bulls Eye"],
+ "Pear_01": ["Pear"],
+ "FuseBox_01_Lever": [
+ "Lever",
+ "Handle",
+ "Switch",
+ "Lever",
+ "Leather",
+ "Power Lever"
+ ],
+ "AP_Prop_Cellotape_01": ["Tape"],
+ "AP_Item_Tape_01": ["Tape"],
+ "Bowl_01": ["Bowl", "Bowl", "Bowl", "Bowl", "Ball", "Bull"],
+ "SM_Prop_NotePad_01": ["Notepad"],
+ "AP_Prop_Print_Tube_01": ["Print Tube"],
+ "LaserBase_toy": ["Laser Toy"],
+ "CandyBar_01": ["Candy Bar", "Candy"],
+ "CandyJar_01": ["Jar", "Candy Jar", "Glass Jar"],
+ "FridgeLower_02": ["Fridge", "Refrigerator"],
+ "Laser": ["Laser", "Laser Cannon"],
+ "Screwdriver": [
+ "Screw Driver",
+ "Screwdriver",
+ "Hand Tool",
+ "Tool",
+ "Screw Tool"
+ ],
+ "CoffeeUnMaker_01": [
+ "Coffe Composer",
+ "Coffee Composer",
+ "Coffee Unmaker",
+ "Unmaker",
+ "Coffee Time Machine"
+ ],
+ "Printer_3D": [
+ "Printer",
+ "Printer",
+ "Printer",
+ "Printer",
+ "three d Printer",
+ "three d. Printer",
+ "three deer Printer"
+ ],
+ "FuseBox_02": ["Fuse Box", "Circuit Box", "Power Box"],
+ "FuseBox_01": ["Fuse Box", "Circuit Box", "Power Box"],
+ "SM_Prop_Lighting_Cable_Bulb_01": ["Light Bulb"],
+ "Trophy01": ["Trophy", "Trophy Cup"],
+ "CoffeePot_01": ["Coffee Pot", "Pot", "Kettle"],
+ "SM_Prop_Certificate_01": ["Certificate"],
+ "MilkCarton_01": ["Milk", "Carton", "Milk Carton"],
+ "SM_Prop_Calender_01": ["Calendar"],
+ "AP_Item_Tool_Board": ["Tool Board"],
+ "Jar_PeanutButter_01": [
+ "Peanut Butter",
+ "Jar",
+ "Container",
+ "Peanut Butter Jar",
+ "Peanut Butter Container"
+ ],
+ "SM_Prop_Server_Node_01": ["Server"],
+ "Unassigned": ["Unassigned"],
+ "Hammer": [
+ "Hammer",
+ "Hammer",
+ "Hammer",
+ "Hammer",
+ "Hammer",
+ "Something to break the record with",
+ "Something to break the trophy with",
+ "Something to break the bowl with"
+ ],
+ "SM_Prop_Scales_01": ["Scale"],
+ "AP_Prop_Photocopier_01": ["Photocopier"],
+ "SM_Prop_Warehouse_Platform_Trolley_01": ["Dolly"],
+ "WallClock_01": ["Clock"],
+ "YesterdayMachine_01": ["Time Machine", "Yesterday Machine"],
+ "Knife_01": ["Knife"],
+ "Microwave_01": ["Microwave"],
+ "KitchenCounterDrawer_03": ["Drawer"],
+ "KitchenCounterDrawer_02": ["Drawer"],
+ "Laser_ControlPanel": ["Control Panel"],
+ "SM_Tool_Drill_Chuck_01": ["Drill Chuck"],
+ "Fork_01": ["Fork"],
+ "AP_Prop_Minigolf_Ball_01": ["Golf Ball"],
+ "FridgeUpper_02": ["Freezer"],
+ "Donut_01": ["Donut"],
+ "AP_Prop_Minigolf_Club_01": ["Golf Club"],
+ "RoboticArm_01": ["Robot Arm", "Robotic Arm", "Robo Arm"],
+ "AP_Prop_Bucket_02": [
+ "Trash Can",
+ "Trash",
+ "Litter Box",
+ "Bin",
+ "Garbage Can"
+ ],
+ "TrashCan_01": ["Trash Can", "Trash", "Litter Box", "Bin", "Garbage Can"],
+ "Cereal_Box_01": ["Cereal Box", "Cereal", "Box with Cereal"],
+ "SM_Item_Clipboard_01": ["Clipboard"],
+ "Radio_01_Broken": ["Radio"],
+ "Radio_01": ["Radio", "Music"],
+ "Laser_Tip": ["Laser Tip"],
+ "Laser_Tip_Broken": ["Laser Tip"],
+ "Floppy_AntiVirus_Broken": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Broken Disk",
+ "Broken Floppy",
+ "Broken Floppy Disk"
+ ],
+ "Floppy_AntiVirus": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Antivirus",
+ "Antivirus Software",
+ "Computer Antivirus",
+ "Computer Antivirus Program",
+ "Computer Antivirus Disk",
+ "Antivirus",
+ "Antivirus Disk",
+ "Antivirus Program"
+ ],
+ "Floppy_Virus_Broken": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Broken Disk",
+ "Broken Floppy",
+ "Broken Floppy Disk",
+ "Broken Virus Disk"
+ ],
+ "Floppy_Virus": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Computer Virus",
+ "Computer Virus Program",
+ "Computer Virus Disk",
+ "Virus",
+ "Virus Disk",
+ "Virus Program"
+ ],
+ "ColorChanger_Button_Red": [
+ "Button",
+ "Red Button",
+ "Red Color Changer Button"
+ ],
+ "VendingMachine_01_B4_Button": ["Button", "Vending Machine Button"],
+ "Security_Button": [
+ "Button",
+ "Security Button",
+ "Security Button",
+ "Security Button",
+ "Emergency Button",
+ "Danger Button",
+ "Warning Button"
+ ],
+ "VendingMachine_01_E5_Button": ["Button", "Vending Machine Button"],
+ "VendingMachine_01_E7_Button": ["Button", "Vending Machine Button"],
+ "SM_Prop_Buttons_02": ["Button"],
+ "ColorChanger_Button_Blue": [
+ "Button",
+ "Blue Button",
+ "Blue Color Changer Button"
+ ],
+ "VendingMachine_01_M8_Button": ["Button", "Vending Machine Button"],
+ "ColorChanger_Button_Green": [
+ "Button",
+ "Green Button",
+ "Green Color Changer Button"
+ ],
+ "SM_Prop_Buttons_05": ["Button"],
+ "SM_Prop_Book_Magazine_01": ["Books"],
+ "SM_Prop_Book_Group_04": ["Books"],
+ "SM_Prop_Book_Group_06": ["Books"],
+ "SM_Prop_Book_Group_08": ["Books"],
+ "SM_Prop_Book_Group_01": ["Books"],
+ "SM_Prop_Book_Phone_Open_01": ["Books"],
+ "SM_Prop_Book_Group_07": ["Books"],
+ "SM_Prop_Book_Group_02": ["Books"],
+ "SM_Prop_Book_Group_03": ["Books"],
+ "SM_Prop_Book_Group_05": ["Books"],
+ "Door_01": ["Door"],
+ "SM_Bld_Wall_Metal_Slide_02": ["Door"],
+ "AP_Bld_Wall_Glass_Large_Door_01": ["Door"],
+ "SM_Bld_Door_02": ["Door"],
+ "Printer_Cartridge": ["Printer Cartridge", "Cartridge"],
+ "Printer_Cartridge_Lever": [
+ "Printer Cartridge",
+ "Lever Cartridge",
+ "Cartridge with the Lever"
+ ],
+ "Printer_Cartridge_Figure": [
+ "Action Cartridge",
+ "Action Figure Cartridge",
+ "Action Printer Cartridge",
+ "Printer Cartridge",
+ "Cartridge",
+ "Figure Cartridge",
+ "Action Figure Cartridge",
+ "Cartridge with the Figure",
+ "Cartridge with the Action Figure"
+ ],
+ "Printer_Cartridge_Mug": [
+ "Printer Cartridge",
+ "Cartridge",
+ "Mug Cartridge",
+ "Cartridge with the Mug"
+ ],
+ "Printer_Cartridge_Hammer": [
+ "Printer Cartridge",
+ "Cartridge",
+ "Hammer Cartridge",
+ "Cartridge with the Hammer"
+ ],
+ "SandwichHalf_01": ["Sandwich"],
+ "PBJ_Sandwich": ["Sandwich", "Peanut Butter and Jelly Sandwich"],
+ "Burger_04": ["Burger", "Hamburger", "Cheeseburger"],
+ "BananaBunch_01": ["Banana"],
+ "Banana_01": ["Banana"],
+ "Table_Metal_01": ["Table"],
+ "TableRoundSmall_02": ["Table"],
+ "SM_Prop_Table_02": ["Table"],
+ "TableRound_02": ["Table"],
+ "Desk_01": ["Table"],
+ "AppleSlice_01": ["Apple", "Apple Slice"],
+ "Apple": ["Apple"],
+ "SM_Prop_Papers_01": ["Paper"],
+ "SM_Prop_Paper_04": ["Paper"],
+ "SM_Prop_Paper_Pile_03": ["Paper"],
+ "SM_Prop_Paper_06": ["Paper"],
+ "SM_Prop_Paper_05": ["Paper"],
+ "SM_Prop_Paper_Pile_01": ["Paper"],
+ "SM_Prop_FlatPackCardboardBoxes_03": ["Boxes"],
+ "PackingBox": [
+ "Packing Box",
+ "Boxes",
+ "Box",
+ "Shipping Box",
+ "Wrapping Box",
+ "Packaging Box",
+ "Package Box"
+ ],
+ "SM_Prop_Warehouse_Boxes_Stacked_03": ["Boxes"],
+ "Warehouse_Boxes": ["Boxes"],
+ "SM_Prop_Warehouse_Boxes_Stacked_04": ["Boxes"],
+ "AP_Prop_CardboardBox_Stack_02": ["Boxes"],
+ "Deembiggenator_Crates": ["Boxes"],
+ "SM_Prop_FlatPackCardboardBoxes_04": ["Boxes"],
+ "sign_tall_caution_electrical": ["Sign"],
+ "AP_Prop_Safety_Barrier_02": ["Sign"],
+ "sign_tall_caution_freeze": ["Sign"],
+ "sign_short_caution_quantum_2": ["Sign"],
+ "sign_diamond_freeze": ["Sign"],
+ "sign_short_quantum_1": ["Sign"],
+ "sign_short_breakroom_2": ["Sign"],
+ "sign_short_caution_restricted_1": ["Sign"],
+ "sign_short_caution_gravity_1": ["Sign"],
+ "sign_short_breakroom_1": ["Sign"],
+ "SM_Sign_Exit_02": ["Sign"],
+ "sign_diamond_laser": ["Sign"],
+ "sign_square_breakroom": ["Sign"],
+ "sign_short_caution_shrink": ["Sign"],
+ "sign_diamond_fire": ["Sign"],
+ "AP_Prop_Sign_OutofOrder_01": ["Sign"],
+ "sign_short_quantum_2": ["Sign"],
+ "sign_short_robotics_2": ["Sign"],
+ "WarningSign_01": ["Sign"],
+ "sign_diamond_quantum": ["Sign"],
+ "sign_diamond_carrot": ["Sign"],
+ "sign_tall_caution_carrot": ["Sign"],
+ "sign_short_office_1": ["Sign"],
+ "sign_short_caution_carrot": ["Sign"],
+ "sign_diamond_shrink": ["Sign"],
+ "SafetyBarrier_02": ["Sign"],
+ "sign_tall_caution_shrink": ["Sign"],
+ "sign_short_caution_gravity_2": ["Sign"],
+ "sign_short_caution_quantum_1": ["Sign"],
+ "sign_tall_caution_laser": ["Sign"],
+ "sign_tall_caution_robotics": ["Sign"],
+ "sign_short_caution_electrical": ["Sign"],
+ "sign_diamond_gravity": ["Sign"],
+ "sign_short_robotics_1": ["Sign"],
+ "sign_short_warehouse_1": ["Sign"],
+ "SM_Prop_Powercable_02": ["Cable"],
+ "SM_Prop_NetCable_03": ["Cable"],
+ "SM_Prop_Wirespool_01": ["Cable"],
+ "Broken_Cord_01": ["Cable"],
+ "SM_Prop_Powercable_01": ["Cable"],
+ "SM_Prop_Wirespool_Small_01": ["Cable"],
+ "CableFrayed_01": ["Cable"],
+ "SM_Prop_Powercable_03": ["Cable"],
+ "Shelf_01": ["Shelf"],
+ "Bookshelf_Wooden_01": ["Shelf", "Bookshelf", "Bookcase", "Wooden Shelves"],
+ "AP_Prop_Shelf_06": ["Shelf", "Rack"],
+ "AP_Prop_Shelf_Wall_FreezeRay": ["Shelf", "Target Shelf", "Freeze Ray Shelf"],
+ "AP_Prop_Shelf_Wall_04": ["Shelf", "Target Shelf", "Freeze Ray Shelf"],
+ "Shelves_Tall_01": ["Shelf", "Rack"],
+ "AP_Prop_Shelf_Wall_Laser": ["Shelf", "Target Shelf", "Laser Shelf"],
+ "CakeSlice_02": ["Cake"],
+ "Cake_02": ["Cake"],
+ "AP_Prop_Note_05": ["Sticky Note", "Note", "Hint"],
+ "StickyNote": ["Sticky Note", "Note", "Hint"],
+ "BreadLoaf": ["Bread Slice"],
+ "BreadSlice_01": ["Bread Slice"],
+ "SM_Prop_Folder_Manila_04": ["Folder"],
+ "SM_Prop_Folder_Manila_01": ["Folder"],
+ "AP_Prop_Folder_PVC_02": ["Folder"],
+ "SM_Prop_Folder_Manila_02": ["Folder"],
+ "SM_Prop_Folder_PVC_01": ["Folder"],
+ "SM_Prop_Folder_Manila_03": ["Folder"],
+ "SM_Prop_Folder_PVC_02": ["Folder"],
+ "PieFruitSlice_01": ["Pie", "Fruit Pie"],
+ "PieFruit_01": ["Pie", "Fruit Pie"],
+ "CoffeeMug_Yellow": ["Mug", "Coffee Mug", "Coffee Cup", "Cup"],
+ "CoffeeCup_Open_Empty_02": [
+ "Coffee Cup",
+ "Cup",
+ "Empty Coffee Cup",
+ "Empty Cup"
+ ],
+ "CoffeeCup_Open_Empty_01": [
+ "Coffee Cup",
+ "Cup",
+ "Empty Coffee Cup",
+ "Empty Cup"
+ ],
+ "PaperCup_Crushed_01": ["Cup", "Paper Cup", "Crushed Cup"],
+ "PaperCup_01": ["Cup", "Paper Cup"],
+ "CoffeeMug_Boss": [
+ "Mug",
+ "Cup",
+ "Coffee Mug",
+ "Coffee Cup",
+ "Manager's Special Mug",
+ "Boss's Mug",
+ "Manager's Mug",
+ "Manager Mug"
+ ],
+ "KitchenCabinet_01": ["Cabinet", "Closet"],
+ "AP_Prop_Cabinets_01": ["Cabinet", "Closet"],
+ "KitchenCabinet_02": ["Cabinet", "Closet"],
+ "KitchenCabinet_01_Trapped": ["Cabinet", "Closet"],
+ "SM_Prop_Server_Cabinet_01": ["Cabinet", "Closet"],
+ "SM_Tool_Handsaw_01": ["Handsaw"],
+ "Handsaw": ["Handsaw"],
+ "AP_Prop_Whiteboard_Devices_08": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_05": ["Board", "White Board", "Whiteboard"],
+ "Whiteboard_YesterdayMachine": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_11": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_03": ["Board", "White Board", "Whiteboard"],
+ "PinBoard_01": ["Board", "Pin Board"],
+ "PinBoard_02": ["Board", "Pin Board"],
+ "AP_Prop_Whiteboard_Devices_13": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_15": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_CorkBoard_02": ["Board"],
+ "AP_Prop_Whiteboard_Devices_04": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_07": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_06": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_14": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_12": ["Board", "White Board", "Whiteboard"],
+ "WhiteBoard_01": ["Board", "White Board", "Whiteboard"],
+ "Whiteboard_CoffeeUnmaker": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_10": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_09": ["Board", "White Board", "Whiteboard"],
+ "WaterCooler_01": ["Water Cooler", "Cooler"],
+ "SM_Prop_Drink_Dispenser_01": ["Cooler", "Dispenser"],
+ "MissionItemHolder": ["Item"],
+ "Water": ["Water"]
+}
diff --git a/src/emma_datasets/constants/simbot/asset_synonyms_emnlp.json b/src/emma_datasets/constants/simbot/asset_synonyms_emnlp.json
new file mode 100644
index 0000000..87b7fab
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/asset_synonyms_emnlp.json
@@ -0,0 +1,729 @@
+{
+ "Computer_Monitor_01": [
+ "Computer",
+ "Monitor",
+ "Computer Monitor",
+ "Office Computer",
+ "PC",
+ "Desktop",
+ "Screen",
+ "Computer Screen"
+ ],
+ "TAMPrototypeHead_01": [
+ "Emotion Tester",
+ "Emotion Machine",
+ "Emotion Tester Machine",
+ "Computer",
+ "Robot Emotion Tester",
+ "Robot Emotion Tester Computer"
+ ],
+ "V_Monitor_Gravity": [
+ "Computer",
+ "Gravity Computer",
+ "Gravity Flipper Computer",
+ "Gravity Monitor",
+ "Gravity Flipper Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "Computer_Monitor_New": [
+ "Computer",
+ "Monitor",
+ "Computer Monitor",
+ "PC",
+ "Desktop",
+ "Screen",
+ "Computer Screen",
+ "New Computer",
+ "Brand New Computer"
+ ],
+ "Lab_Terminal": ["Machine Panel"],
+ "V_Monitor_Laser": [
+ "Computer",
+ "Laser Computer",
+ "Laser Cannon Computer",
+ "Laser Monitor",
+ "Laser Cannon Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "V_Monitor_Portal": [
+ "Computer",
+ "Monitor",
+ "Portal Computer",
+ "Portal Generator Computer",
+ "Portal Monitor",
+ "Portal Generator Monitor",
+ "Time Portal Generator",
+ "Time Portal Computer",
+ "Time Portal Monitor",
+ "Desktop",
+ "Screen"
+ ],
+ "V_Monitor_Embiggenator": [
+ "Computer",
+ "Embiggenator Computer",
+ "Embiggenator Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "Computer_Monitor_Broken": [
+ "Computer",
+ "Broken Computer",
+ "Monitor",
+ "Broken Monitor",
+ "Screen",
+ "Broken Screen",
+ "Computer Monitor",
+ "Broken Computer Monitor",
+ "PC",
+ "Broken PC",
+ "Desktop",
+ "Broken Desktop",
+ "Computer Screen",
+ "Broken Computer Screen"
+ ],
+ "V_Monitor_FreezeRay": [
+ "Computer",
+ "Freeze Ray Monitor",
+ "Freeze Monitor",
+ "Monitor",
+ "Screen"
+ ],
+ "Toast_04": [
+ "Toast",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Piece of Toast"
+ ],
+ "Toast_04_Jam": [
+ "Toast",
+ "Toast",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Piece of Toast"
+ ],
+ "Toast_04_PBJ": [
+ "Toast",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Piece of Toast"
+ ],
+ "Toast_01": [
+ "Toast",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Piece of Toast"
+ ],
+ "Toast_02": [
+ "Toast",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Piece of Toast"
+ ],
+ "Toast_03": [
+ "Toast",
+ "Bread",
+ "Bread Slice",
+ "Slice of Toast",
+ "Piece of Toast"
+ ],
+ "ForkLift": [
+ "Forklift",
+ "Forklift Truck",
+ "Lift",
+ "Lifter",
+ "Lifting Machine",
+ "Lifting Truck"
+ ],
+ "Fork_Lift": [
+ "Forklift",
+ "Forklift Truck",
+ "Lift",
+ "Lifter",
+ "Lifting Machine",
+ "Lifting Truck"
+ ],
+ "AP_Prop_Couch_06": ["Couch"],
+ "Manager_Chair": ["Chair"],
+ "Office_Chair": ["Chair"],
+ "FoodPlate_01": ["Plate", "Plate", "Dish", "Platter", "Side Plate"],
+ "AP_Prop_PaperTray_01_Full_01": ["Tray", "Paper Tray"],
+ "SM_Prop_FolderTray_02": ["Tray", "Paper Tray"],
+ "SM_Prop_PaperTray_01_Full_01": ["Tray", "Paper Tray"],
+ "SM_Prop_FolderTray_04": ["Tray", "Paper Tray"],
+ "SM_Prop_Oxygen_Tank_Large": ["Water Tank"],
+ "SM_Prop_Oxygen_Tank": ["Water Tank"],
+ "SM_Prop_Oxygen_Tank Water": ["Water Tank"],
+ "DeskFan_Broken_01": ["Fan", "Broken Fan"],
+ "DeskFan_New_01": ["Fan"],
+ "SM_Prop_PowerBoxes_01": ["Power Boxes"],
+ "GravityPad": [
+ "Gravity Pad",
+ "Gravity Pad",
+ "Gravity Flipper",
+ "Gravity Machine",
+ "Gravity Flipping Machine",
+ "Gravity Flipper Machine",
+ "Pad"
+ ],
+ "KitchenStool_01": ["Stool"],
+ "AP_Prop_Lab_MachinePanel_01": ["Machine Panel"],
+ "AP_Prop_Lab_MachinePanel_02": ["Machine Panel"],
+ "KitchenCounterBase_02": [
+ "Counter",
+ "Countertop",
+ "Counter Surface",
+ "Slab",
+ "Lower Cabinet"
+ ],
+ "KitchenCounter01": [
+ "Counter",
+ "Countertop",
+ "Counter Surface",
+ "Lower Cabinet",
+ "Down Cabinet",
+ "Cabinet"
+ ],
+ "KitchenCounterBase_03": [
+ "Counter",
+ "Countertop",
+ "Counter Surface",
+ "Lower Cabinet",
+ "Down Cabinet",
+ "Cabinet"
+ ],
+ "CounterBase_03": ["Counter", "Countertop", "Counter Surface"],
+ "KitchenCounterTop_02": ["Counter", "Countertop", "Counter Surface"],
+ "ColorChangerStation": [
+ "Color Changer",
+ "Color Changer",
+ "Color Changer",
+ "Color Swapper",
+ "Color Changer Machine",
+ "Color Changer Station",
+ "Color Machine"
+ ],
+ "Spoon_01": ["Spoon", "Scoop"],
+ "Laser_CircuitBoard": ["Circuit Board"],
+ "FireExtinguisher_01": ["Fire Extinguisher"],
+ "AP_Prop_Fire_Extinguisher_01": ["Fire Extinguisher"],
+ "Carrot_01": ["Carrot"],
+ "AP_Prop_Pen_06": ["Pen"],
+ "AP_Prop_Pen_03": ["Pen"],
+ "AP_Prop_Pen_01": ["Pen"],
+ "VendingMachine_01": ["Vending Machine"],
+ "EAC_Machine": [
+ "Carrot Machine",
+ "Carrot Machine",
+ "Carrot Maker",
+ "Carrot Maker",
+ "Carrot Maker Device",
+ "Machine For Carrots",
+ "Quantum Carrot Maker",
+ "Card Machine",
+ "Cart Machine",
+ "Everything's a carrot machine"
+ ],
+ "Jar_Jam_01": ["Jelly", "Jelly", "Jam", "Jar", "Jelly Jar", "Jam Jar"],
+ "PowerOutlet_01": ["Outlet", "Plug", "Socket"],
+ "Keyboard": ["Keyboard"],
+ "CoffeeCup_Lid_01": ["Lid"],
+ "SM_Tool_Buffer_01_Battery": [
+ "Battery",
+ "Battery",
+ "Battery Cell",
+ "Battery Power"
+ ],
+ "AP_Tool_Buffer_01_Battery": [
+ "Battery",
+ "Battery",
+ "Battery Cell",
+ "Battery Power"
+ ],
+ "Toaster_02": ["Toaster"],
+ "SM_Prop_ToolBox_01": [
+ "Tool Box",
+ "Tool Chest",
+ "Tool case",
+ "Toolcase",
+ "Toolbox"
+ ],
+ "SK_Veh_Pickup_01_ToolBox": [
+ "Tool Box",
+ "Tool Chest",
+ "Tool case",
+ "Toolcase",
+ "Toolbox"
+ ],
+ "Cutting_Board": ["Cutting Board"],
+ "Dart": ["Dart", "Arrow"],
+ "FulllPaperTray_01": ["Tray"],
+ "SM_Prop_FolderTray_01": ["Tray"],
+ "EmptyPaperTray": ["Tray", "Paper Tray"],
+ "SM_Prop_FolderTray_03": ["Tray"],
+ "sign_tall_poster_tam_1": ["Poster"],
+ "sign_short_poster_tam": ["Poster"],
+ "sign_short_poster_delwan_3": ["Poster"],
+ "sign_short_poster_delwan_1": ["Poster"],
+ "sign_short_poster_delwan_2": ["Poster"],
+ "sign_short_poster_delwan_4": ["Poster"],
+ "sign_tall_poster_tam_2": ["Poster"],
+ "AP_Prop_Target_Circle_01": ["Target"],
+ "AP_Prop_CardboardBox_Open_05": ["Cardboard Box", "Box", "Open Box"],
+ "AP_Prop_Lab_Tank_01": ["Tank"],
+ "AP_Prop_Lab_Tank_02": ["Tank"],
+ "sign_office_layout_1": ["Map"],
+ "SM_Prop_Cart_01": ["Cart"],
+ "FreezeRay": [
+ "Freeze Ray",
+ "Freeze Ray",
+ "Freeze Ray",
+ "Freeze Ray Machine",
+ "Freeze Machine",
+ "Freezing Machine"
+ ],
+ "ManagerDesk": ["Desk", "Manager's Desk", "Manager Desk"],
+ "AP_Prop_Desk_Green_model": ["Desk"],
+ "AP_Prop_Desk_Blue": ["Desk"],
+ "AP_Prop_Desk_Red": ["Desk"],
+ "ReceptionDesk": ["Desk"],
+ "AP_Prop_Desk_Yellow": ["Desk"],
+ "AP_Prop_Desk_Red_model": ["Desk"],
+ "AP_Prop_Desk_Green": ["Desk"],
+ "FireAlarm_01": ["Fire Alarm", "Alarm"],
+ "AP_Prop_Couch_02": ["Couch"],
+ "SM_Bld_Wall_Window_Blinds_Open_04": ["Blinds"],
+ "AP_Prop_Lab_Clamp_02_Arm_01": ["Clamp"],
+ "ActionFigure": ["Action Figure", "Toy"],
+ "ToyBed": ["Toy", "Toy Bed", "Bed", "Small Bed"],
+ "WaterPuddle_01": ["Puddle", "Spill"],
+ "CoffeeMaker_01": [
+ "Coffee Maker",
+ "Coffee Machine",
+ "Coffee Maker Machine",
+ "CoffeeMaker"
+ ],
+ "SM_Prop_Plastic_Pipe_Spool_01": ["Wire Coil"],
+ "SM_Prop_Folder_Holder_02": ["Folder Holder"],
+ "SM_Prop_Folder_Holder_01": ["Folder Holder"],
+ "SM_Prop_Folder_Holder_04": ["Folder Holder"],
+ "SM_Prop_Folder_Holder_03": ["Folder Holder"],
+ "CanSodaNew_01": ["Can", "Soda Can", "Soda"],
+ "CanSodaNew_Open_01": ["Can", "Soda Can", "Soda"],
+ "CanSodaNew_Crushed_01": ["Can", "Soda Can", "Soda", "Crushed Can"],
+ "CanSoda_01": ["Can", "Soda Can", "Soda"],
+ "SM_Prop_AirVent_Wall_01": ["Vent"],
+ "SM_Prop_AirVent_01": ["Vent"],
+ "AP_Bld_Ceiling_Aircon_01": ["Vent"],
+ "SM_Prop_Crate_Stack_01": ["Crates"],
+ "TeslaCoil_Small": [
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Soil",
+ "Soil",
+ "Tesla Oil",
+ "Oil",
+ "Tesla Boil",
+ "Boil"
+ ],
+ "TeslaCoil": [
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Coil",
+ "Coil",
+ "Tesla Soil",
+ "Soil",
+ "Tesla Oil",
+ "Oil",
+ "Tesla Boil",
+ "Boil"
+ ],
+ "Record_01": ["Record", "Record", "Record Disk", "Music Record"],
+ "SM_Prop_PalletStack_02": ["Pallets"],
+ "PortalGenerator": [
+ "Generator",
+ "Generator Machine",
+ "Portal Generator",
+ "Portal Generator Machine"
+ ],
+ "AP_Prop_Generator_Large_02": [
+ "Generator",
+ "Generator Machine",
+ "Portal Generator",
+ "Portal Generator Machine"
+ ],
+ "LightSwitch_01": ["Light Switch", "Switch", "Light"],
+ "KitchenCounterSink_01": ["Sink", "Tap", "Kitchen Sink", "Kitchen Tap"],
+ "AP_Prop_Plant_01": ["Plant"],
+ "AP_Prop_Plant_09": ["Plant"],
+ "AP_Prop_Barrel_Water_01": ["Water Barrel"],
+ "AP_Prop_Barrel_Open_01": ["Water Barrel"],
+ "CoffeeBeans_01": [
+ "Coffee Beans",
+ "Coffee Bean",
+ "Beans",
+ "Bean",
+ "Coffee Bag"
+ ],
+ "AP_Prop_Bin_Rubbish_01": ["Trash"],
+ "SM_Prop_Warehouse_Light_04": ["Light"],
+ "Embiggenator": [
+ "Embiggenator",
+ "Embiggenator",
+ "Embiggenator",
+ "Embiggenator",
+ "Innovator"
+ ],
+ "DartBoard": ["Dart Board", "Board", "Target", "Bullseye", "Bulls Eye"],
+ "Pear_01": ["Pear"],
+ "FuseBox_01_Lever": ["Lever", "Handle", "Switch", "Lever", "Power Lever"],
+ "AP_Prop_Cellotape_01": ["Tape"],
+ "AP_Item_Tape_01": ["Tape"],
+ "Bowl_01": ["Bowl", "Bowl", "Bowl", "Broken Bowl"],
+ "SM_Prop_NotePad_01": ["Notepad"],
+ "AP_Prop_Print_Tube_01": ["Print Tube"],
+ "LaserBase_toy": ["Laser Toy"],
+ "CandyBar_01": ["Candy Bar", "Candy"],
+ "CandyJar_01": ["Jar", "Candy Jar", "Glass Jar"],
+ "FridgeLower_02": ["Fridge", "Refrigerator"],
+ "Laser": ["Laser", "Laser Cannon"],
+ "Screwdriver": [
+ "Screw Driver",
+ "Screwdriver",
+ "Hand Tool",
+ "Tool",
+ "Screw Tool"
+ ],
+ "CoffeeUnMaker_01": [
+ "Coffe Composer",
+ "Coffee Composer",
+ "Coffee Unmaker",
+ "Unmaker"
+ ],
+ "Printer_3D": ["Printer", "Printer", "3D Printer"],
+ "FuseBox_02": ["Fuse Box", "Circuit Box", "Power Box"],
+ "FuseBox_01": ["Fuse Box", "Circuit Box", "Power Box"],
+ "SM_Prop_Lighting_Cable_Bulb_01": ["Light Bulb"],
+ "Trophy01": ["Trophy", "Trophy Cup"],
+ "CoffeePot_01": ["Coffee Pot", "Pot", "Kettle"],
+ "SM_Prop_Certificate_01": ["Certificate"],
+ "MilkCarton_01": ["Milk", "Carton", "Milk Carton"],
+ "SM_Prop_Calender_01": ["Calendar"],
+ "AP_Item_Tool_Board": ["Tool Board"],
+ "Jar_PeanutButter_01": [
+ "Peanut Butter",
+ "Jar",
+ "Peanut Butter Jar",
+ "Peanut Butter Container"
+ ],
+ "SM_Prop_Server_Node_01": ["Server"],
+ "Unassigned": ["Unassigned"],
+ "Hammer": ["Hammer"],
+ "SM_Prop_Scales_01": ["Scale"],
+ "AP_Prop_Photocopier_01": ["Photocopier"],
+ "SM_Prop_Warehouse_Platform_Trolley_01": ["Dolly"],
+ "WallClock_01": ["Clock"],
+ "YesterdayMachine_01": ["Time Machine", "Yesterday Machine"],
+ "Knife_01": ["Knife"],
+ "Microwave_01": ["Microwave"],
+ "KitchenCounterDrawer_03": ["Drawer"],
+ "KitchenCounterDrawer_02": ["Drawer"],
+ "Laser_ControlPanel": ["Control Panel"],
+ "SM_Tool_Drill_Chuck_01": ["Drill Chuck"],
+ "Fork_01": ["Fork"],
+ "AP_Prop_Minigolf_Ball_01": ["Golf Ball"],
+ "FridgeUpper_02": ["Freezer"],
+ "Donut_01": ["Donut"],
+ "AP_Prop_Minigolf_Club_01": ["Golf Club"],
+ "RoboticArm_01": ["Robot Arm", "Robotic Arm", "Robo Arm"],
+ "AP_Prop_Bucket_02": [
+ "Trash Can",
+ "Trash",
+ "Litter Box",
+ "Bin",
+ "Garbage Can"
+ ],
+ "TrashCan_01": ["Trash Can", "Trash", "Litter Box", "Bin", "Garbage Can"],
+ "Cereal_Box_01": ["Cereal Box", "Cereal", "Box with Cereal"],
+ "SM_Item_Clipboard_01": ["Clipboard"],
+ "Radio_01_Broken": ["Radio"],
+ "Radio_01": ["Radio", "Music"],
+ "Laser_Tip": ["Laser Tip"],
+ "Laser_Tip_Broken": ["Laser Tip"],
+ "Floppy_AntiVirus_Broken": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Broken Disk",
+ "Broken Floppy",
+ "Broken Floppy Disk"
+ ],
+ "Floppy_AntiVirus": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Antivirus",
+ "Antivirus Disk"
+ ],
+ "Floppy_Virus_Broken": [
+ "Floppy Disk",
+ "Floppy",
+ "Disk",
+ "Broken Disk",
+ "Broken Floppy",
+ "Broken Floppy Disk",
+ "Broken Virus Disk"
+ ],
+ "Floppy_Virus": ["Floppy Disk", "Floppy", "Disk", "Virus", "Virus Disk"],
+ "ColorChanger_Button_Red": [
+ "Button",
+ "Red Button",
+ "Red Color Changer Button"
+ ],
+ "VendingMachine_01_B4_Button": ["Button", "Vending Machine Button"],
+ "Security_Button": [
+ "Button",
+ "Security Button",
+ "Security Button",
+ "Security Button",
+ "Emergency Button",
+ "Danger Button",
+ "Warning Button"
+ ],
+ "VendingMachine_01_E5_Button": ["Button", "Vending Machine Button"],
+ "VendingMachine_01_E7_Button": ["Button", "Vending Machine Button"],
+ "SM_Prop_Buttons_02": ["Button"],
+ "ColorChanger_Button_Blue": [
+ "Button",
+ "Blue Button",
+ "Blue Color Changer Button"
+ ],
+ "VendingMachine_01_M8_Button": ["Button", "Vending Machine Button"],
+ "ColorChanger_Button_Green": [
+ "Button",
+ "Green Button",
+ "Green Color Changer Button"
+ ],
+ "SM_Prop_Buttons_05": ["Button"],
+ "SM_Prop_Book_Magazine_01": ["Books"],
+ "SM_Prop_Book_Group_04": ["Books"],
+ "SM_Prop_Book_Group_06": ["Books"],
+ "SM_Prop_Book_Group_08": ["Books"],
+ "SM_Prop_Book_Group_01": ["Books"],
+ "SM_Prop_Book_Phone_Open_01": ["Books"],
+ "SM_Prop_Book_Group_07": ["Books"],
+ "SM_Prop_Book_Group_02": ["Books"],
+ "SM_Prop_Book_Group_03": ["Books"],
+ "SM_Prop_Book_Group_05": ["Books"],
+ "Door_01": ["Door"],
+ "SM_Bld_Wall_Metal_Slide_02": ["Door"],
+ "AP_Bld_Wall_Glass_Large_Door_01": ["Door"],
+ "SM_Bld_Door_02": ["Door"],
+ "Printer_Cartridge": ["3D Cartridge", "Printer Cartridge", "Cartridge"],
+ "Printer_Cartridge_Lever": [
+ "Printer Cartridge",
+ "Lever Cartridge",
+ "Cartridge with the Lever"
+ ],
+ "Printer_Cartridge_Figure": [
+ "Action Cartridge",
+ "Action Figure Cartridge",
+ "Action Printer Cartridge",
+ "Printer Cartridge",
+ "Cartridge",
+ "Figure Cartridge",
+ "Action Figure Cartridge",
+ "Cartridge with the Figure",
+ "Cartridge with the Action Figure"
+ ],
+ "Printer_Cartridge_Mug": [
+ "Printer Cartridge",
+ "Cartridge",
+ "Mug Cartridge",
+ "Cartridge with the Mug"
+ ],
+ "Printer_Cartridge_Hammer": [
+ "Printer Cartridge",
+ "Cartridge",
+ "Hammer Cartridge",
+ "Cartridge with the Hammer"
+ ],
+ "SandwichHalf_01": ["Sandwich"],
+ "PBJ_Sandwich": [
+ "Sandwich",
+ "Peanut Butter and Jelly Sandwich",
+ "peanut butter sandwich"
+ ],
+ "Burger_04": ["Burger", "Hamburger", "Cheeseburger"],
+ "BananaBunch_01": ["Banana"],
+ "Banana_01": ["Banana"],
+ "Table_Metal_01": ["Table"],
+ "TableRoundSmall_02": ["Table"],
+ "SM_Prop_Table_02": ["Table"],
+ "TableRound_02": ["Table"],
+ "Desk_01": ["Table"],
+ "AppleSlice_01": ["Apple", "Apple Slice"],
+ "Apple": ["Apple"],
+ "SM_Prop_Papers_01": ["Paper"],
+ "SM_Prop_Paper_04": ["Paper"],
+ "SM_Prop_Paper_Pile_03": ["Paper"],
+ "SM_Prop_Paper_06": ["Paper"],
+ "SM_Prop_Paper_05": ["Paper"],
+ "SM_Prop_Paper_Pile_01": ["Paper"],
+ "SM_Prop_FlatPackCardboardBoxes_03": ["Boxes"],
+ "PackingBox": [
+ "Packing Box",
+ "Boxes",
+ "Box",
+ "Shipping Box",
+ "Wrapping Box",
+ "Packaging Box",
+ "Package Box"
+ ],
+ "SM_Prop_Warehouse_Boxes_Stacked_03": ["Boxes"],
+ "Warehouse_Boxes": ["Boxes"],
+ "SM_Prop_Warehouse_Boxes_Stacked_04": ["Boxes"],
+ "AP_Prop_CardboardBox_Stack_02": ["Boxes"],
+ "Deembiggenator_Crates": ["Boxes"],
+ "SM_Prop_FlatPackCardboardBoxes_04": ["Boxes"],
+ "sign_tall_caution_electrical": ["Sign"],
+ "AP_Prop_Safety_Barrier_02": ["Sign"],
+ "sign_tall_caution_freeze": ["Sign"],
+ "sign_short_caution_quantum_2": ["Sign"],
+ "sign_diamond_freeze": ["Sign"],
+ "sign_short_quantum_1": ["Sign"],
+ "sign_short_breakroom_2": ["Sign"],
+ "sign_short_caution_restricted_1": ["Sign"],
+ "sign_short_caution_gravity_1": ["Sign"],
+ "sign_short_breakroom_1": ["Sign"],
+ "SM_Sign_Exit_02": ["Sign"],
+ "sign_diamond_laser": ["Sign"],
+ "sign_square_breakroom": ["Sign"],
+ "sign_short_caution_shrink": ["Sign"],
+ "sign_diamond_fire": ["Sign"],
+ "AP_Prop_Sign_OutofOrder_01": ["Sign"],
+ "sign_short_quantum_2": ["Sign"],
+ "sign_short_robotics_2": ["Sign"],
+ "WarningSign_01": ["Sign"],
+ "sign_diamond_quantum": ["Sign"],
+ "sign_diamond_carrot": ["Sign"],
+ "sign_tall_caution_carrot": ["Sign"],
+ "sign_short_office_1": ["Sign"],
+ "sign_short_caution_carrot": ["Sign"],
+ "sign_diamond_shrink": ["Sign"],
+ "SafetyBarrier_02": ["Sign"],
+ "sign_tall_caution_shrink": ["Sign"],
+ "sign_short_caution_gravity_2": ["Sign"],
+ "sign_short_caution_quantum_1": ["Sign"],
+ "sign_tall_caution_laser": ["Sign"],
+ "sign_tall_caution_robotics": ["Sign"],
+ "sign_short_caution_electrical": ["Sign"],
+ "sign_diamond_gravity": ["Sign"],
+ "sign_short_robotics_1": ["Sign"],
+ "sign_short_warehouse_1": ["Sign"],
+ "SM_Prop_Powercable_02": ["Cable"],
+ "SM_Prop_NetCable_03": ["Cable"],
+ "SM_Prop_Wirespool_01": ["Cable"],
+ "Broken_Cord_01": ["Cable"],
+ "SM_Prop_Powercable_01": ["Cable"],
+ "SM_Prop_Wirespool_Small_01": ["Cable"],
+ "CableFrayed_01": ["Cable"],
+ "SM_Prop_Powercable_03": ["Cable"],
+ "Shelf_01": ["Shelf"],
+ "Bookshelf_Wooden_01": ["Shelf", "Bookshelf", "Bookcase", "Wooden Shelves"],
+ "AP_Prop_Shelf_06": ["Shelf", "Rack"],
+ "AP_Prop_Shelf_Wall_FreezeRay": ["Shelf", "Target Shelf", "Freeze Ray Shelf"],
+ "AP_Prop_Shelf_Wall_04": ["Shelf", "Target Shelf", "Freeze Ray Shelf"],
+ "Shelves_Tall_01": ["Shelf", "Rack"],
+ "AP_Prop_Shelf_Wall_Laser": ["Shelf", "Target Shelf", "Laser Shelf"],
+ "CakeSlice_02": ["Cake", "Cake Slice", "Slice of Cake"],
+ "Cake_02": ["Cake"],
+ "AP_Prop_Note_05": ["Sticky Note", "Note", "Hint"],
+ "StickyNote": ["Sticky Note", "Note", "Hint"],
+ "BreadLoaf": ["Bread Slice"],
+ "BreadSlice_01": ["Bread Slice"],
+ "SM_Prop_Folder_Manila_04": ["Folder"],
+ "SM_Prop_Folder_Manila_01": ["Folder"],
+ "AP_Prop_Folder_PVC_02": ["Folder"],
+ "SM_Prop_Folder_Manila_02": ["Folder"],
+ "SM_Prop_Folder_PVC_01": ["Folder"],
+ "SM_Prop_Folder_Manila_03": ["Folder"],
+ "SM_Prop_Folder_PVC_02": ["Folder"],
+ "PieFruitSlice_01": ["Pie", "Fruit Pie"],
+ "PieFruit_01": ["Pie", "Fruit Pie"],
+ "CoffeeMug_Yellow": ["Mug", "Coffee Mug", "Coffee Cup", "Cup"],
+ "CoffeeCup_Open_Empty_02": [
+ "Coffee Cup",
+ "Cup",
+ "Empty Coffee Cup",
+ "Empty Cup"
+ ],
+ "CoffeeCup_Open_Empty_01": [
+ "Coffee Cup",
+ "Cup",
+ "Empty Coffee Cup",
+ "Empty Cup"
+ ],
+ "PaperCup_Crushed_01": ["Cup", "Paper Cup", "Crushed Cup"],
+ "PaperCup_01": ["Cup", "Paper Cup"],
+ "CoffeeMug_Boss": [
+ "Mug",
+ "Cup",
+ "Coffee Mug",
+ "Coffee Cup",
+ "Manager's Special Mug",
+ "Boss's Mug",
+ "Manager's Mug",
+ "Manager Mug"
+ ],
+ "KitchenCabinet_01": ["Cabinet", "Closet"],
+ "AP_Prop_Cabinets_01": ["Cabinet", "Closet"],
+ "KitchenCabinet_02": ["Cabinet", "Closet"],
+ "KitchenCabinet_01_Trapped": ["Cabinet", "Closet"],
+ "SM_Prop_Server_Cabinet_01": ["Cabinet", "Closet"],
+ "SM_Tool_Handsaw_01": ["Handsaw"],
+ "Handsaw": ["Handsaw"],
+ "AP_Prop_Whiteboard_Devices_08": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_05": ["Board", "White Board", "Whiteboard"],
+ "Whiteboard_YesterdayMachine": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_11": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_03": ["Board", "White Board", "Whiteboard"],
+ "PinBoard_01": ["Board", "Pin Board"],
+ "PinBoard_02": ["Board", "Pin Board"],
+ "AP_Prop_Whiteboard_Devices_13": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_15": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_CorkBoard_02": ["Board"],
+ "AP_Prop_Whiteboard_Devices_04": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_07": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_06": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_14": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_12": ["Board", "White Board", "Whiteboard"],
+ "WhiteBoard_01": ["Board", "White Board", "Whiteboard"],
+ "Whiteboard_CoffeeUnmaker": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_10": ["Board", "White Board", "Whiteboard"],
+ "AP_Prop_Whiteboard_Devices_09": ["Board", "White Board", "Whiteboard"],
+ "WaterCooler_01": ["Water Cooler", "Cooler"],
+ "SM_Prop_Drink_Dispenser_01": ["Cooler", "Dispenser"],
+ "MissionItemHolder": ["Item"],
+ "Water": ["Water"]
+}
diff --git a/src/emma_datasets/constants/simbot/augmentations.json b/src/emma_datasets/constants/simbot/augmentations.json
new file mode 100644
index 0000000..fe2f23e
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/augmentations.json
@@ -0,0 +1,156 @@
+{
+ "Break": {
+ "BreakAugmentation": {
+ "break_classes": ["Bowl", "Mug", "Plate", "Record", "Trophy"],
+ "action_type": "Break",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 5000
+ }
+ },
+ "Clean": {
+ "CleanAugmentation": {
+ "cleanable_object_types": ["FoodPlate_01"],
+ "cleaning_classes": ["Sink"],
+ "min_interaction_distance": 1.5,
+ "action_type": "Clean",
+ "max_examples_per_class": 1000
+ }
+ },
+ "Close": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": ["Fuse Box"],
+ "action_type": "Close",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 5000
+ }
+ },
+ "Fill": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeePot_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Fill",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Goto": {
+ "GoToAugmentation": {
+ "goto_classes": ["Whiteboard", "Robot Arm", "Wall Shelf", "Fuse Box"],
+ "action_type": "Goto",
+ "min_interaction_distance": 2.5,
+ "max_examples_per_class": 5000
+ }
+ },
+ "Pickup": {
+ "PickupAugmentation": {
+ "pickup_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bread",
+ "Burger",
+ "Cake",
+ "Can",
+ "Carrot",
+ "Cereal Box",
+ "Coffee Beans",
+ "Coffee Pot",
+ "Control Panel",
+ "Cup",
+ "Donut",
+ "Floppy Disk",
+ "Hammer",
+ "Knife",
+ "Lid",
+ "Milk",
+ "Mug",
+ "Plate",
+ "Printer Cartridge"
+ ],
+ "action_type": "Pickup",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Pour": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeePot_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Pour",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Open": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": ["Fuse Box"],
+ "action_type": "Open",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 5000
+ }
+ },
+ "Search": {
+ "SearchAugmentation": {
+ "search_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bowl",
+ "Can",
+ "Cereal Box",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Control Panel",
+ "Cup",
+ "Donut",
+ "Embiggenator",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Generator",
+ "Gravity Pad",
+ "Hammer",
+ "Laser",
+ "Laser Tip",
+ "Lever",
+ "Knife",
+ "Milk",
+ "Microwave",
+ "Mug",
+ "Printer",
+ "Printer Cartridge",
+ "Robot Arm",
+ "Sandwich",
+ "Spoon",
+ "Sink",
+ "Time Machine",
+ "Trophy",
+ "Wall Shelf"
+ ],
+ "min_interaction_distance": 0,
+ "max_negative_examples_per_room": 150,
+ "max_examples_per_object": 4000
+ }
+ },
+ "Toggle": {
+ "ToggleAugmentation": {
+ "toggle_classes": ["Robot Arm", "Button", "Lever"],
+ "action_type": "Toggle",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 5000
+ }
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/augmentations_emnlp_train.json b/src/emma_datasets/constants/simbot/augmentations_emnlp_train.json
new file mode 100644
index 0000000..5c0fbad
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/augmentations_emnlp_train.json
@@ -0,0 +1,422 @@
+{
+ "Break": {
+ "BreakAugmentation": {
+ "break_classes": ["Bowl", "Mug", "Plate", "Record", "Trophy"],
+ "action_type": "Break",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 750
+ }
+ },
+ "Clean": {
+ "CleanAugmentation": {
+ "cleanable_object_types": ["FoodPlate_01"],
+ "cleaning_classes": ["Sink"],
+ "min_interaction_distance": 1.5,
+ "action_type": "Clean",
+ "max_examples_per_class": 400
+ }
+ },
+ "Close": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Cabinet",
+ "Drawer",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Microwave",
+ "Time Machine"
+ ],
+ "action_type": "Close",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 750
+ }
+ },
+ "Fill": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeePot_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Fill",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 750
+ }
+ },
+ "Goto": {
+ "GoToAugmentation": {
+ "goto_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Boxes",
+ "Bread",
+ "Burger",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Counter Top",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Emotion Tester",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Time Machine",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Goto",
+ "min_interaction_distance": 2.5,
+ "max_examples_per_class": 750
+ }
+ },
+ "Pickup": {
+ "PickupAugmentation": {
+ "pickup_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bowl",
+ "Bread",
+ "Burger",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Pot",
+ "Computer",
+ "Control Panel",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Fork",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Knife",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Milk",
+ "Mug",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Sandwich",
+ "Screwdriver",
+ "Spoon",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Pickup",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 750
+ }
+ },
+ "Pour": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeeMaker_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeePot_01",
+ "CoffeeUnMaker_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Pour",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 750
+ }
+ },
+ "Open": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Cabinet",
+ "Drawer",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Microwave",
+ "Time Machine"
+ ],
+ "action_type": "Open",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 750
+ }
+ },
+ "Search": {
+ "SearchAugmentation": {
+ "search_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Boxes",
+ "Bread",
+ "Burger",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Counter Top",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Emotion Tester",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Time Machine",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Search",
+ "min_interaction_distance": 0,
+ "max_negative_examples_per_room": 200,
+ "max_examples_per_object": 750
+ }
+ },
+ "Scan": {
+ "ScanAugmentation": {
+ "scan_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Boxes",
+ "Bread",
+ "Burger",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Counter Top",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Emotion Tester",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Time Machine",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Scan",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Toggle": {
+ "ToggleAugmentation": {
+ "toggle_classes": [
+ "Button",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Fire Alarm",
+ "Freeze Ray Monitor",
+ "Gravity Monitor",
+ "Laser Monitor",
+ "Lever",
+ "Microwave",
+ "Printer",
+ "Radio",
+ "Robot Arm",
+ "Sink",
+ "Time Machine",
+ "Toaster"
+ ],
+ "action_type": "Toggle",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 750
+ }
+ },
+ "Place": {
+ "PlaceAugmentation": {
+ "place_classes": [
+ "Bookshelf",
+ "Candy Jar",
+ "Counter Top",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Counter",
+ "Cutting Board",
+ "Laser",
+ "Laser Shelf",
+ "Freeze Ray Shelf",
+ "Fuse Box",
+ "Plate",
+ "Printer",
+ "Sink",
+ "Table",
+ "Toaster"
+ ],
+ "container_classes": [
+ "Cabinet",
+ "Drawer",
+ "Fridge",
+ "Freezer",
+ "Microwave",
+ "Time Machine"
+ ],
+ "action_type": "Place",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 750
+ }
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/augmentations_emnlp_valid.json b/src/emma_datasets/constants/simbot/augmentations_emnlp_valid.json
new file mode 100644
index 0000000..b4c2c4e
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/augmentations_emnlp_valid.json
@@ -0,0 +1,422 @@
+{
+ "Break": {
+ "BreakAugmentation": {
+ "break_classes": ["Bowl", "Mug", "Plate", "Record", "Trophy"],
+ "action_type": "Break",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Clean": {
+ "CleanAugmentation": {
+ "cleanable_object_types": ["FoodPlate_01"],
+ "cleaning_classes": ["Sink"],
+ "min_interaction_distance": 1.5,
+ "action_type": "Clean",
+ "max_examples_per_class": 200
+ }
+ },
+ "Close": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Cabinet",
+ "Drawer",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Microwave",
+ "Time Machine"
+ ],
+ "action_type": "Close",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 400
+ }
+ },
+ "Fill": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeePot_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Fill",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Goto": {
+ "GoToAugmentation": {
+ "goto_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Boxes",
+ "Bread",
+ "Burger",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Counter Top",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Emotion Tester",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Time Machine",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Goto",
+ "min_interaction_distance": 2.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Pickup": {
+ "PickupAugmentation": {
+ "pickup_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bowl",
+ "Bread",
+ "Burger",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Pot",
+ "Computer",
+ "Control Panel",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Fork",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Knife",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Milk",
+ "Mug",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Sandwich",
+ "Screwdriver",
+ "Spoon",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Pickup",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Pour": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeeMaker_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeePot_01",
+ "CoffeeUnMaker_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Pour",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Open": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Cabinet",
+ "Drawer",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Microwave",
+ "Time Machine"
+ ],
+ "action_type": "Open",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 400
+ }
+ },
+ "Search": {
+ "SearchAugmentation": {
+ "search_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Boxes",
+ "Bread",
+ "Burger",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Counter Top",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Emotion Tester",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Time Machine",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Search",
+ "min_interaction_distance": 0,
+ "max_negative_examples_per_room": 100,
+ "max_examples_per_object": 500
+ }
+ },
+ "Scan": {
+ "ScanAugmentation": {
+ "scan_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Boxes",
+ "Bread",
+ "Burger",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Counter Top",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Emotion Tester",
+ "Fan",
+ "Fire Extinguisher",
+ "Floppy Disk",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Hammer",
+ "Handsaw",
+ "Jar",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Time Machine",
+ "Trophy",
+ "Warning Sign"
+ ],
+ "action_type": "Scan",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 200
+ }
+ },
+ "Toggle": {
+ "ToggleAugmentation": {
+ "toggle_classes": [
+ "Button",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Fire Alarm",
+ "Freeze Ray Monitor",
+ "Gravity Monitor",
+ "Laser Monitor",
+ "Lever",
+ "Microwave",
+ "Printer",
+ "Radio",
+ "Robot Arm",
+ "Sink",
+ "Time Machine",
+ "Toaster"
+ ],
+ "action_type": "Toggle",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 400
+ }
+ },
+ "Place": {
+ "PlaceAugmentation": {
+ "place_classes": [
+ "Bookshelf",
+ "Candy Jar",
+ "Counter Top",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Counter",
+ "Cutting Board",
+ "Laser",
+ "Laser Shelf",
+ "Freeze Ray Shelf",
+ "Fuse Box",
+ "Plate",
+ "Printer",
+ "Sink",
+ "Table",
+ "Toaster"
+ ],
+ "container_classes": [
+ "Cabinet",
+ "Drawer",
+ "Fridge",
+ "Freezer",
+ "Microwave",
+ "Time Machine"
+ ],
+ "action_type": "Place",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 400
+ }
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/augmentations_full_train.json b/src/emma_datasets/constants/simbot/augmentations_full_train.json
new file mode 100644
index 0000000..51d3d16
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/augmentations_full_train.json
@@ -0,0 +1,472 @@
+{
+ "Break": {
+ "BreakAugmentation": {
+ "break_classes": ["Bowl", "Mug", "Plate", "Record", "Trophy"],
+ "action_type": "Break",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Clean": {
+ "CleanAugmentation": {
+ "cleanable_object_types": ["FoodPlate_01"],
+ "cleaning_classes": ["Sink"],
+ "min_interaction_distance": 1.5,
+ "action_type": "Clean",
+ "max_examples_per_class": 1000
+ }
+ },
+ "Close": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Door",
+ "Fridge",
+ "Freezer",
+ "Fuse Box",
+ "Cabinet",
+ "Counter",
+ "Drawer",
+ "Microwave",
+ "Milk",
+ "Vending Machine",
+ "Time Machine"
+ ],
+ "action_type": "Close",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Fill": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeePot_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Fill",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Goto": {
+ "GoToAugmentation": {
+ "goto_classes": [
+ "Action Figure",
+ "Apple",
+ "Bookshelf",
+ "Banana",
+ "Bread",
+ "Burger",
+ "Bowl",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cabinet",
+ "Cereal Box",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Counter",
+ "Computer",
+ "Dart",
+ "Donut",
+ "Embiggenator",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Fan",
+ "Floppy Disk",
+ "Forklift",
+ "Freeze Ray",
+ "Fridge",
+ "Freezer",
+ "Fuse Box",
+ "Generator",
+ "Gravity Monitor",
+ "Gravity Pad",
+ "Hammer",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser",
+ "Light Switch",
+ "Microwave",
+ "Mug",
+ "Packing Box",
+ "Pie",
+ "Pear",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Portal Generator Monitor",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Sink",
+ "Table",
+ "Time Machine",
+ "Tray",
+ "Trophy",
+ "Vending Machine",
+ "Whiteboard"
+ ],
+ "action_type": "Goto",
+ "min_interaction_distance": 2.5,
+ "max_examples_per_class": 2500
+ }
+ },
+ "Pickup": {
+ "PickupAugmentation": {
+ "pickup_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bread",
+ "Bowl",
+ "Burger",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Carrot",
+ "Cereal Box",
+ "Coffee Beans",
+ "Coffee Pot",
+ "Control Panel",
+ "Computer",
+ "Cup",
+ "Circuit Board",
+ "Control Panel",
+ "Dart",
+ "Donut",
+ "Fan",
+ "Floppy Disk",
+ "Fork",
+ "Hammer",
+ "Jar",
+ "Knife",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Milk",
+ "Mug",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Screwdriver",
+ "Sandwich",
+ "Spoon",
+ "Trophy"
+ ],
+ "action_type": "Pickup",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Pour": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeePot_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeeUnMaker_01",
+ "CoffeeMaker_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Pour",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Open": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Candy Bar",
+ "Door",
+ "Fridge",
+ "Freezer",
+ "Fuse Box",
+ "Cabinet",
+ "Counter",
+ "Drawer",
+ "Microwave",
+ "Milk",
+ "Vending Machine",
+ "Time Machine"
+ ],
+ "action_type": "Open",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Search": {
+ "SearchAugmentation": {
+ "search_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Bread",
+ "Burger",
+ "Button",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Cup",
+ "Dart",
+ "Dart Board",
+ "Donut",
+ "Door",
+ "Drawer",
+ "Embiggenator",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Fan",
+ "Fire Alarm",
+ "Floppy Disk",
+ "Fork",
+ "Forklift",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Generator",
+ "Gravity Monitor",
+ "Gravity Pad",
+ "Hammer",
+ "Jar",
+ "Knife",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Light Switch",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Portal Generator Monitor",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Tray",
+ "Tesla Coil",
+ "Time Machine",
+ "Toaster",
+ "Trophy",
+ "Vending Machine",
+ "Whiteboard"
+ ],
+ "action_type": "Search",
+ "min_interaction_distance": 0,
+ "max_negative_examples_per_room": 1000,
+ "max_examples_per_object": 3000
+ }
+ },
+ "Scan": {
+ "ScanAugmentation": {
+ "scan_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Bread",
+ "Burger",
+ "Button",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Cup",
+ "Dart",
+ "Dart Board",
+ "Candy Bar",
+ "Candy Jar",
+ "Donut",
+ "Door",
+ "Drawer",
+ "Embiggenator",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Fan",
+ "Fire Alarm",
+ "Floppy Disk",
+ "Fork",
+ "Forklift",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Generator",
+ "Gravity Monitor",
+ "Gravity Pad",
+ "Hammer",
+ "Jar",
+ "Knife",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Light Switch",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Portal Generator Monitor",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Tesla Coil",
+ "Time Machine",
+ "Toaster",
+ "Tray",
+ "Trophy",
+ "Vending Machine",
+ "Whiteboard"
+ ],
+ "action_type": "Scan",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 500
+ }
+ },
+ "Toggle": {
+ "ToggleAugmentation": {
+ "toggle_classes": [
+ "Button",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Gravity Monitor",
+ "Forklift",
+ "Freeze Ray Monitor",
+ "Lever",
+ "Laser Monitor",
+ "Fire Alarm",
+ "Light Switch",
+ "Microwave",
+ "Portal Generator Monitor",
+ "Printer",
+ "Radio",
+ "Robot Arm",
+ "Sink",
+ "Tesla Coil",
+ "Toaster"
+ ],
+ "action_type": "Toggle",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 2000
+ }
+ },
+ "Place": {
+ "PlaceAugmentation": {
+ "place_classes": [
+ "Bookshelf",
+ "Candy Jar",
+ "Counter Top",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Counter",
+ "Cutting Board",
+ "Desk",
+ "Everything's A Carrot Machine",
+ "Embiggenator",
+ "Gravity Pad",
+ "Laser",
+ "Laser Shelf",
+ "Freeze Ray Shelf",
+ "Fuse Box",
+ "Packing Box",
+ "Plate",
+ "Printer",
+ "Sink",
+ "Table",
+ "Toaster",
+ "Tray",
+ "Trash Can",
+ "Vending Machine"
+ ],
+ "container_classes": [
+ "Cabinet",
+ "Drawer",
+ "Fridge",
+ "Freezer",
+ "Microwave",
+ "Time Machine",
+ "Vending Machine"
+ ],
+ "action_type": "Place",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 2000
+ }
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/augmentations_full_valid.json b/src/emma_datasets/constants/simbot/augmentations_full_valid.json
new file mode 100644
index 0000000..8679b3b
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/augmentations_full_valid.json
@@ -0,0 +1,472 @@
+{
+ "Break": {
+ "BreakAugmentation": {
+ "break_classes": ["Bowl", "Mug", "Plate", "Record", "Trophy"],
+ "action_type": "Break",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Clean": {
+ "CleanAugmentation": {
+ "cleanable_object_types": ["FoodPlate_01"],
+ "cleaning_classes": ["Sink"],
+ "min_interaction_distance": 1.5,
+ "action_type": "Clean",
+ "max_examples_per_class": 750
+ }
+ },
+ "Close": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Door",
+ "Fridge",
+ "Freezer",
+ "Fuse Box",
+ "Cabinet",
+ "Counter",
+ "Drawer",
+ "Microwave",
+ "Milk",
+ "Vending Machine",
+ "Time Machine"
+ ],
+ "action_type": "Close",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Fill": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeePot_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeeUnMaker_01",
+ "CoffeeMaker_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Fill",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Goto": {
+ "GoToAugmentation": {
+ "goto_classes": [
+ "Action Figure",
+ "Apple",
+ "Bookshelf",
+ "Banana",
+ "Bread",
+ "Burger",
+ "Bowl",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cabinet",
+ "Cereal Box",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Counter",
+ "Computer",
+ "Dart",
+ "Donut",
+ "Embiggenator",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Fan",
+ "Floppy Disk",
+ "Forklift",
+ "Freeze Ray",
+ "Fridge",
+ "Freezer",
+ "Fuse Box",
+ "Generator",
+ "Gravity Monitor",
+ "Gravity Pad",
+ "Hammer",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser",
+ "Light Switch",
+ "Microwave",
+ "Mug",
+ "Packing Box",
+ "Pie",
+ "Pear",
+ "Plate",
+ "Printer",
+ "Printer Cartridge",
+ "Portal Generator Monitor",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Sink",
+ "Table",
+ "Time Machine",
+ "Tray",
+ "Trophy",
+ "Vending Machine",
+ "Whiteboard"
+ ],
+ "action_type": "Goto",
+ "min_interaction_distance": 2.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Pickup": {
+ "PickupAugmentation": {
+ "pickup_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bread",
+ "Bowl",
+ "Burger",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Carrot",
+ "Cereal Box",
+ "Coffee Beans",
+ "Coffee Pot",
+ "Control Panel",
+ "Computer",
+ "Cup",
+ "Dart",
+ "Donut",
+ "Fan",
+ "Floppy Disk",
+ "Fork",
+ "Hammer",
+ "Jar",
+ "Knife",
+ "Circuit Board",
+ "Control Panel",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Milk",
+ "Mug",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Screwdriver",
+ "Sandwich",
+ "Spoon",
+ "Trophy"
+ ],
+ "action_type": "Pickup",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Pour": {
+ "FillPourAugmentation": {
+ "fillable_object_types": [
+ "Bowl_01",
+ "CoffeePot_01",
+ "CoffeeMug_Boss",
+ "CoffeeMug_Yellow",
+ "CoffeeUnMaker_01",
+ "CoffeeMaker_01"
+ ],
+ "filling_classes": ["Sink"],
+ "action_type": "Pour",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Open": {
+ "OpenCloseAugmentation": {
+ "action_type_classes": [
+ "Candy Bar",
+ "Door",
+ "Fridge",
+ "Freezer",
+ "Fuse Box",
+ "Cabinet",
+ "Counter",
+ "Drawer",
+ "Microwave",
+ "Milk",
+ "Vending Machine",
+ "Time Machine"
+ ],
+ "action_type": "Open",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Search": {
+ "SearchAugmentation": {
+ "search_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Bread",
+ "Burger",
+ "Button",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Cup",
+ "Dart",
+ "Dart Board",
+ "Donut",
+ "Door",
+ "Drawer",
+ "Embiggenator",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Fan",
+ "Fire Alarm",
+ "Floppy Disk",
+ "Fork",
+ "Forklift",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Generator",
+ "Gravity Monitor",
+ "Gravity Pad",
+ "Hammer",
+ "Jar",
+ "Knife",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Light Switch",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Portal Generator Monitor",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Tesla Coil",
+ "Time Machine",
+ "Toaster",
+ "Tray",
+ "Trophy",
+ "Vending Machine",
+ "Whiteboard"
+ ],
+ "action_type": "Search",
+ "min_interaction_distance": 0,
+ "max_negative_examples_per_room": 500,
+ "max_examples_per_object": 1500
+ }
+ },
+ "Scan": {
+ "ScanAugmentation": {
+ "scan_classes": [
+ "Action Figure",
+ "Apple",
+ "Banana",
+ "Bookshelf",
+ "Bowl",
+ "Bread",
+ "Burger",
+ "Button",
+ "Cabinet",
+ "Cake",
+ "Can",
+ "Candy Bar",
+ "Candy Jar",
+ "Carrot",
+ "Cereal Box",
+ "Circuit Board",
+ "Coffee Beans",
+ "Coffee Maker",
+ "Coffee Pot",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Computer",
+ "Control Panel",
+ "Counter",
+ "Cup",
+ "Dart",
+ "Dart Board",
+ "Donut",
+ "Door",
+ "Drawer",
+ "Embiggenator",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Fan",
+ "Fire Alarm",
+ "Floppy Disk",
+ "Fork",
+ "Forklift",
+ "Freeze Ray",
+ "Freeze Ray Monitor",
+ "Freeze Ray Shelf",
+ "Freezer",
+ "Fridge",
+ "Fuse Box",
+ "Generator",
+ "Gravity Monitor",
+ "Gravity Pad",
+ "Hammer",
+ "Jar",
+ "Knife",
+ "Laser",
+ "Laser Monitor",
+ "Laser Shelf",
+ "Laser Tip",
+ "Lever",
+ "Lid",
+ "Light Switch",
+ "Microwave",
+ "Milk",
+ "Mug",
+ "Packing Box",
+ "Pear",
+ "Pie",
+ "Plate",
+ "Portal Generator Monitor",
+ "Printer",
+ "Printer Cartridge",
+ "Radio",
+ "Record",
+ "Robot Arm",
+ "Sandwich",
+ "Screwdriver",
+ "Sink",
+ "Spoon",
+ "Table",
+ "Tesla Coil",
+ "Time Machine",
+ "Toaster",
+ "Tray",
+ "Trophy",
+ "Vending Machine",
+ "Whiteboard"
+ ],
+ "action_type": "Scan",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 300
+ }
+ },
+ "Toggle": {
+ "ToggleAugmentation": {
+ "toggle_classes": [
+ "Button",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Embiggenator Monitor",
+ "Emotion Tester",
+ "Everything's A Carrot Machine",
+ "Gravity Monitor",
+ "Forklift",
+ "Freeze Ray Monitor",
+ "Lever",
+ "Laser Monitor",
+ "Fire Alarm",
+ "Light Switch",
+ "Microwave",
+ "Portal Generator Monitor",
+ "Printer",
+ "Radio",
+ "Robot Arm",
+ "Sink",
+ "Tesla Coil",
+ "Toaster"
+ ],
+ "action_type": "Toggle",
+ "min_interaction_distance": 1.5,
+ "max_examples_per_class": 1000
+ }
+ },
+ "Place": {
+ "PlaceAugmentation": {
+ "place_classes": [
+ "Bookshelf",
+ "Candy Jar",
+ "Counter Top",
+ "Coffee Maker",
+ "Coffee Unmaker",
+ "Color Changer",
+ "Counter",
+ "Cutting Board",
+ "Desk",
+ "Everything's A Carrot Machine",
+ "Embiggenator",
+ "Gravity Pad",
+ "Laser",
+ "Laser Shelf",
+ "Freeze Ray Shelf",
+ "Fuse Box",
+ "Packing Box",
+ "Plate",
+ "Printer",
+ "Sink",
+ "Table",
+ "Toaster",
+ "Tray",
+ "Trash Can"
+ ],
+ "container_classes": [
+ "Cabinet",
+ "Drawer",
+ "Fridge",
+ "Freezer",
+ "Microwave",
+ "Time Machine",
+ "Vending Machine"
+ ],
+ "action_type": "Place",
+ "min_interaction_distance": 3,
+ "max_examples_per_class": 1000
+ }
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/class_thresholds2.json b/src/emma_datasets/constants/simbot/class_thresholds2.json
new file mode 100644
index 0000000..e1e84ff
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/class_thresholds2.json
@@ -0,0 +1,134 @@
+{
+ "Unassigned": [10.0, 3000.0],
+ "Vent": [67.48826703782385, 4283.808048250434],
+ "Door": [68.60386458068345, 19747.612534978376],
+ "Tape": [2.453083380418113, 324.6226491242231],
+ "Tool Board": [43.02664576802508, 7472.9471003134795],
+ "Water Barrel": [11.44805159014496, 2991.180510389682],
+ "Trash Can": [6.82015514425694, 3091.9142170205046],
+ "Cabinet": [258.08648417067917, 15540.865954331242],
+ "Boxes": [5.402095389386891, 3061.8799689852112],
+ "Board": [77.79941509314006, 16382.92326276305],
+ "Couch": [51.68642737263819, 12516.480753613772],
+ "Table": [72.6823559648747, 19181.742098950526],
+ "Fire Extinguisher": [16.971877282688094, 2551.228780131483],
+ "Folder": [8.995596333566521, 1464.2333763834329],
+ "Generator": [128.55878393538254, 23360.376766883554],
+ "Clamp": [2.1245248985376537, 259.41287122334603],
+ "Machine Panel": [16.100375350238778, 4911.443248101221],
+ "Tank": [114.66587778384611, 11660.592572364829],
+ "Golf Ball": [1.3110599078341014, 239.70334101382488],
+ "Golf Club": [91.71921475312314, 2106.7923854848304],
+ "Sticky Note": [5.375941753719531, 750.5543526432415],
+ "Tray": [7.415248259576165, 2031.4294169963505],
+ "Pen": [2.3942089755213054, 329.58629873073437],
+ "Photocopier": [33.344021164021164, 12930.891957671958],
+ "Plant": [10.772714836463127, 2962.7073249595824],
+ "Print Tube": [5.3497845171588185, 539.185538707103],
+ "Warning Sign": [14.60260634739737, 3306.311423828754],
+ "Shelf": [104.40674850608329, 18979.65011428591],
+ "Wall Shelf": [8.990192594698316, 3948.2726885082793],
+ "Door Sign": [10.33390292338244, 2620.333525762404],
+ "Target": [23.35163820950623, 5931.0566835871405],
+ "Whiteboard": [148.07640361783564, 12933.643766709736],
+ "Battery": [1.7158373193097434, 348.3030575301921],
+ "Action Figure": [15.0, 1160.8703703703704],
+ "Apple": [1.2716926367247174, 141.74526428353192],
+ "Banana": [6.7379053694843165, 1086.160995924154],
+ "Bowl": [7.711170011359334, 822.7911397198031],
+ "Bread": [5.672607606733066, 1217.6719086726075],
+ "Cable": [5.073420585038325, 821.4601290726264],
+ "Burger": [6.36695882255664, 974.95336530511],
+ "Cake": [7.1092957746478875, 1900.6454460093896],
+ "Can": [5.210018140324185, 489.856223301539],
+ "Candy Bar": [6.374354561101549, 957.2254733218589],
+ "Jar": [10.814425219556954, 1163.862989906934],
+ "Carrot": [4.066622251832112, 611.4870086608927],
+ "Cereal Box": [38.87569444444444, 2629.609895833333],
+ "Coffee Beans": [13.053754053379896, 870.2627837365926],
+ "Lid": [4.451219512195122, 668.7682926829268],
+ "Cup": [9.565597287428274, 1019.9499217527386],
+ "Coffee Maker": [57.14831966690742, 8640.780643242555],
+ "Mug": [5.492082320147085, 810.1160073542494],
+ "Coffee Pot": [10.42316486635654, 2145.1952219506425],
+ "Coffee Unmaker": [195.16656333038088, 14385.856997342782],
+ "Color Changer": [393.8179201841903, 43657.56955103607],
+ "Button": [2.925451350552817, 897.7640381295971],
+ "Computer": [32.06051112710441, 4166.1558006293835],
+ "Counter": [310.33238289815375, 16036.372667879034],
+ "Cutting Board": [127.69996284160389, 5638.015809208526],
+ "Dart": [2.2016466849631664, 341.2234580384227],
+ "Dart Board": [5.23338485316847, 725.4265842349305],
+ "Crate": [113.65244310575636, 10032.937583668005],
+ "Fan": [13.480354178195904, 1416.2078583287216],
+ "Donut": [4.444972577696526, 531.0029250457038],
+ "Everything's A Carrot Machine": [824.9937950937951, 34759.55800865801],
+ "Embiggenator": [160.82976953564614, 43043.67054851495],
+ "Fire Alarm": [13.630786215598139, 2125.442788423626],
+ "Floppy Disk": [6.785028790786948, 764.0642354446577],
+ "Plate": [9.180314502038438, 1625.3803921568629],
+ "Forklift": [405.0756946950559, 26935.838957055214],
+ "Fork": [3.3932750947750123, 1303.1938355035438],
+ "Freeze Ray": [245.96446598021402, 23916.889158086007],
+ "Fridge": [618.1137600055442, 20867.100384628713],
+ "Freezer": [309.894023848162, 13671.851548719396],
+ "Fuse Box": [42.63532290483265, 7915.844533776108],
+ "Lever": [7.1658615136876005, 2550.8395061728397],
+ "Gravity Pad": [339.03267882187936, 39922.730715287515],
+ "Hammer": [4.060822121644243, 778.9440758881518],
+ "Handsaw": [5.489124839124839, 1421.4629343629344],
+ "Keyboard": [4.502439527212754, 1182.8990860362837],
+ "Drawer": [73.76229655808928, 6727.770434234518],
+ "Sink": [293.60559704197783, 21473.316054037074],
+ "Counter Top": [63.57334616941439, 9844.190473585752],
+ "Stool": [33.58820012875931, 2683.608127165149],
+ "Knife": [1.792204371872531, 1034.5142656483188],
+ "Laser": [180.09863776474097, 18258.37227801531],
+ "Laser Toy": [12.735366125083463, 700.513020253728],
+ "Circuit Board": [3.6980482204362803, 491.7703788748565],
+ "Control Panel": [6.769472361809045, 907.6612751256281],
+ "Laser Tip": [7.4008939974457215, 1043.7969348659003],
+ "Light Switch": [4.370500066321793, 582.2743599946942],
+ "Chair": [8.233841122299681, 5392.679942335829],
+ "Microwave": [216.72768982229402, 8704.97631663974],
+ "Milk": [24.2275092936803, 1465.8085501858736],
+ "Sandwich": [4.50962962962963, 634.9886419753086],
+ "Pear": [5.461832061068702, 736.0507633587787],
+ "Pie": [7.020937776467119, 1926.3534355647303],
+ "Printer": [75.2250644457664, 11482.910073369027],
+ "Printer Cartridge": [3.8765678172095286, 564.7324258629071],
+ "Radio": [42.914838367779545, 2594.6604663487014],
+ "Record": [10.380952380952381, 1232.0265567765568],
+ "Robot Arm": [328.3267195767196, 40016.04159318048],
+ "Toolbox": [7.703762533505411, 1448.9215725205995],
+ "Blinds": [35.79955825510768, 13304.262838210932],
+ "Clipboard": [7.352029520295203, 1452.6415498154981],
+ "Books": [8.364244083198331, 1768.8138279053312],
+ "Calendar": [25.599298747276688, 7672.630038126362],
+ "Cart": [91.00738916256158, 9207.839901477833],
+ "Poster": [75.3648631417885, 8950.789562790435],
+ "Cooler": [40.00693276589903, 6841.503586505131],
+ "Folder Holder": [8.216762549351381, 1313.7224816694868],
+ "Light Bulb": [1.8273943915447792, 161.8044566604496],
+ "Notepad": [2.130120481927711, 1096.9771084337349],
+ "Oxygen Tank": [5.016212162006231, 1556.306771414285],
+ "Pallets": [25.935529411764705, 20230.50894117647],
+ "Paper": [10.57373699535153, 4211.485194707896],
+ "Power Boxes": [129.00249532127262, 11348.637398627574],
+ "Scale": [3.609473175447076, 1236.016916384727],
+ "Server": [7.483109118086697, 1728.8990200963294],
+ "Light": [2.597155458645126, 536.7666385846672],
+ "Trolley": [23.094905611585208, 8658.00077579519],
+ "Drill Chuck": [6.492227979274611, 115.90673575129534],
+ "Screwdriver": [2.8243554580362042, 381.2620954470653],
+ "Spoon": [3.222324440355719, 2133.8984973934375],
+ "Tesla Coil": [65.95086910251862, 14187.653068463995],
+ "Toaster": [135.2242128121607, 4623.479008324285],
+ "Bed Toy": [3.665872259294566, 416.92897998093423],
+ "Trophy": [28.34440941062333, 1789.159349987873],
+ "Vending Machine": [198.58848123267722, 33584.49725184385],
+ "Clock": [25.15789993091878, 1338.4850981940194],
+ "Puddle": [27.953141453141452, 16679.136313493458],
+ "Time Machine": [209.4618148875132, 9261.804801449494],
+ "Map": [158.78216343076596, 13438.443140601665]
+}
diff --git a/src/emma_datasets/constants/simbot/high_level_templates.py b/src/emma_datasets/constants/simbot/high_level_templates.py
new file mode 100644
index 0000000..e9f4adf
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/high_level_templates.py
@@ -0,0 +1,763 @@
+# flake8: noqa WPS226
+import random
+from types import MappingProxyType
+
+from emma_datasets.constants.simbot.simbot import get_object_synonym
+
+
+def merge_strings(string1: str, string2: str) -> str:
+ """Dummy way to prevent noqas."""
+ return f"{string1} {string2}"
+
+
+OBJECT_META_TEMPLATE = MappingProxyType(
+ {
+ "pickup": {
+ "paraphrases": [
+ "collect the {target_object_color} {target_object} from inside the {from_container}",
+ "collect the {target_object_color} {target_object} from the {from_container}",
+ "collect the {target_object_color} {target_object} from the {from_receptacle}",
+ "collect the {target_object} from inside the {from_container}",
+ "collect the {target_object} from the {from_container}",
+ "collect the {target_object} from the {from_receptacle}",
+ "collect the {target_object} with a {stacked_object}",
+ "collect the {target_object} with a {stacked_object_color} {stacked_object}",
+ "collect the {target_object} on a {stacked_object}",
+ "collect the {target_object} on a {stacked_object_color} {stacked_object}",
+ "collect the {target_object} with a {stacked_object} on it",
+ "collect the {target_object} with a {stacked_object_color} {stacked_object} on it",
+ "collect the {target_object} that has a {stacked_object} on it",
+ "collect the {target_object} that has a {stacked_object_color} {stacked_object} on it",
+ "fetch the {target_object_color} {target_object} from inside the {from_container}",
+ "fetch the {target_object_color} {target_object} from the {from_container}",
+ "fetch the {target_object_color} {target_object} from the {from_receptacle}",
+ "fetch the {target_object} from inside the {from_container}",
+ "fetch the {target_object} from the {from_container}",
+ "fetch the {target_object} from the {from_receptacle}",
+ "fetch the {target_object} with a {stacked_object}",
+ "fetch the {target_object} with a {stacked_object_color} {stacked_object}",
+ "fetch the {stacked_object} on a {target_object}",
+ "fetch the {stacked_object_color} {stacked_object} on a {target_object}",
+ "fetch the {target_object} with a {stacked_object} on it",
+ "fetch the {target_object} with a {stacked_object_color} {stacked_object} on it",
+ "fetch the {target_object} that has a {stacked_object} on it",
+ "fetch the {target_object} that has a {stacked_object_color} {stacked_object} on it",
+ "get the {target_object} with a {stacked_object}",
+ "get the {target_object} with a {stacked_object_color} {stacked_object}",
+ "get the {stacked_object} on a {target_object}",
+ "get the {stacked_object_color} {stacked_object} on a {target_object}",
+ "get the {target_object_color} {target_object} from inside the {from_container}",
+ "get the {target_object_color} {target_object} from the {from_container}",
+ "get the {target_object_color} {target_object} from the {from_receptacle}",
+ "get the {target_object} from inside the {from_container}",
+ "get the {target_object} from the {from_container}",
+ "get the {target_object} from the {from_receptacle}",
+ "get the {target_object} with a {stacked_object} on it",
+ "get the {target_object} with a {stacked_object_color} {stacked_object} on it",
+ "get the {target_object} that has a {stacked_object} on it",
+ "get the {target_object} that has a {stacked_object_color} {stacked_object} on it",
+ "grab the {target_object_color} {target_object} from inside the {from_container}",
+ "grab the {target_object_color} {target_object} from the {from_container}",
+ "grab the {target_object_color} {target_object} from the {from_receptacle}",
+ "grab the {target_object} from inside the {from_container}",
+ "grab the {target_object} from the {from_container}",
+ "grab the {target_object} from the {from_receptacle}",
+ "grab the {target_object} with a {stacked_object}",
+ "grab the {target_object} with a {stacked_object_color} {stacked_object}",
+ "grab the {stacked_object} on a {target_object}",
+ "grab the {stacked_object_color} {stacked_object} on a {target_object}",
+ "grab the {target_object} with a {stacked_object} on it",
+ "grab the {target_object} with a {stacked_object_color} {stacked_object} on it",
+ "grab the {target_object} that has a {stacked_object} on it",
+ "grab the {target_object} that has a {stacked_object_color} {stacked_object} on it",
+ "pick the {target_object_color} {target_object} from inside the {from_container}",
+ "pick the {target_object_color} {target_object} from the {from_container}",
+ "pick the {target_object_color} {target_object} from the {from_receptacle}",
+ "pick the {target_object} from inside the {from_container}",
+ "pick the {target_object} from the {from_container}",
+ "pick the {target_object} from the {from_receptacle}",
+ "pick the {target_object} with a {stacked_object}",
+ "pick the {target_object} with a {stacked_object_color} {stacked_object}",
+ "pick the {stacked_object} on a {target_object}",
+ "pick the {stacked_object_color} {stacked_object} on a {target_object}",
+ "pick the {target_object} with a {stacked_object} on it",
+ "pick the {target_object} with a {stacked_object_color} {stacked_object} on it",
+ "pick the {target_object} that has a {stacked_object} on it",
+ "pick the {target_object} that has a {stacked_object_color} {stacked_object} on it",
+ "retrieve the {target_object} with a {stacked_object}",
+ "retrieve the {target_object} with a {stacked_object_color} {stacked_object}",
+ "retrieve the {stacked_object} on a {target_object}",
+ "retrieve the {stacked_object_color} {stacked_object} on a {target_object}",
+ "retrieve the {target_object_color} {target_object} from inside the {from_container}",
+ "retrieve the {target_object_color} {target_object} from the {from_container}",
+ "retrieve the {target_object_color} {target_object} from the {from_receptacle}",
+ "retrieve the {target_object} from inside the {from_container}",
+ "retrieve the {target_object} from the {from_container}",
+ "retrieve the {target_object} from the {from_receptacle}",
+ "retrieve the {target_object} with a {stacked_object} on it",
+ "retrieve the {target_object} with a {stacked_object_color} {stacked_object} on it",
+ "retrieve the {target_object} that has a {stacked_object} on it",
+ "retrieve the {target_object} that has a {stacked_object_color} {stacked_object} on it",
+ ],
+ },
+ "place": {
+ "paraphrases": [
+ "leave the {target_object_color} {target_object} in the {to_container}",
+ "leave the {target_object_color} {target_object} in the {to_receptacle_color} {to_container}",
+ "leave the {target_object_color} {target_object} inside the {to_container}",
+ "leave the {target_object_color} {target_object} inside the {to_receptacle_color} {to_container}",
+ "leave the {target_object_color} {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "leave the {target_object_color} {target_object} on the {to_receptacle}",
+ "leave the {target_object} in the {to_container}",
+ "leave the {target_object} in the {to_receptacle_color} {to_container}",
+ "leave the {target_object} inside the {to_container}",
+ "leave the {target_object} inside the {to_receptacle_color} {to_container}",
+ "leave the {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "leave the {target_object} on the {to_receptacle}",
+ "place the {target_object_color} {target_object} in the {to_container}",
+ "place the {target_object_color} {target_object} in the {to_receptacle_color} {to_container}",
+ "place the {target_object_color} {target_object} inside the {to_container}",
+ "place the {target_object_color} {target_object} inside the {to_receptacle_color} {to_container}",
+ "place the {target_object_color} {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "place the {target_object_color} {target_object} on the {to_receptacle}",
+ "place the {target_object} in the {to_container}",
+ "place the {target_object} in the {to_receptacle_color} {to_container}",
+ "place the {target_object} inside the {to_container}",
+ "place the {target_object} inside the {to_receptacle_color} {to_container}",
+ "place the {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "place the {target_object} on the {to_receptacle}",
+ "put the {target_object_color} {target_object} in the {to_container}",
+ "put the {target_object_color} {target_object} in the {to_receptacle_color} {to_container}",
+ "put the {target_object_color} {target_object} inside the {to_container}",
+ "put the {target_object_color} {target_object} inside the {to_receptacle_color} {to_container}",
+ "put the {target_object_color} {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "put the {target_object_color} {target_object} on the {to_receptacle}",
+ "put the {target_object} in the {to_container}",
+ "put the {target_object} in the {to_receptacle_color} {to_container}",
+ "put the {target_object} inside the {to_container}",
+ "put the {target_object} inside the {to_receptacle_color} {to_container}",
+ "put the {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "put the {target_object} on the {to_receptacle}",
+ "set the {target_object_color} {target_object} in the {to_container}",
+ "set the {target_object_color} {target_object} in the {to_receptacle_color} {to_container}",
+ "set the {target_object_color} {target_object} inside the {to_container}",
+ "set the {target_object_color} {target_object} inside the {to_receptacle_color} {to_container}",
+ "set the {target_object_color} {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "set the {target_object_color} {target_object} on the {to_receptacle}",
+ "set the {target_object} in the {to_container}",
+ "set the {target_object} in the {to_receptacle_color} {to_container}",
+ "set the {target_object} inside the {to_container}",
+ "set the {target_object} inside the {to_receptacle_color} {to_container}",
+ "set the {target_object} on the {to_receptacle_color} {to_receptacle}",
+ "return the {target_object} to the {to_receptacle}",
+ "return the {target_object} to the {to_receptacle_color} {to_receptacle}",
+ ]
+ },
+ "pour": {
+ "paraphrases": [
+ "pour the {target_object}",
+ "pour the {target_object} in the {to_receptacle}",
+ "pour the {target_object} into the {to_receptacle}put {target_object} on the {to_receptacle}",
+ "pour the {target_object} on the {to_receptacle}",
+ "pour {target_object}",
+ "pour {target_object} in the {to_receptacle}",
+ "pour {target_object} into the {to_receptacle}",
+ "pour {target_object} on the {to_receptacle}",
+ "put the {target_object}",
+ "put the {target_object} in the {to_receptacle}",
+ "put the {target_object} into the {to_receptacle}",
+ "put {target_object}",
+ "put {target_object} in the {to_receptacle}",
+ "put {target_object} into the {to_receptacle}",
+ "put the {target_object} on the {to_receptacle}",
+ ],
+ },
+ "fill": {
+ "paraphrases": [
+ "fill the {target_object_color} {target_object}",
+ "fill the {target_object_color} {target_object} in the {interaction_object}",
+ "fill the {target_object_color} {target_object} with water",
+ "fill the {target_object_color} {target_object} with water from the {interaction_object}",
+ "fill the {target_object}",
+ "fill the {target_object} in the {interaction_object}",
+ "fill the {target_object} with water",
+ "fill the {target_object} with water from the {interaction_object}",
+ "fill up the {target_object_color} {target_object}",
+ "fill up the {target_object_color} {target_object} in the {interaction_object}",
+ "fill up the {target_object_color} {target_object} with water",
+ "fill up the {target_object_color} {target_object} with water from the {interaction_object}",
+ "fill up the {target_object}",
+ "fill up the {target_object} in the {interaction_object}",
+ "fill up the {target_object} with water",
+ "fill up the {target_object} with water from the {interaction_object}",
+ "put water from the {interaction_object} in the {target_object_color} {target_object}",
+ "put water from the {interaction_object} in the {target_object}",
+ "put water from the {interaction_object} into the {target_object_color} {target_object}",
+ "put water from the {interaction_object} into the {target_object}",
+ "use the {interaction_object} to fill the {target_object_color} {target_object}",
+ "use the {interaction_object} to fill the {target_object}",
+ "use the {interaction_object} to fill the {target_object} with water",
+ "use the {interaction_object} to fill up the {target_object_color} {target_object}",
+ "use the {interaction_object} to fill up the {target_object}",
+ ]
+ },
+ "clean": {
+ "paraphrases": [
+ "clean the dirty {target_object_color} {target_object} in the {interaction_object}",
+ "clean the dirty {target_object} in the {interaction_object}",
+ "clean the {target_object_color} {target_object} in the {interaction_object}",
+ "clean the {target_object} in the {interaction_object}",
+ "make the dirty {target_object_color} {target_object} clean",
+ "make the dirty {target_object} clean",
+ "make the {target_object_color} {target_object} clean",
+ "make the {target_object} clean",
+ "rinse off the dirty {target_object_color} {target_object} in the {interaction_object}",
+ "rinse off the dirty {target_object} in the {interaction_object}",
+ "rinse off the {target_object_color} {target_object} in the {interaction_object}",
+ "rinse off the {target_object} in the {interaction_object}",
+ "rinse the dirty {target_object_color} {target_object} in the {interaction_object}",
+ "rinse the dirty {target_object} in the {interaction_object}",
+ "rinse the {target_object_color} {target_object} in the {interaction_object}",
+ "rinse the {target_object} in the {interaction_object}",
+ "use the {interaction_object} to clean up the dirty {target_object_color} {target_object}",
+ "use the {interaction_object} to clean up the dirty {target_object}",
+ "use the {interaction_object} to clean up the {target_object_color} {target_object}",
+ "use the {interaction_object} to clean up the {target_object}",
+ "wash off the dirty {target_object_color} {target_object} in the {interaction_object}",
+ "wash off the dirty {target_object} in the {interaction_object}",
+ "wash off the {target_object_color} {target_object} in the {interaction_object}",
+ "wash off the {target_object} in the {interaction_object}",
+ "wash the dirty {target_object_color} {target_object} in the {interaction_object}",
+ "wash the dirty {target_object} in the {interaction_object}",
+ "wash the {target_object_color} {target_object} in the {interaction_object}",
+ "wash the {target_object} in the {interaction_object}",
+ ],
+ },
+ "break": {
+ "paraphrases": [
+ "break the {target_object}",
+ "smash the {target_object}",
+ "destroy the {target_object}",
+ "crush the {target_object}",
+ "shatter the {target_object}",
+ "break the {target_object} into pieces",
+ "smash the {target_object} into pieces",
+ "destroy the {target_object} into pieces",
+ "shatter the {target_object} into pieces",
+ "break the {target_object} with the hammer",
+ "smash the {target_object} with the hammer",
+ "destroy the {target_object} with the hammer",
+ "crush the {target_object} with the hammer",
+ "shatter the {target_object} with the hammer",
+ "hit the {target_object} with the hammer",
+ "use the hammer to break the {target_object}",
+ "use the hammer to smash the {target_object}",
+ "use the hammer to destroy the {target_object}",
+ "use the hammer to crush the {target_object}",
+ "use the hammer to shatter the {target_object}",
+ "use the hammer to hit the {target_object}",
+ "break the {target_object_color} {target_object}",
+ "smash the {target_object_color} {target_object}",
+ "destroy the {target_object_color} {target_object}",
+ "crush the {target_object_color} {target_object}",
+ "shatter the {target_object_color} {target_object}",
+ "break the {target_object_color} {target_object} into pieces",
+ "smash the {target_object_color} {target_object} into pieces",
+ "destroy the {target_object_color} {target_object} into pieces",
+ "shatter the {target_object_color} {target_object} into pieces",
+ "break the {target_object_color} {target_object} with the hammer",
+ "smash the {target_object_color} {target_object} with the hammer",
+ "destroy the {target_object_color} {target_object} with the hammer",
+ "crush the {target_object_color} {target_object} with the hammer",
+ "shatter the {target_object_color} {target_object} with the hammer",
+ "hit the {target_object_color} {target_object} with the hammer",
+ "use the hammer to break the {target_object_color} {target_object}",
+ "use the hammer to smash the {target_object_color} {target_object}",
+ "use the hammer to destroy the {target_object_color} {target_object}",
+ "use the hammer to crush the {target_object_color} {target_object}",
+ "use the hammer to shatter the {target_object_color} {target_object}",
+ "use the hammer to hit the {target_object_color} {target_object}",
+ ],
+ },
+ "interact": {
+ "YesterdayMachine_01": {
+ "machine_synonym": get_object_synonym("YesterdayMachine_01"),
+ "paraphrases": [
+ # repair target object without color
+ "fix the {target_object}",
+ "fix the {target_object} using the {machine_synonym}",
+ "make use of the {machine_synonym} to restore the {target_object}",
+ "repair the broken {target_object}",
+ "repair the broken {target_object} using the {machine_synonym}",
+ "repair the {target_object}",
+ "repair the {target_object} using the {machine_synonym}",
+ "restore the {target_object}",
+ "restore the {target_object} using the {machine_synonym}",
+ "use the {machine_synonym} to repair the broken {target_object}",
+ "use the {machine_synonym} to repair the {target_object}",
+ # repair target object with color
+ "fix the {target_object_color} {target_object}",
+ "fix the {target_object_color} {target_object} using the {machine_synonym}",
+ "make use of the {machine_synonym} to restore the {target_object_color} {target_object}",
+ "repair the broken {target_object_color} {target_object}",
+ "repair the broken {target_object_color} {target_object} using the {machine_synonym}",
+ "repair the {target_object_color} {target_object}",
+ "repair the {target_object_color} {target_object} using the {machine_synonym}",
+ "restore the {target_object_color} {target_object}",
+ "restore the {target_object_color} {target_object} using the {machine_synonym}",
+ "use the {machine_synonym} to repair the broken {target_object_color} {target_object}",
+ "use the {machine_synonym} to repair the {target_object_color} {target_object}",
+ ],
+ },
+ "YesterdayMachine_01_from_Carrot": {
+ "machine_synonym": get_object_synonym("YesterdayMachine_01"),
+ "paraphrases": [
+ # convert an object into another object
+ "activate the {machine_synonym} to turn the {target_object_color} {target_object} into a {converted_object}",
+ "activate the {machine_synonym} to turn the {target_object_color} {target_object} to a {converted_object}",
+ "activate the {machine_synonym} to turn the {target_object} into a {converted_object}",
+ "activate the {machine_synonym} to turn the {target_object} to a {converted_object_color} {converted_object}",
+ "change the {target_object_color} {target_object} back into a {converted_object}",
+ "change the {target_object_color} {target_object} into a {converted_object} using the {machine_synonym}",
+ "change the {target_object_color} {target_object} back to a {converted_object}",
+ "change the {target_object_color} {target_object} to a {converted_object} using the {machine_synonym}",
+ "change the {target_object} into a {converted_object} using the {machine_synonym}",
+ "change the {target_object} back to a {converted_object_color} {converted_object}",
+ "change the {target_object} to a {converted_object_color} {converted_object} using the {machine_synonym}",
+ "change the {target_object} to a {converted_object} using the {machine_synonym}",
+ "convert the {target_object_color} {target_object} back into a {converted_object}",
+ "convert the {target_object_color} {target_object} into a {converted_object} using the {machine_synonym}",
+ "convert the {target_object_color} {target_object} back to a {converted_object}",
+ "convert the {target_object_color} {target_object} to a {converted_object} using the {machine_synonym}",
+ "convert the {target_object} into a {converted_object} using the {machine_synonym}",
+ "convert the {target_object} back to a {converted_object_color} {converted_object}",
+ "convert the {target_object} to a {converted_object_color} {converted_object} using the {machine_synonym}",
+ "convert the {target_object} to a {converted_object} using the {machine_synonym}",
+ "turn the {target_object_color} {target_object} back into a {converted_object}",
+ "turn the {target_object_color} {target_object} into a {converted_object} using the {machine_synonym}",
+ "turn the {target_object_color} {target_object} back to a {converted_object}",
+ "turn the {target_object_color} {target_object} to a {converted_object} using the {machine_synonym}",
+ "turn the {target_object} into a {converted_object} using the {machine_synonym}",
+ "turn the {target_object} back to a {converted_object_color} {converted_object}",
+ "turn the {target_object} to a {converted_object_color} {converted_object} using the {machine_synonym}",
+ "turn the {target_object} to a {converted_object} using the {machine_synonym}",
+ "use the {machine_synonym} to turn the {target_object_color} {target_object} back to a {converted_object}",
+ "use the {machine_synonym} to turn the {target_object} into a {converted_object_color} {converted_object}",
+ "use the {machine_synonym} to turn the {target_object} into a {converted_object}",
+ "use the {machine_synonym} to turn the {target_object} to a {converted_object_color} {converted_object}",
+ "use the {machine_synonym} to turn the {target_object} to a {converted_object}",
+ ],
+ },
+ "CoffeeUnMaker_01": {
+ "machine_synonym": get_object_synonym("CoffeeUnMaker_01"),
+ "paraphrases": [
+ merge_strings(
+ string1="activate the {machine_synonym} to turn the coffee",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="activate the {machine_synonym} to turn the {target_object}",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="activate the {machine_synonym} to change the coffee",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="activate the {machine_synonym} to change the {target_object}",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="use the {machine_synonym} to turn the coffee",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="use the {machine_synonym} to turn the {target_object}",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="use the {machine_synonym} to change the coffee",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1="use the {machine_synonym} to change the {target_object}",
+ string2=f"into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ ),
+ merge_strings(
+ string1=f"turn the coffee to {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ string2="by using the {machine_synonym}",
+ ),
+ merge_strings(
+ string1=f"turn the coffee to a {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ string2="by using the {machine_synonym}",
+ ),
+ merge_strings(
+ string1=f"turn the coffee into {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ string2="by using the {machine_synonym}",
+ ),
+ merge_strings(
+ string1=f"turn the coffee into a {random.choice(get_object_synonym('CoffeeBeans_01'))}",
+ string2="by using the {machine_synonym}",
+ ),
+ ],
+ },
+ "EAC_Machine": {
+ "machine_synonym": get_object_synonym("EAC_Machine"),
+ "paraphrases": [
+ "turn the {target_object} into a carrot",
+ "convert the {target_object} into a carrot",
+ "change the {target_object} into a carrot",
+ "make a carrot using the {machine_synonym}",
+ "activate the {machine_synonym} to turn the {target_object} into a carrot",
+ "activate the {machine_synonym} to change the {target_object} into a carrot",
+ "activate the {machine_synonym} to convert the {target_object} into a carrot",
+ "activate the {machine_synonym} to create a carrot from the {target_object}",
+ "activate the {machine_synonym} to generate a carrot from the {target_object}",
+ "operate the {machine_synonym} on the {target_object}",
+ "operate the {machine_synonym} to turn the {target_object} into a carrot",
+ "operate the {machine_synonym} to change the {target_object} into a carrot",
+ "operate the {machine_synonym} to convert the {target_object} into a carrot",
+ "operate the {machine_synonym} to create a carrot from the {target_object}",
+ "operate the {machine_synonym} to generate a carrot from the {target_object}",
+ "turn on the {machine_synonym} to turn the {target_object} into a carrot",
+ "turn on the {machine_synonym} to convert the {target_object} into a carrot",
+ "turn on the {machine_synonym} to create a carrot from the {target_object}",
+ "turn on the {machine_synonym} to generate a carrot from the {target_object}",
+ "use the {machine_synonym} to turn the {target_object} into a carrot",
+ "use the {machine_synonym} to convert the {target_object} into a carrot",
+ "use the {machine_synonym} to create a carrot from the {target_object}",
+ "use the {machine_synonym} to generate a carrot from the {target_object}",
+ "turn the {target_object_color} {target_object} into a carrot",
+ "convert the {target_object_color} {target_object} into a carrot",
+ "activate the {machine_synonym} to turn the {target_object_color} {target_object} into a carrot",
+ "activate the {machine_synonym} to convert the {target_object_color} {target_object} into a carrot",
+ "activate the {machine_synonym} to create a carrot from the {target_object_color} {target_object}",
+ "activate the {machine_synonym} to generate a carrot from the {target_object_color} {target_object}",
+ "operate the {machine_synonym} to turn the {target_object_color} {target_object} into a carrot",
+ "operate the {machine_synonym} to convert the {target_object_color} {target_object} into a carrot",
+ "operate the {machine_synonym} to create a carrot from the {target_object_color} {target_object}",
+ "operate the {machine_synonym} to generate a carrot from the {target_object_color} {target_object}",
+ "turn on the {machine_synonym} to turn the {target_object_color} {target_object} into a carrot",
+ "turn on the {machine_synonym} to convert the {target_object_color} {target_object} into a carrot",
+ "turn on the {machine_synonym} to create a carrot from the {target_object_color} {target_object}",
+ "turn on the {machine_synonym} to generate a carrot from the {target_object_color} {target_object}",
+ "use the {machine_synonym} to turn the {target_object_color} {target_object} into a carrot",
+ "use the {machine_synonym} to convert the {target_object_color} {target_object} into a carrot",
+ "use the {machine_synonym} to create a carrot from the {target_object_color} {target_object}",
+ "use the {machine_synonym} to generate a carrot from the {target_object_color} {target_object}",
+ ],
+ },
+ "Microwave_01": {
+ "machine_synonym": get_object_synonym("Microwave_01"),
+ "paraphrases": [
+ "heat the {target_object} using the {machine_synonym}",
+ "defrost the {target_object} using the {machine_synonym}",
+ "destroy the {target_object} using the {machine_synonym}",
+ "warm the {target_object} using the {machine_synonym}",
+ "activate the {machine_synonym} to heat the {target_object}",
+ "activate the {machine_synonym} to warm the {target_object}",
+ "activate the {machine_synonym} to defrost the {target_object}",
+ "use the {machine_synonym} to heat the {target_object}",
+ "use the {machine_synonym} to warm the {target_object}",
+ "use the {machine_synonym} to defrost the {target_object}",
+ "operate the {machine_synonym} to heat the {target_object}",
+ "operate the {machine_synonym} to warm the {target_object}",
+ "operate the {machine_synonym} to defrost the {target_object}",
+ "turn on the {machine_synonym} to heat the {target_object}",
+ "turn on the {machine_synonym} to warm the {target_object}",
+ "turn on the {machine_synonym} to destroy the {target_object}",
+ "turn on the {machine_synonym} to defrost the {target_object}",
+ "heat the {target_object_color} {target_object} using the {machine_synonym}",
+ "defrost the {target_object_color} {target_object} using the {machine_synonym}",
+ "destroy the {target_object_color} {target_object} using the {machine_synonym}",
+ "warm the {target_object_color} {target_object} using the {machine_synonym}",
+ "activate the {machine_synonym} to heat the {target_object_color} {target_object}",
+ "activate the {machine_synonym} to warm the {target_object_color} {target_object}",
+ "activate the {machine_synonym} to defrost the {target_object_color} {target_object}",
+ "use the {machine_synonym} to heat the {target_object_color} {target_object}",
+ "use the {machine_synonym} to warm the {target_object_color} {target_object}",
+ "use the {machine_synonym} to defrost the {target_object_color} {target_object}",
+ "operate the {machine_synonym} to heat the {target_object_color} {target_object}",
+ "operate the {machine_synonym} to warm the {target_object_color} {target_object}",
+ "operate the {machine_synonym} to defrost the {target_object_color} {target_object}",
+ "turn on the {machine_synonym} to heat the {target_object_color} {target_object}",
+ "turn on the {machine_synonym} to warm the {target_object_color} {target_object}",
+ "turn on the {machine_synonym} to destroy the {target_object_color} {target_object}",
+ "turn on the {machine_synonym} to defrost the {target_object_color} {target_object}",
+ ],
+ },
+ "Printer_3D": {
+ "machine_synonym": get_object_synonym("Printer_3D"),
+ "paraphrases": [
+ "make a {target_object} using the {machine_synonym}",
+ "three d. print the {target_object}",
+ "create a {target_object} using the {machine_synonym}",
+ "print the {target_object} using the {machine_synonym}",
+ "activate the {machine_synonym} to print the {target_object}",
+ "activate the {machine_synonym} to create the {target_object}",
+ "use the {machine_synonym} to print the {target_object}",
+ "use the {machine_synonym} to make the {target_object}",
+ "use the {target_object} cartridge on the printer",
+ "operate the {machine_synonym} to print the {target_object}",
+ "turn on the {machine_synonym} to print the {target_object}",
+ "turn on the {machine_synonym} to make the {target_object}",
+ ],
+ },
+ "ColorChangerStation": {
+ "machine_synonym": get_object_synonym("ColorChangerStation"),
+ "paraphrases": [
+ "paint the {target_object} {converted_object_color} using the {machine_synonym}",
+ "paint the {target_object} {converted_object_color}",
+ "make the {target_object} {converted_object_color} using the {machine_synonym}",
+ "make the {target_object} {converted_object_color}",
+ "turn the {target_object} {converted_object_color} using the {machine_synonym}",
+ "turn the {target_object} {converted_object_color}",
+ "change the color of the {target_object} to {converted_object_color}",
+ "change the color of the {target_object} to {converted_object_color} using the {machine_synonym}",
+ "use the {machine_synonym} to change the color of the {target_object} to {converted_object_color}",
+ "use the {machine_synonym} to make the {target_object} {converted_object_color}",
+ "use the {machine_synonym} to paint the {target_object} {converted_object_color}",
+ "activate the {machine_synonym} to make the {target_object} {converted_object_color}",
+ "activate the {machine_synonym} to paint the {target_object} {converted_object_color}",
+ "operate the {machine_synonym} to make the {target_object} {converted_object_color}",
+ "operate the {machine_synonym} to paint the {target_object} {converted_object_color}",
+ ],
+ }
+ # "timemachine": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["operating", "using", "utilizing", "making use of"],
+ # "machine_synonyms": get_object_synonym("time machine"),
+ # "repair_verb": ["repair", "fix"],
+ # "convert_verb": ["convert", "reverse", "turn"],
+ # "basic_verb": ["use"],
+ # "description_templates": [
+ # # use the time machine
+ # "{basic_verb} the time machine",
+ # # use the time machine to repair the bowl
+ # "{basic_verb} the time machine to repair the {target_object}",
+ # # use the time machine to repair the bowl on the table
+ # "{basic_verb} the time machine to repair the {target_object} on the {from_receptacle}",
+ # # use the time machine to convert the red carrot to a green banana
+ # "{basic_verb} the time machine to convert the {target_object} to a {converted_object}",
+ # # use the time machine to convert the red carrot on the table to a green banana
+ # "{basic_verb} the time machine to convert the {target_object} on the {from_receptacle} to a {converted_object}",
+ # # use the time machine to repair the bowl in the fridge
+ # "{basic_verb} the time machine to repair the {target_object} inside the {from_container}",
+ # # use the time machine to convert the red carrot in the fridge to a green banana
+ # "{basic_verb} the time machine to convert the {target_object} in the {from_container} to a {converted_object}",
+ # ],
+ # "instruction_templates": [
+ # # use the time machine
+ # "{prefix} {verb} {article} time machine",
+ # # use the time machine to repair the bowl
+ # "{prefix} {verb} {article} {machine_synonyms} to {repair_verb} the {target_object}",
+ # "{prefix} {repair_verb} {article} {target_object} by {verbing} the {machine_synonyms}",
+ # # use the time machine to repair the bowl on the table
+ # "{prefix} {verb} {article} {machine_synonyms} to {repair_verb} the {target_object} on {article} {from_receptacle}",
+ # "{prefix} {repair_verb} {article} {target_object} on {article} {from_receptacle} {verbing} the {machine_synonyms}",
+ # # use the time machine to convert the red carrot to a green banana
+ # "{prefix} {verb} {article} {machine_synonyms} to {convert_verb} {article} {target_object} to a {converted_object}",
+ # "{prefix} {convert_verb} {article} {target_object} to a {converted_object} {verbing} the {machine_synonyms}",
+ # # use the time machine to convert the red carrot on the table to a green banana
+ # "{prefix} {verb} {article} {machine_synonyms} to {convert_verb} {article} {target_object} on the {from_receptacle} to a {converted_object}",
+ # "{prefix} {convert_verb} {article} {target_object} on {article} {from_receptacle} to a {converted_object} {verbing} the {machine_synonyms}",
+ # # use the time machine to repair the bowl in the fridge
+ # "{prefix} {verb} {article} {machine_synonyms} to {repair_verb} the {target_object} in the {from_container}",
+ # "{prefix} {repair_verb} {article} {target_object} in {article} {from_container} {verbing} the {machine_synonyms}",
+ # # use the time machine to convert the red carrot in the fridge to a green banana
+ # "{prefix} {verb} {article} {machine_synonyms} to {convert_verb} the {target_object} in the {from_container} to a {converted_object}",
+ # "{prefix} {convert_verb} {article} {target_object} in {article} {from_container} to a {converted_object} {verbing} the {machine_synonyms}",
+ # ],
+ # },
+ # "colorchanger": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["operating", "using", "utilizing", "making use of"],
+ # "machine_synonyms": get_object_synonym("color changer"),
+ # "convert_verb": ["convert", "make", "turn", "change"],
+ # "basic_verb": ["use"],
+ # "description_templates": [
+ # # use the color changer to make the green bowl red
+ # "{prefix} {convert_verb} {article} the color changer to {convert_verb} the {target_object} {converted_object_color}",
+ # # use the color changer to change the green bowl on the table to red/red bowl
+ # "{basic_verb} the color changer to change the {target_object} on the {from_receptacle} to {converted_object_color}",
+ # "{prefix} {convert_verb} {article} {target_object} to a {converted_object_color} {verbing} the color changer",
+ # # use the color changer to change the green bowl inside the fridge to red/red bowl
+ # "{basic_verb} the color changer to change the {target_object} inside the {from_container} to {converted_object_color}",
+ # ],
+ # "instruction_templates": [
+ # # use the color changer to make the green bowl red
+ # "{prefix} {verb} {article} {machine_synonyms} to {convert_verb} {article} {target_object} {converted_object_color}",
+ # # use the color changer to change the green bowl on the table to red
+ # "{prefix} {verb} {article} {machine_synonyms} to {convert_verb} {article} {target_object} on the {from_receptacle} to a {converted_object_color}",
+ # "{prefix} {convert_verb} {article} {target_object} on {article} {from_receptacle} to a {converted_object_color} {verbing} the {machine_synonyms}",
+ # "{prefix} {verb} {article} {machine_synonyms} to {convert_verb} {article} {target_object} on the {from_receptacle} to a {converted_object_color}",
+ # "{prefix} {convert_verb} {article} {target_object} on {article} {from_receptacle} to a {converted_object_color} {verbing} the {machine_synonyms}",
+ # # use the color changer to change the green bowl in the fridge to red
+ # "{prefix} {verb} {article} the {machine_synonyms} to change the {target_object} in the {from_container} to {converted_object_color}",
+ # "{prefix} {convert_verb} {article} {target_object} in {article} {from_container} to a {converted_object_color} {verbing} the {machine_synonyms}",
+ # "{prefix} {verb} {article} the {machine_synonyms} to change the {target_object} in the {from_container} to {converted_object_color}",
+ # "{prefix} {convert_verb} {article} {target_object} in {article} {from_container} to a {converted_object_color} {verbing} the {machine_synonyms}",
+ # ],
+ # },
+ # "microwave": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["operating", "using", "utilizing", "making use of"],
+ # "microwave_verb": ["heat", "destroy"],
+ # "basic_verb": ["use"],
+ # "description_templates": [
+ # # use the microwave
+ # "{basic_verb} the microwave",
+ # # use the microwave to heat the burger
+ # "{basic_verb} the microwave to heat the {target_object}",
+ # # use the microwave to heat the burger on the table
+ # "{basic_verb} the microwave to heat the {target_object} on {from_receptacle}",
+ # # use the microwave to heat the burger in the fridge
+ # "{basic_verb} the microwave to heat the {target_object} in {from_container}",
+ # ],
+ # "instruction_templates": [
+ # # use the microwave
+ # "{prefix} {verb} {article} microwave",
+ # # use the microwave to heat the burger
+ # "{prefix} {verb} {article} microwave to {microwave_verb} {article} {target_object}",
+ # "{prefix} microwave {article} {target_object}",
+ # "{prefix} {verb} {article} {target_object} {verbing} the microwave",
+ # # use the microwave to heat the burger on the table
+ # "{prefix} {verb} {article} microwave to {microwave_verb} {article} {target_object} on the {from_receptacle}",
+ # "{prefix} microwave {article} {target_object} on the {from_receptacle}",
+ # "{prefix} {verb} {article} {target_object} on the {from_receptacle} {verbing} the microwave",
+ # # use the microwave to heat the burger inside the fridge
+ # "{prefix} {verb} {article} microwave to {microwave_verb} {article} {target_object} inside the {from_container}",
+ # "{prefix} microwave {article} {target_object} inside the {from_contianer}",
+ # "{prefix} {microwave_verb} {article} {target_object} inside the {from_container} {verbing} the microwave",
+ # ],
+ # },
+ # "3dprinter": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["using", "utilizing", "making use of"],
+ # "machine_synonyms": get_object_synonym("printer"),
+ # "basic_verb": ["use"],
+ # "generate_verb": ["make, build, generate", "3d print", "print", "three d print"],
+ # "description_templates": [
+ # # use the 3d printer
+ # "{basic_verb} the three d printer",
+ # # use the 3d printer with the mug printer cartridge
+ # "{basic_verb} the three d printer with {target_object}",
+ # # use the 3d printer to make a mug
+ # "{basic_verb} the three d printer to make a {converted_object}",
+ # # use the 3d printer with the mug printer cartridge to make a mug
+ # "{basic_verb} the three d printer with {target_object} to make a {converted_object}",
+ # # use the 3d printer with the mug printer cartridge on the table to make a mug
+ # "{basic_verb} the three d printer with the {target_object} on the {from_receptacle} to make a {converted_object}",
+ # # use the 3d printer with the mug printer cartridge in the drawer to make a mug
+ # "{basic_verb} the three d printer with the {target_object} in the {from_container} to make a {converted_object}",
+ # ],
+ # "instruction_templates": [
+ # # use the 3d printer
+ # "{prefix} {verb} {article} {machine_synonyms}",
+ # # use the 3d printer with the mug printer cartridge
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object}",
+ # "{prefix} use the {target_object} to operate the {machine_synonyms}",
+ # "{prefix} operate {article} {machine_synonyms} {verbing} {target_object}",
+ # # use the 3d printer to make a mug
+ # "{prefix} {verb} {article} {machine_synonyms} to 3d print a {target_object}",
+ # "{prefix} {verb} {article} {machine_synonyms} to {generate_verb} a {converted_object}",
+ # "{prefix} {generate_verb} a {converted_object} {verbing} {article} {machine_synonyms}",
+ # # use the 3d printer with the mug printer cartridge to make a mug
+ # "{prefix} {verb} the printer with the {target_object} to {generate_verb} a {converted_object}",
+ # "{prefix} {generate_verb} a {converted_object} {verbing} {article} {target_object}",
+ # # use the 3d printer with the mug printer cartridge on the table to make a mug
+ # "{prefix} {verb} the printer with the {target_object} on the {from_receptacle} to {generate_verb} a {converted_object}",
+ # "{prefix} {generate_verb} a {converted_object} {verbing} {article} {target_object} on {from_receptacle}",
+ # # use the 3d printer with the mug printer cartridge in the drawer to make a mug
+ # "{prefix} {verb} the printer with the {target_object} in the {from_receptacle} to {generate_verb} a {converted_object}",
+ # "{prefix} {generate_verb} a {converted_object} {verbing} {article} {target_object} inside the {from_receptacle}",
+ # "{prefix} {generate_verb} a {converted_object} {verbing} {article} {target_object} from the {from_receptacle}",
+ # ],
+ # },
+ # "coffeemaker": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["operating", "using", "utilizing", "making use of"],
+ # "machine_synonyms": get_object_synonym("coffee maker"),
+ # "repair_verb": ["repair", "correct", "put right", "fix"],
+ # "convert_verb": ["convert", "reverse", "turn"],
+ # "basic_verb": ["operate"],
+ # "description_templates": [
+ # # use the coffee maker
+ # "{basic_verb} the coffee maker to make a coffee",
+ # # use the coffee maker with coffee beans
+ # "{basic_verb} the coffee maker with {target_object}",
+ # # use the coffee maker with coffee beans on the table
+ # "{basic_verb} the coffee maker with {target_object} on the {from_receptacle}",
+ # # use the coffee maker with coffee beans inside the drawer
+ # "{basic_verb} the coffee maker with {target_object} inside the {from_container}",
+ # ],
+ # "instruction_templates": [
+ # # use the coffee maker
+ # "{prefix} {verb} {article} {machine_synonyms} to make a coffee",
+ # # use the coffee maker with coffee beans
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object}",
+ # # use the coffee maker with coffee beans on the table
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object} on {article} {from_receptacle}",
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object} from {from_receptacle}",
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object} on {article} {from_receptacle}",
+ # "{prefix} {verb} {article} {machine_synonyms} machine with {target_object} from {from_receptacle}",
+ # # use the coffee maker with coffee beans inside the drawer
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object} inside the {from_container}",
+ # "{prefix} {verb} {article} {machine_synonyms} with {target_object} inside the {from_container}",
+ # ],
+ # },
+ # "fusebox": {
+ # "verb": ["use", "make use of"],
+ # "verbing": ["using", "making use of"],
+ # "machine_synonyms": get_object_synonym("fuse box"),
+ # "basic_verb": ["use"],
+ # "description_templates": [
+ # # use the fuse box to turn the power on
+ # "{basic_verb} the fuse box to turn the power on",
+ # ],
+ # "instruction_templates": [
+ # "{prefix} {verb} {article} {machine_synonyms} to turn the power on",
+ # "{prefix} {verb} {article} {machine_synonyms} to turn power on",
+ # "{prefix} turn the power on {verbing} the {machine_synonyms}",
+ # ],
+ # },
+ # "coffeeunmaker": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["operating", "using", "utilizing", "making use of"],
+ # "machine_synonyms": get_object_synonym("coffee unmaker"),
+ # "convert_verb": ["convert", "reverse", "turn back"],
+ # "basic_verb": ["use"],
+ # "description_templates": [
+ # "{basic_verb} the coffee composer to un make the coffee",
+ # "{basic_verb} the coffee composer to un make the coffee in the {target_object}",
+ # "{basic_verb} the coffee composer to un make the coffee in the {target_object} on the {from_receptacle}",
+ # ],
+ # "instruction_templates": [
+ # "{prefix} {verb} {article} {machine_synonyms} to un make the coffee",
+ # "{prefix} {verb} {article} {machine_synonyms} to un make the coffee in the {target_object}",
+ # "{prefix} {verb} {article} {machine_synonyms} to un make the coffee in the {target_object} on the {from_receptacle}",
+ # "{prefix} {verb} {article} {machine_synonyms} to un make the coffee in the {target_object} inside the {from_container}",
+ # ],
+ # },
+ # "gravitypad": {
+ # "verb": ["operate", "use", "utilize", "make use of"],
+ # "verbing": ["operating", "using", "utilizing", "making use of"],
+ # "machine_synonyms": get_object_synonym("gravity pad"),
+ # "convert_verb": ["convert", "reverse", "turn back"],
+ # "basic_verb": ["use"],
+ # "description_templates": [
+ # "{basic_verb} the gravity pad to flip the gravity",
+ # "{basic_verb} the gravity pad to flip the gravity on {target_object}",
+ # "{basic_verb} the gravity pad to flip the gravity on the {target_object} on {from_receptacle}",
+ # "{basic_verb} the gravity pad to flip the gravity on the {target_object} inside the {from_container}",
+ # ],
+ # "instruction_templates": [
+ # "{prefix} {verb} {article} {machine_synonyms} to flip the gravity",
+ # "{prefix} {verb} {article} {machine_synonyms} to flip the gravity on {target_object}",
+ # "{prefix} {verb} {article} {machine_synonyms} to flip the gravity on the {target_object} on {from_receptacle}",
+ # "{prefix} {verb} {article} {machine_synonyms} to flip the gravity on the {target_object} inside the {from_container}",
+ # ],
+ # },
+ },
+ }
+)
diff --git a/src/emma_datasets/constants/simbot/low_level_actions_templates.json b/src/emma_datasets/constants/simbot/low_level_actions_templates.json
new file mode 100644
index 0000000..2f836d5
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/low_level_actions_templates.json
@@ -0,0 +1,171 @@
+{
+ "MoveForward": {
+ "type": "Move",
+ "direction": "Forward",
+ "templates": [
+ "forward.",
+ "go forward.",
+ "head forward.",
+ "advance forward.",
+ "move forward.",
+ "move ahead.",
+ "move slightly forward.",
+ "move a bit forward.",
+ "move forward a bit.",
+ "move forward for a few steps.",
+ "move a bit forward.",
+ "move a little forward.",
+ "run forward.",
+ "run ahead.",
+ "roll forward.",
+ "roll ahead.",
+ "walk forward.",
+ "walk towards forward.",
+ "walk a bit forward.",
+ "walk slightly forward.",
+ "walk ahead.",
+ "walk forward for a few steps.",
+ "walk ahead for a few steps.",
+ "walk a few steps forward.",
+ "walk a few steps onwards.",
+ "walk towards the front.",
+ "onward.",
+ "continue walking forward.",
+ "continue moving forward.",
+ "continue forward.",
+ "continue ahead.",
+ "continue a bit forward.",
+ "for a few steps, move forward.",
+ "move a few steps forward.",
+ "step forward a bit.",
+ "keep moving forward.",
+ "keep going forward."
+ ]
+ },
+ "MoveBackward": {
+ "type": "Move",
+ "direction": "Backward",
+ "templates": [
+ "move backwards.",
+ "move slightly backwards.",
+ "move backwards for a few steps.",
+ "move backwards a few steps.",
+ "move a little backwards.",
+ "move backwards a little.",
+ "move a bit backwards.",
+ "move backwards a bit.",
+ "walk backwards.",
+ "walk a bit backwards.",
+ "walk slightly backwards.",
+ "walk backwards for a few steps.",
+ "walk a few steps backwards.",
+ "walk backwards a few steps.",
+ "backward.",
+ "continue walking backwards.",
+ "continue moving backward.",
+ "continue backwards.",
+ "continue a bit backwards.",
+ "for a few steps, move backwards.",
+ "go backwards.",
+ "move back.",
+ "move slightly back.",
+ "move back for a few steps.",
+ "move back a few steps.",
+ "move a little back.",
+ "move back a little.",
+ "move a bit back.",
+ "move back a bit.",
+ "move back a few steps.",
+ "walk back.",
+ "walk a bit back.",
+ "walk back a bit.",
+ "walk slightly back.",
+ "walk back slightly.",
+ "walk back for a few steps.",
+ "walk a few steps back.",
+ "walk back a few steps.",
+ "step back a bit.",
+ "step back."
+ ]
+ },
+ "Rotate Right": {
+ "type": "Rotate",
+ "direction": "Right",
+ "templates": [
+ "turn right.",
+ "go right.",
+ "look right.",
+ "turn a bit to the right.",
+ "turn clockwise",
+ "turn to your right.",
+ "turn to the right.",
+ "turn on your right hand side.",
+ "turn to the right direction.",
+ "right turn.",
+ "move right.",
+ "rotate right.",
+ "rotate a bit to the right.",
+ "rotate to the right.",
+ "make a right turn.",
+ "rotate to your right."
+ ]
+ },
+ "Rotate Left": {
+ "type": "Rotate",
+ "direction": "Left",
+ "templates": [
+ "turn left.",
+ "go left.",
+ "look left.",
+ "turn a bit to the left.",
+ "turn counter-clockwise.",
+ "turn anti-clockwise.",
+ "turn to your left.",
+ "turn to the left.",
+ "turn on your left hand side.",
+ "turn to the left direction.",
+ "left turn.",
+ "move left.",
+ "rotate left.",
+ "rotate a bit to the left.",
+ "rotate to the left.",
+ "make a left turn.",
+ "rotate to your left."
+ ]
+ },
+ "LookDown": {
+ "type": "Look",
+ "direction": "Down",
+ "templates": [
+ "look down.",
+ "look down to the floor.",
+ "look to the floor.",
+ "look at the floor.",
+ "look at your feet.",
+ "look downwards."
+ ]
+ },
+ "LookUp": {
+ "type": "Look",
+ "direction": "Up",
+ "templates": [
+ "look up.",
+ "look up to the ceiling.",
+ "look to the roof.",
+ "look to the ceiling.",
+ "look at the roof.",
+ "look at the ceiling.",
+ "look upwards."
+ ]
+ },
+ "Turn Around": {
+ "type": "Turn",
+ "direction": "Around",
+ "templates": [
+ "turn around.",
+ "spin around.",
+ "look behind you.",
+ "do a u-turn."
+ ]
+ }
+}
diff --git a/src/emma_datasets/constants/simbot/object_id_to_class2.json b/src/emma_datasets/constants/simbot/object_id_to_class2.json
new file mode 100644
index 0000000..51adef7
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/object_id_to_class2.json
@@ -0,0 +1,359 @@
+{
+ "Action Figure": ["ActionFigure"],
+ "Apple": ["Apple", "AppleSlice_01"],
+ "Banana": ["BananaBunch_01", "Banana_01"],
+ "Battery": ["AP_Tool_Buffer_01_Battery", "SM_Tool_Buffer_01_Battery"],
+ "Bed Toy": ["ToyBed"],
+ "Blinds": ["SM_Bld_Wall_Window_Blinds_Open_04"],
+ "Board": ["AP_Prop_CorkBoard_02", "PinBoard_01", "PinBoard_02"],
+ "Books": [
+ "SM_Prop_Book_Group_01",
+ "SM_Prop_Book_Group_02",
+ "SM_Prop_Book_Group_03",
+ "SM_Prop_Book_Group_04",
+ "SM_Prop_Book_Group_05",
+ "SM_Prop_Book_Group_06",
+ "SM_Prop_Book_Group_07",
+ "SM_Prop_Book_Group_08",
+ "SM_Prop_Book_Magazine_01",
+ "SM_Prop_Book_Phone_Open_01"
+ ],
+ "Bowl": ["Bowl_01"],
+ "Boxes": [
+ "AP_Prop_CardboardBox_Open_05",
+ "AP_Prop_CardboardBox_Stack_02",
+ "PackingBox",
+ "SM_Prop_FlatPackCardboardBoxes_03",
+ "SM_Prop_FlatPackCardboardBoxes_04",
+ "SM_Prop_Warehouse_Boxes_Stacked_03",
+ "SM_Prop_Warehouse_Boxes_Stacked_04",
+ "Warehouse_Boxes"
+ ],
+ "Bread": [
+ "BreadLoaf",
+ "BreadSlice_01",
+ "Toast_01",
+ "Toast_02",
+ "Toast_03",
+ "Toast_04",
+ "Toast_04_Jam",
+ "Toast_04_PBJ"
+ ],
+ "Burger": ["Burger_04"],
+ "Button": [
+ "ColorChanger_Button_Blue",
+ "ColorChanger_Button_Green",
+ "ColorChanger_Button_Red",
+ "SM_Prop_Buttons_02",
+ "SM_Prop_Buttons_05",
+ "Security_Button",
+ "VendingMachine_01_B4_Button",
+ "VendingMachine_01_E5_Button",
+ "VendingMachine_01_E7_Button",
+ "VendingMachine_01_M8_Button"
+ ],
+ "Cabinet": [
+ "AP_Prop_Cabinets_01",
+ "KitchenCabinet_01",
+ "KitchenCabinet_01_Trapped",
+ "KitchenCabinet_02",
+ "SM_Prop_Server_Cabinet_01"
+ ],
+ "Cable": [
+ "Broken_Cord_01",
+ "CableFrayed_01",
+ "SM_Prop_NetCable_03",
+ "SM_Prop_Plastic_Pipe_Spool_01",
+ "SM_Prop_Powercable_01",
+ "SM_Prop_Powercable_02",
+ "SM_Prop_Powercable_03",
+ "SM_Prop_Wirespool_01",
+ "SM_Prop_Wirespool_Small_01"
+ ],
+ "Cake": ["CakeSlice_02", "Cake_02"],
+ "Calendar": ["SM_Prop_Calender_01"],
+ "Can": [
+ "CanSodaNew_01",
+ "CanSodaNew_Crushed_01",
+ "CanSodaNew_Open_01",
+ "CanSoda_01"
+ ],
+ "Candy Bar": ["CandyBar_01"],
+ "Carrot": ["Carrot_01"],
+ "Cart": ["SM_Prop_Cart_01"],
+ "Cereal Box": ["Cereal_Box_01"],
+ "Chair": ["Manager_Chair", "Office_Chair"],
+ "Circuit Board": ["Laser_CircuitBoard"],
+ "Clamp": ["AP_Prop_Lab_Clamp_02_Arm_01"],
+ "Clipboard": ["SM_Item_Clipboard_01"],
+ "Clock": ["WallClock_01"],
+ "Coffee Beans": ["CoffeeBeans_01"],
+ "Coffee Maker": ["CoffeeMaker_01"],
+ "Coffee Pot": ["CoffeePot_01"],
+ "Coffee Unmaker": ["CoffeeUnMaker_01"],
+ "Color Changer": ["ColorChangerStation"],
+ "Computer": [
+ "Computer_Monitor_01",
+ "Computer_Monitor_Broken",
+ "Computer_Monitor_New",
+ "Lab_Terminal",
+ "TAMPrototypeHead_01",
+ "V_Monitor_Embiggenator",
+ "V_Monitor_FreezeRay",
+ "V_Monitor_Gravity",
+ "V_Monitor_Laser",
+ "V_Monitor_Portal"
+ ],
+ "Control Panel": ["Laser_ControlPanel"],
+ "Cooler": ["SM_Prop_Drink_Dispenser_01", "WaterCooler_01"],
+ "Couch": ["AP_Prop_Couch_02", "AP_Prop_Couch_06"],
+ "Counter": [
+ "CounterBase_03",
+ "KitchenCounter01",
+ "KitchenCounterBase_02",
+ "KitchenCounterBase_03"
+ ],
+ "Counter Top": ["KitchenCounterTop_02"],
+ "Crate": ["Deembiggenator_Crates", "SM_Prop_Crate_Stack_01"],
+ "Cup": [
+ "CoffeeCup_Open_Empty_01",
+ "CoffeeCup_Open_Empty_02",
+ "PaperCup_01",
+ "PaperCup_Crushed_01"
+ ],
+ "Cutting Board": ["Cutting_Board"],
+ "Dart": ["Dart"],
+ "Dart Board": ["DartBoard"],
+ "Donut": ["Donut_01"],
+ "Door": [
+ "AP_Bld_Wall_Glass_Large_Door_01",
+ "Door_01",
+ "SM_Bld_Door_02",
+ "SM_Bld_Wall_Metal_Slide_02"
+ ],
+ "Door Sign": [
+ "AP_Prop_Sign_OutofOrder_01",
+ "SM_Sign_Exit_02",
+ "sign_short_breakroom_1",
+ "sign_short_breakroom_2",
+ "sign_short_caution_carrot",
+ "sign_short_caution_electrical",
+ "sign_short_caution_gravity_1",
+ "sign_short_caution_gravity_2",
+ "sign_short_caution_quantum_1",
+ "sign_short_caution_quantum_2",
+ "sign_short_caution_restricted_1",
+ "sign_short_caution_shrink",
+ "sign_short_office_1",
+ "sign_short_quantum_1",
+ "sign_short_quantum_2",
+ "sign_short_robotics_1",
+ "sign_short_robotics_2",
+ "sign_short_warehouse_1",
+ "sign_square_breakroom",
+ "sign_tall_caution_carrot",
+ "sign_tall_caution_electrical",
+ "sign_tall_caution_freeze",
+ "sign_tall_caution_laser",
+ "sign_tall_caution_robotics",
+ "sign_tall_caution_shrink"
+ ],
+ "Drawer": ["KitchenCounterDrawer_02", "KitchenCounterDrawer_03"],
+ "Drill Chuck": ["SM_Tool_Drill_Chuck_01"],
+ "Embiggenator": ["Embiggenator"],
+ "Everything's A Carrot Machine": ["EAC_Machine"],
+ "Fan": ["DeskFan_Broken_01", "DeskFan_New_01"],
+ "Fire Alarm": ["FireAlarm_01"],
+ "Fire Extinguisher": ["AP_Prop_Fire_Extinguisher_01", "FireExtinguisher_01"],
+ "Floppy Disk": [
+ "Floppy_AntiVirus",
+ "Floppy_AntiVirus_Broken",
+ "Floppy_Virus",
+ "Floppy_Virus_Broken"
+ ],
+ "Folder": [
+ "AP_Prop_Folder_PVC_02",
+ "SM_Prop_Folder_Manila_01",
+ "SM_Prop_Folder_Manila_02",
+ "SM_Prop_Folder_Manila_03",
+ "SM_Prop_Folder_Manila_04",
+ "SM_Prop_Folder_PVC_01",
+ "SM_Prop_Folder_PVC_02"
+ ],
+ "Folder Holder": [
+ "SM_Prop_Folder_Holder_01",
+ "SM_Prop_Folder_Holder_02",
+ "SM_Prop_Folder_Holder_03",
+ "SM_Prop_Folder_Holder_04"
+ ],
+ "Fork": ["Fork_01"],
+ "Forklift": ["ForkLift", "Fork_Lift"],
+ "Freeze Ray": ["FreezeRay"],
+ "Freezer": ["FridgeUpper_02"],
+ "Fridge": ["FridgeLower_02"],
+ "Fuse Box": ["FuseBox_01", "FuseBox_02"],
+ "Generator": ["AP_Prop_Generator_Large_02", "PortalGenerator"],
+ "Golf Ball": ["AP_Prop_Minigolf_Ball_01"],
+ "Golf Club": ["AP_Prop_Minigolf_Club_01"],
+ "Gravity Pad": ["GravityPad"],
+ "Hammer": ["Hammer"],
+ "Handsaw": ["Handsaw", "SM_Tool_Handsaw_01"],
+ "Jar": ["CandyJar_01", "Jar_Jam_01", "Jar_PeanutButter_01"],
+ "Keyboard": ["Keyboard"],
+ "Knife": ["Knife_01"],
+ "Laser": ["Laser"],
+ "Laser Tip": ["Laser_Tip", "Laser_Tip_Broken"],
+ "Laser Toy": ["LaserBase_toy"],
+ "Lever": ["FuseBox_01_Lever"],
+ "Lid": ["CoffeeCup_Lid_01"],
+ "Light": ["SM_Prop_Warehouse_Light_04"],
+ "Light Bulb": ["SM_Prop_Lighting_Cable_Bulb_01"],
+ "Light Switch": ["LightSwitch_01"],
+ "Machine Panel": [
+ "AP_Prop_Lab_MachinePanel_01",
+ "AP_Prop_Lab_MachinePanel_02"
+ ],
+ "Map": ["sign_office_layout_1"],
+ "Microwave": ["Microwave_01"],
+ "Milk": ["MilkCarton_01"],
+ "Mug": ["CoffeeMug_Boss", "CoffeeMug_Yellow"],
+ "Notepad": ["SM_Prop_NotePad_01"],
+ "Oxygen Tank": ["SM_Prop_Oxygen_Tank", "SM_Prop_Oxygen_Tank_Large"],
+ "Pallets": ["SM_Prop_PalletStack_02"],
+ "Paper": [
+ "SM_Prop_Paper_04",
+ "SM_Prop_Paper_05",
+ "SM_Prop_Paper_06",
+ "SM_Prop_Paper_Pile_01",
+ "SM_Prop_Paper_Pile_03",
+ "SM_Prop_Papers_01"
+ ],
+ "Pear": ["Pear_01"],
+ "Pen": ["AP_Prop_Pen_01", "AP_Prop_Pen_03", "AP_Prop_Pen_06"],
+ "Photocopier": ["AP_Prop_Photocopier_01"],
+ "Pie": ["PieFruitSlice_01", "PieFruit_01"],
+ "Plant": ["AP_Prop_Plant_01", "AP_Prop_Plant_09"],
+ "Plate": ["FoodPlate_01"],
+ "Poster": [
+ "SM_Prop_Certificate_01",
+ "sign_short_poster_delwan_1",
+ "sign_short_poster_delwan_2",
+ "sign_short_poster_delwan_3",
+ "sign_short_poster_delwan_4",
+ "sign_short_poster_tam",
+ "sign_tall_poster_tam_1",
+ "sign_tall_poster_tam_2"
+ ],
+ "Power Boxes": ["SM_Prop_PowerBoxes_01"],
+ "Print Tube": ["AP_Prop_Print_Tube_01"],
+ "Printer": ["Printer_3D"],
+ "Printer Cartridge": [
+ "Printer_Cartridge",
+ "Printer_Cartridge_Figure",
+ "Printer_Cartridge_Hammer",
+ "Printer_Cartridge_Lever",
+ "Printer_Cartridge_Mug"
+ ],
+ "Puddle": ["WaterPuddle_01"],
+ "Radio": ["Radio_01", "Radio_01_Broken"],
+ "Record": ["Record_01"],
+ "Robot Arm": ["RoboticArm_01"],
+ "Sandwich": ["PBJ_Sandwich", "SandwichHalf_01"],
+ "Scale": ["SM_Prop_Scales_01"],
+ "Screwdriver": ["Screwdriver"],
+ "Server": ["SM_Prop_Server_Node_01"],
+ "Shelf": [
+ "AP_Prop_Shelf_06",
+ "Bookshelf_Wooden_01",
+ "Shelf_01",
+ "Shelves_Tall_01"
+ ],
+ "Sink": ["KitchenCounterSink_01"],
+ "Spoon": ["Spoon_01"],
+ "Sticky Note": ["AP_Prop_Note_05", "StickyNote"],
+ "Stool": ["KitchenStool_01"],
+ "Table": [
+ "AP_Prop_Desk_Blue",
+ "AP_Prop_Desk_Green",
+ "AP_Prop_Desk_Green_model",
+ "AP_Prop_Desk_Red",
+ "AP_Prop_Desk_Red_model",
+ "AP_Prop_Desk_Yellow",
+ "Desk_01",
+ "ManagerDesk",
+ "ReceptionDesk",
+ "SM_Prop_Table_02",
+ "TableRoundSmall_02",
+ "TableRound_02",
+ "Table_Metal_01"
+ ],
+ "Tank": ["AP_Prop_Lab_Tank_01", "AP_Prop_Lab_Tank_02"],
+ "Tape": ["AP_Item_Tape_01", "AP_Prop_Cellotape_01"],
+ "Target": ["AP_Prop_Target_Circle_01"],
+ "Tesla Coil": ["TeslaCoil", "TeslaCoil_Small"],
+ "Time Machine": ["YesterdayMachine_01"],
+ "Toaster": ["Toaster_02"],
+ "Tool Board": ["AP_Item_Tool_Board"],
+ "Toolbox": ["SK_Veh_Pickup_01_ToolBox", "SM_Prop_ToolBox_01"],
+ "Trash Can": ["AP_Prop_Bin_Rubbish_01", "AP_Prop_Bucket_02", "TrashCan_01"],
+ "Tray": [
+ "AP_Prop_PaperTray_01_Full_01",
+ "EmptyPaperTray",
+ "FulllPaperTray_01",
+ "SM_Prop_FolderTray_01",
+ "SM_Prop_FolderTray_02",
+ "SM_Prop_FolderTray_03",
+ "SM_Prop_FolderTray_04",
+ "SM_Prop_PaperTray_01_Full_01"
+ ],
+ "Trolley": ["SM_Prop_Warehouse_Platform_Trolley_01"],
+ "Trophy": ["Trophy01"],
+ "Unassigned": [
+ "MissionItemHolder",
+ "SM_Prop_Oxygen_Tank Water",
+ "Unassigned",
+ "PowerOutlet_01"
+ ],
+ "Vending Machine": ["VendingMachine_01"],
+ "Vent": [
+ "AP_Bld_Ceiling_Aircon_01",
+ "SM_Prop_AirVent_01",
+ "SM_Prop_AirVent_Wall_01"
+ ],
+ "Wall Shelf": [
+ "AP_Prop_Shelf_Wall_04",
+ "AP_Prop_Shelf_Wall_FreezeRay",
+ "AP_Prop_Shelf_Wall_Laser"
+ ],
+ "Warning Sign": [
+ "AP_Prop_Safety_Barrier_02",
+ "SafetyBarrier_02",
+ "WarningSign_01",
+ "sign_diamond_carrot",
+ "sign_diamond_fire",
+ "sign_diamond_freeze",
+ "sign_diamond_gravity",
+ "sign_diamond_laser",
+ "sign_diamond_quantum",
+ "sign_diamond_shrink"
+ ],
+ "Water Barrel": ["AP_Prop_Barrel_Open_01", "AP_Prop_Barrel_Water_01"],
+ "Whiteboard": [
+ "AP_Prop_Whiteboard_Devices_03",
+ "AP_Prop_Whiteboard_Devices_04",
+ "AP_Prop_Whiteboard_Devices_05",
+ "AP_Prop_Whiteboard_Devices_06",
+ "AP_Prop_Whiteboard_Devices_07",
+ "AP_Prop_Whiteboard_Devices_08",
+ "AP_Prop_Whiteboard_Devices_09",
+ "AP_Prop_Whiteboard_Devices_10",
+ "AP_Prop_Whiteboard_Devices_11",
+ "AP_Prop_Whiteboard_Devices_12",
+ "AP_Prop_Whiteboard_Devices_13",
+ "AP_Prop_Whiteboard_Devices_14",
+ "AP_Prop_Whiteboard_Devices_15",
+ "WhiteBoard_01",
+ "Whiteboard_CoffeeUnmaker",
+ "Whiteboard_YesterdayMachine"
+ ]
+}
diff --git a/src/emma_datasets/constants/simbot/simbot.py b/src/emma_datasets/constants/simbot/simbot.py
new file mode 100644
index 0000000..05352a6
--- /dev/null
+++ b/src/emma_datasets/constants/simbot/simbot.py
@@ -0,0 +1,76 @@
+from functools import lru_cache
+from typing import Any
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.io import read_json
+
+
+settings = Settings()
+
+ARENA_JSON = settings.paths.constants.joinpath("simbot", "arena_definitions.json")
+SYNTHETIC_JSON = settings.paths.constants.joinpath("simbot", "low_level_actions_templates.json")
+OBJECT_ASSET_SYNONYMS_JSON = settings.paths.constants.joinpath("simbot/asset_synonyms_emnlp.json")
+CLASS_THRESHOLDS_JSON = settings.paths.constants.joinpath("simbot/class_thresholds2.json")
+OBJECT_MANIFEST_JSON = settings.paths.constants.joinpath("simbot/ObjectManifest.json")
+
+
+@lru_cache(maxsize=1)
+def get_arena_definitions() -> dict[str, Any]:
+ """Load the arena definitions."""
+ return read_json(ARENA_JSON)
+
+
+@lru_cache(maxsize=1)
+def get_low_level_action_templates() -> dict[str, Any]:
+ """Load the low level action templates."""
+ return read_json(SYNTHETIC_JSON)
+
+
+@lru_cache(maxsize=1)
+def get_objects_asset_synonyms() -> dict[str, list[str]]:
+ """Load the object synonyms."""
+ return read_json(OBJECT_ASSET_SYNONYMS_JSON)
+
+
+@lru_cache(maxsize=1)
+def get_class_thresholds() -> dict[str, list[float]]:
+ """Load the class thresholds."""
+ return read_json(CLASS_THRESHOLDS_JSON)
+
+
+@lru_cache(maxsize=1)
+def get_object_manifest() -> dict[str, Any]:
+ """Load the object manifest."""
+ return read_json(OBJECT_MANIFEST_JSON)
+
+
+@lru_cache(maxsize=1)
+def get_pickable_objects_ids() -> list[str]:
+ """Get all the pickable object ids from the object manifest."""
+ object_manifest = get_object_manifest()
+
+ pickable_object_ids = []
+ for _, object_metadata in object_manifest.items():
+ object_id = object_metadata["ObjectID"]
+ if "PICKUPABLE" in object_metadata["ObjectProperties"]:
+ pickable_object_ids.append(object_id)
+ return pickable_object_ids
+
+
+@lru_cache(maxsize=1)
+def get_object_name_list_by_property(obj_property: str) -> list[str]:
+ """Get a list of objects with a given property."""
+ obj_manifest = get_object_manifest().values()
+ obj_property = obj_property.upper()
+ return [
+ instance["ReadableName"].lower()
+ for instance in obj_manifest
+ if obj_property in instance["ObjectProperties"]
+ ]
+
+
+@lru_cache(maxsize=1)
+def get_object_synonym(object_id: str) -> list[str]:
+ """Get the synonyms for an object asset."""
+ asset_synonyms = get_objects_asset_synonyms()
+ return asset_synonyms[object_id]
diff --git a/src/emma_datasets/constants/teach/action_idx_to_action_name.json b/src/emma_datasets/constants/teach/action_idx_to_action_name.json
new file mode 100644
index 0000000..a7a7e42
--- /dev/null
+++ b/src/emma_datasets/constants/teach/action_idx_to_action_name.json
@@ -0,0 +1,38 @@
+{
+ "0": "Stop",
+ "1": "Move to",
+ "2": "Forward",
+ "3": "Backward",
+ "4": "Turn Left",
+ "5": "Turn Right",
+ "6": "Look Up",
+ "7": "Look Down",
+ "8": "Pan Left",
+ "9": "Pan Right",
+ "10": "Move Up",
+ "11": "Move Down",
+ "12": "Double Forward",
+ "13": "Double Backward",
+ "14": "Navigation",
+ "15": "Pickup",
+ "16": "Place",
+ "17": "Open",
+ "18": "Close",
+ "19": "ToggleOn",
+ "20": "ToggleOff",
+ "21": "Slice",
+ "22": "Dirty",
+ "23": "Clean",
+ "24": "Fill",
+ "25": "Empty",
+ "26": "Pour",
+ "27": "Break",
+ "28": "BehindAboveOn",
+ "29": "BehindAboveOff",
+ "30": "OpenProgressCheck",
+ "31": "SelectOid",
+ "32": "SearchObject",
+ "33": "Text",
+ "34": "Speech",
+ "35": "Beep"
+}
diff --git a/src/emma_datasets/constants/teach/action_to_action_idx.json b/src/emma_datasets/constants/teach/action_to_action_idx.json
new file mode 100644
index 0000000..9c352f9
--- /dev/null
+++ b/src/emma_datasets/constants/teach/action_to_action_idx.json
@@ -0,0 +1,38 @@
+{
+ "0": 0,
+ "1": 1,
+ "2": 2,
+ "3": 3,
+ "4": 4,
+ "5": 5,
+ "6": 6,
+ "7": 7,
+ "8": 8,
+ "9": 9,
+ "10": 10,
+ "11": 11,
+ "12": 12,
+ "13": 13,
+ "300": 14,
+ "200": 15,
+ "201": 16,
+ "202": 17,
+ "203": 18,
+ "204": 19,
+ "205": 20,
+ "206": 21,
+ "207": 22,
+ "208": 23,
+ "209": 24,
+ "210": 25,
+ "211": 26,
+ "212": 27,
+ "400": 28,
+ "401": 29,
+ "500": 30,
+ "501": 31,
+ "502": 32,
+ "100": 33,
+ "101": 34,
+ "102": 35
+}
diff --git a/src/emma_datasets/constants/teach/default_definitions.json b/src/emma_datasets/constants/teach/default_definitions.json
new file mode 100644
index 0000000..288aaa5
--- /dev/null
+++ b/src/emma_datasets/constants/teach/default_definitions.json
@@ -0,0 +1,259 @@
+{
+ "definitions": {
+ "agents": [
+ {
+ "agent_id": 0,
+ "agent_name": "Commander",
+ "agent_type": 0
+ },
+ {
+ "agent_id": 1,
+ "agent_name": "Driver",
+ "agent_type": 1
+ }
+ ],
+ "actions": [
+ {
+ "action_id": 0,
+ "action_name": "Stop",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 1,
+ "action_name": "Move to",
+ "action_type": "Motion",
+ "pose_delta": []
+ },
+ {
+ "action_id": 2,
+ "action_name": "Forward",
+ "action_type": "Motion",
+ "pose_delta": [0.25, 0, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 3,
+ "action_name": "Backward",
+ "action_type": "Motion",
+ "pose_delta": [-0.25, 0, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 4,
+ "action_name": "Turn Left",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, 0, 0, 0, 90]
+ },
+ {
+ "action_id": 5,
+ "action_name": "Turn Right",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, 0, 0, 0, -90]
+ },
+ {
+ "action_id": 6,
+ "action_name": "Look Up",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, 0, 0, -30, 0]
+ },
+ {
+ "action_id": 7,
+ "action_name": "Look Down",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, 0, 0, 30, 0]
+ },
+ {
+ "action_id": 8,
+ "action_name": "Pan Left",
+ "action_type": "Motion",
+ "pose_delta": [0, 0.25, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 9,
+ "action_name": "Pan Right",
+ "action_type": "Motion",
+ "pose_delta": [0, -0.25, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 10,
+ "action_name": "Move Up",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, 0.25, 0, 0, 0]
+ },
+ {
+ "action_id": 11,
+ "action_name": "Move Down",
+ "action_type": "Motion",
+ "pose_delta": [0, 0, -0.25, 0, 0, 0]
+ },
+ {
+ "action_id": 12,
+ "action_name": "Double Forward",
+ "action_type": "Motion",
+ "pose_delta": [0.5, 0, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 13,
+ "action_name": "Double Backward",
+ "action_type": "Motion",
+ "pose_delta": [-0.5, 0, 0, 0, 0, 0]
+ },
+ {
+ "action_id": 300,
+ "action_name": "Navigation",
+ "action_type": "MapGoal",
+ "start_x": -1,
+ "start_y": -1,
+ "end_x": -1,
+ "end_y": -1
+ },
+ {
+ "action_id": 200,
+ "action_name": "Pickup",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 201,
+ "action_name": "Place",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 202,
+ "action_name": "Open",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 203,
+ "action_name": "Close",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 204,
+ "action_name": "ToggleOn",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 205,
+ "action_name": "ToggleOff",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 206,
+ "action_name": "Slice",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 207,
+ "action_name": "Dirty",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 208,
+ "action_name": "Clean",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 209,
+ "action_name": "Fill",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 210,
+ "action_name": "Empty",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 211,
+ "action_name": "Pour",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 212,
+ "action_name": "Break",
+ "action_type": "ObjectInteraction",
+ "x": -1,
+ "y": -1
+ },
+ {
+ "action_id": 400,
+ "action_name": "BehindAboveOn",
+ "action_type": "ChangeCamera"
+ },
+ {
+ "action_id": 401,
+ "action_name": "BehindAboveOff",
+ "action_type": "ChangeCamera"
+ },
+ {
+ "action_id": 500,
+ "action_name": "OpenProgressCheck",
+ "action_type": "ProgressCheck",
+ "query": ""
+ },
+ {
+ "action_id": 501,
+ "action_name": "SelectOid",
+ "action_type": "ProgressCheck",
+ "query": ""
+ },
+ {
+ "action_id": 502,
+ "action_name": "SearchObject",
+ "action_type": "ProgressCheck",
+ "query": ""
+ },
+ {
+ "action_id": 100,
+ "action_name": "Text",
+ "action_type": "Keyboard",
+ "utterance": ""
+ },
+ {
+ "action_id": 101,
+ "action_name": "Speech",
+ "action_type": "Audio",
+ "utterance": "",
+ "file_name": ""
+ },
+ {
+ "action_id": 102,
+ "action_name": "Beep",
+ "action_type": "Audio",
+ "repeat": 3
+ }
+ ],
+ "status": [
+ {
+ "status_id": 0,
+ "status_name": "Success"
+ },
+ {
+ "status_id": 1,
+ "status_name": "Failure"
+ }
+ ]
+ }
+}
diff --git a/src/emma_datasets/constants/vqa_v2_ans2label.json b/src/emma_datasets/constants/vqa_v2_ans2label.json
new file mode 100644
index 0000000..5471da4
--- /dev/null
+++ b/src/emma_datasets/constants/vqa_v2_ans2label.json
@@ -0,0 +1,3131 @@
+{
+ "": 0,
+ "0": 444,
+ "000": 330,
+ "1": 2195,
+ "1 4": 2163,
+ "1 foot": 202,
+ "1 hour": 644,
+ "1 in back": 204,
+ "1 in front": 2279,
+ "1 in middle": 627,
+ "1 inch": 2881,
+ "1 on left": 1287,
+ "1 on right": 691,
+ "1 way": 1116,
+ "1 world": 2283,
+ "1 year": 908,
+ "1.00": 2835,
+ "10": 1989,
+ "10 feet": 2469,
+ "10 inches": 2727,
+ "10 years": 429,
+ "100": 1908,
+ "100 feet": 98,
+ "100 year party ct": 637,
+ "1000": 1419,
+ "101": 1909,
+ "106": 1910,
+ "10:00": 1039,
+ "10:05": 1038,
+ "10:08": 1037,
+ "10:10": 2193,
+ "10:15": 2192,
+ "10:20": 1811,
+ "10:25": 1810,
+ "10:30": 3019,
+ "10:35": 356,
+ "10:40": 2667,
+ "10:45": 357,
+ "10:50": 678,
+ "10:55": 679,
+ "11": 1988,
+ "11:00": 1623,
+ "11:05": 1624,
+ "11:10": 508,
+ "11:15": 509,
+ "11:20": 2491,
+ "11:25": 2490,
+ "11:30": 1316,
+ "11:35": 1317,
+ "11:45": 47,
+ "11:50": 1980,
+ "11:55": 1979,
+ "12": 2769,
+ "12 feet": 1502,
+ "120": 1140,
+ "12:00": 2824,
+ "12:05": 2823,
+ "12:10": 838,
+ "12:15": 839,
+ "12:20": 1957,
+ "12:25": 1956,
+ "12:28": 1955,
+ "12:30": 32,
+ "12:35": 30,
+ "12:40": 1296,
+ "12:45": 1297,
+ "12:50": 2473,
+ "12:55": 2472,
+ "13": 1990,
+ "14": 1992,
+ "15": 1991,
+ "15 feet": 2124,
+ "150": 1558,
+ "16": 1994,
+ "17": 2772,
+ "18": 1996,
+ "19": 1995,
+ "193": 92,
+ "1950": 1781,
+ "1950s": 3068,
+ "1980": 1351,
+ "1990": 197,
+ "1:00": 505,
+ "1:05": 504,
+ "1:10": 1620,
+ "1:15": 1621,
+ "1:20": 2840,
+ "1:25": 2839,
+ "1:30": 851,
+ "1:35": 850,
+ "1:40": 2112,
+ "1:45": 2113,
+ "1:50": 148,
+ "1:55": 146,
+ "1st": 1412,
+ "2": 841,
+ "2 feet": 2741,
+ "2 hours": 874,
+ "2 men": 831,
+ "2 people": 900,
+ "2 years": 632,
+ "2.00": 1836,
+ "20": 1015,
+ "20 feet": 2679,
+ "20 ft": 3074,
+ "200": 466,
+ "2000": 2889,
+ "2007": 2890,
+ "2008": 2891,
+ "2009": 2892,
+ "2010": 1683,
+ "2011": 1682,
+ "2012": 1685,
+ "2013": 1684,
+ "2015": 1680,
+ "2016": 1681,
+ "21": 2042,
+ "22": 2043,
+ "23": 2044,
+ "24": 2038,
+ "25": 2039,
+ "26": 2040,
+ "27": 2041,
+ "28": 2045,
+ "29": 2046,
+ "2:00": 472,
+ "2:05": 577,
+ "2:10": 2568,
+ "2:15": 2569,
+ "2:20": 1394,
+ "2:25": 1393,
+ "2:30": 244,
+ "2:35": 245,
+ "2:40": 2099,
+ "2:45": 2098,
+ "2:50": 945,
+ "2:55": 944,
+ "2nd": 2374,
+ "3": 2621,
+ "3 feet": 227,
+ "3 inches": 1602,
+ "30": 2093,
+ "30 mph": 2682,
+ "300": 2079,
+ "31": 2092,
+ "32": 2091,
+ "33": 2090,
+ "34": 2096,
+ "35": 2095,
+ "350": 1707,
+ "36": 2094,
+ "37": 126,
+ "38": 2089,
+ "39": 2088,
+ "3:00": 2572,
+ "3:10": 580,
+ "3:15": 579,
+ "3:20": 248,
+ "3:25": 247,
+ "3:30": 1396,
+ "3:45": 1054,
+ "3:50": 2205,
+ "3:55": 2206,
+ "3rd": 1977,
+ "4": 1239,
+ "4 feet": 2755,
+ "4 ft": 463,
+ "4 inches": 2553,
+ "4 way": 812,
+ "40": 2134,
+ "400": 578,
+ "41": 2135,
+ "42": 374,
+ "43": 2133,
+ "44": 2130,
+ "45": 2131,
+ "46": 2128,
+ "47": 2129,
+ "48": 2126,
+ "49": 2127,
+ "4:00": 882,
+ "4:05": 883,
+ "4:15": 2863,
+ "4:20": 64,
+ "4:30": 2023,
+ "4:35": 2022,
+ "4:40": 2517,
+ "4:45": 2516,
+ "4:50": 1340,
+ "4:55": 1341,
+ "4th of july": 1392,
+ "5": 3031,
+ "5 feet": 2080,
+ "5 ft": 2349,
+ "5 star": 263,
+ "5 years": 2004,
+ "50": 2174,
+ "50 feet": 1186,
+ "500": 2218,
+ "51": 2173,
+ "52": 2176,
+ "53": 2175,
+ "54": 2171,
+ "55": 2170,
+ "56": 2172,
+ "59": 2169,
+ "5:00": 2503,
+ "5:05": 2504,
+ "5:10": 529,
+ "5:15": 528,
+ "5:18": 527,
+ "5:25": 1640,
+ "5:30": 2856,
+ "5:40": 871,
+ "5:45": 870,
+ "5:50": 2011,
+ "5:55": 2012,
+ "6": 1618,
+ "6 feet": 3098,
+ "6 inches": 1531,
+ "60": 2269,
+ "600": 292,
+ "61": 2270,
+ "64": 2213,
+ "65": 2214,
+ "66": 2215,
+ "68": 2216,
+ "6:00": 2385,
+ "6:05": 2384,
+ "6:20": 56,
+ "6:25": 57,
+ "6:30": 2009,
+ "6:35": 2008,
+ "6:40": 863,
+ "6:45": 864,
+ "7": 311,
+ "7 eleven": 1694,
+ "70": 2273,
+ "700": 586,
+ "72": 1110,
+ "75": 2272,
+ "7:00": 1416,
+ "7:05": 1417,
+ "7:10": 2586,
+ "7:25": 2229,
+ "7:35": 273,
+ "7:45": 2939,
+ "7:55": 961,
+ "8": 2063,
+ "8 feet": 827,
+ "80": 2312,
+ "870": 1648,
+ "88": 2311,
+ "8:00": 2673,
+ "8:05": 2672,
+ "8:35": 692,
+ "8:50": 3028,
+ "8:55": 3027,
+ "9": 703,
+ "90": 2354,
+ "99": 2352,
+ "9:05": 700,
+ "9:12": 1827,
+ "9:15": 1828,
+ "9:20": 3039,
+ "9:25": 3038,
+ "9:30": 1063,
+ "9:35": 1061,
+ "9:45": 2333,
+ "9:50": 362,
+ "9:55": 2167,
+ "aa": 867,
+ "above": 986,
+ "above door": 2685,
+ "above sink": 2759,
+ "above stove": 2659,
+ "above toilet": 797,
+ "abstract": 3017,
+ "accident": 2372,
+ "acer": 2240,
+ "across street": 1049,
+ "adidas": 96,
+ "adult": 1913,
+ "adults": 1114,
+ "advertisement": 70,
+ "africa": 492,
+ "african": 2807,
+ "african american": 2111,
+ "after": 1727,
+ "afternoon": 433,
+ "against wall": 1495,
+ "age": 2499,
+ "ahead": 1079,
+ "air": 1747,
+ "air canada": 895,
+ "air conditioner": 2280,
+ "air force": 1578,
+ "air france": 1479,
+ "airplane": 1448,
+ "airplanes": 1343,
+ "airport": 1263,
+ "alaska": 2895,
+ "alcohol": 682,
+ "alive": 2926,
+ "all": 980,
+ "all of them": 3005,
+ "all way": 300,
+ "alligator": 1721,
+ "almonds": 2536,
+ "alps": 1268,
+ "aluminum": 2408,
+ "am": 869,
+ "amazon": 2160,
+ "ambulance": 2550,
+ "america": 272,
+ "american": 314,
+ "american airlines": 1869,
+ "american flag": 1555,
+ "amtrak": 950,
+ "ana": 41,
+ "analog": 121,
+ "angel": 1041,
+ "angels": 2601,
+ "angry": 1571,
+ "animal": 934,
+ "animals": 2509,
+ "ankle": 361,
+ "anniversary": 2563,
+ "antelope": 1679,
+ "antenna": 1071,
+ "antique": 1011,
+ "apartment": 664,
+ "apartments": 287,
+ "apple": 3083,
+ "apple and banana": 2631,
+ "apples": 270,
+ "apron": 54,
+ "arabic": 1344,
+ "arch": 201,
+ "arizona": 2954,
+ "arm": 3061,
+ "army": 2751,
+ "around neck": 1286,
+ "arriving": 833,
+ "arrow": 13,
+ "arrows": 1974,
+ "art": 3057,
+ "ascending": 403,
+ "asia": 2746,
+ "asian": 1902,
+ "asics": 1135,
+ "asleep": 1791,
+ "asparagus": 1120,
+ "asphalt": 1458,
+ "at camera": 2077,
+ "at table": 1074,
+ "at&t": 339,
+ "athletics": 1451,
+ "atv": 2364,
+ "audi": 917,
+ "australia": 1651,
+ "avocado": 1733,
+ "awake": 125,
+ "away": 223,
+ "b": 1279,
+ "babies": 799,
+ "baby": 140,
+ "baby's breath": 2866,
+ "back": 1299,
+ "back left": 114,
+ "background": 2786,
+ "backhand": 1153,
+ "backpack": 2359,
+ "backward": 1406,
+ "backwards": 545,
+ "backyard": 888,
+ "bacon": 2346,
+ "bad": 2774,
+ "badminton": 1100,
+ "bag": 2773,
+ "bagel": 2233,
+ "bagels": 829,
+ "baggage claim": 364,
+ "bags": 2827,
+ "baked": 1360,
+ "baker": 1359,
+ "bakery": 1868,
+ "baking": 1905,
+ "balance": 2780,
+ "balcony": 1157,
+ "bald": 958,
+ "ball": 956,
+ "balloon": 2728,
+ "balloons": 375,
+ "balls": 2500,
+ "bamboo": 2074,
+ "banana": 1831,
+ "banana bread": 1761,
+ "banana peel": 1552,
+ "banana split": 929,
+ "bananas": 960,
+ "band": 1735,
+ "bandana": 354,
+ "bank": 1736,
+ "bank of america": 2942,
+ "bar": 2771,
+ "barbed wire": 847,
+ "barber shop": 658,
+ "bark": 3060,
+ "barn": 3062,
+ "barrel": 117,
+ "barrier": 210,
+ "bars": 3056,
+ "base": 1089,
+ "baseball": 2985,
+ "baseball bat": 516,
+ "baseball cap": 2443,
+ "baseball field": 2605,
+ "baseball game": 1423,
+ "baseball glove": 920,
+ "baseball player": 1698,
+ "baseball uniform": 773,
+ "basil": 421,
+ "basket": 455,
+ "basketball": 1537,
+ "baskets": 1323,
+ "bat": 2770,
+ "bathing": 1128,
+ "bathing suit": 90,
+ "bathroom": 2969,
+ "bathtub": 1077,
+ "batman": 437,
+ "bats": 614,
+ "batter": 1284,
+ "batting": 640,
+ "beach": 1725,
+ "beads": 591,
+ "beagle": 2834,
+ "beanie": 2871,
+ "beans": 1305,
+ "bear": 2914,
+ "beard": 2713,
+ "bears": 2711,
+ "bed": 1132,
+ "bedroom": 2522,
+ "beef": 1387,
+ "beer": 1388,
+ "beets": 551,
+ "before": 401,
+ "behind": 1230,
+ "behind bench": 3075,
+ "behind bus": 1446,
+ "behind clouds": 1172,
+ "behind fence": 597,
+ "behind woman": 764,
+ "beige": 1892,
+ "beijing": 1865,
+ "bell": 123,
+ "below": 2342,
+ "belt": 124,
+ "bench": 1348,
+ "benches": 37,
+ "bending": 1512,
+ "berries": 1855,
+ "best buy": 1886,
+ "bib": 2876,
+ "bible": 2031,
+ "bicycle": 2138,
+ "bicycles": 1563,
+ "bidet": 1622,
+ "big": 2875,
+ "big ben": 153,
+ "bike": 1716,
+ "bike rack": 8,
+ "biker": 947,
+ "bikers": 2795,
+ "bikes": 948,
+ "biking": 1844,
+ "bikini": 1843,
+ "billabong": 2014,
+ "bin": 2874,
+ "biplane": 1209,
+ "bird": 927,
+ "bird feeder": 800,
+ "birds": 1026,
+ "birthday": 2314,
+ "birthday cake": 2614,
+ "birthday party": 2934,
+ "black": 1227,
+ "black and blue": 1368,
+ "black and brown": 630,
+ "black and gray": 1138,
+ "black and orange": 2340,
+ "black and pink": 1672,
+ "black and red": 952,
+ "black and silver": 2778,
+ "black and white": 2324,
+ "black and yellow": 975,
+ "black white": 1851,
+ "blackberry": 286,
+ "blanket": 982,
+ "blankets": 1240,
+ "bleachers": 1541,
+ "blender": 118,
+ "blending": 2375,
+ "blinders": 405,
+ "blinds": 2421,
+ "blonde": 24,
+ "blood": 1267,
+ "blt": 2410,
+ "blue": 411,
+ "blue and black": 736,
+ "blue and gray": 382,
+ "blue and green": 2955,
+ "blue and orange": 1504,
+ "blue and pink": 1159,
+ "blue and red": 2620,
+ "blue and white": 337,
+ "blue and yellow": 1427,
+ "blue jay": 1175,
+ "blue team": 1779,
+ "blueberries": 2642,
+ "blueberry": 2545,
+ "blurry": 2538,
+ "bmw": 1235,
+ "bnsf": 1090,
+ "board": 1751,
+ "boarding": 1923,
+ "boardwalk": 1521,
+ "boat": 2428,
+ "boating": 2764,
+ "boats": 989,
+ "bob": 450,
+ "bone": 1917,
+ "boogie board": 2201,
+ "book": 3127,
+ "books": 150,
+ "bookshelf": 1355,
+ "boot": 3125,
+ "boots": 1860,
+ "bored": 1311,
+ "boredom": 318,
+ "boston": 2366,
+ "both": 2671,
+ "bottle": 2833,
+ "bottles": 1185,
+ "bottom": 35,
+ "bottom left": 876,
+ "bottom right": 238,
+ "boundaries": 471,
+ "bow": 449,
+ "bow tie": 481,
+ "bowl": 3020,
+ "bowling": 834,
+ "bowls": 776,
+ "bowtie": 2030,
+ "box": 447,
+ "boxer": 1753,
+ "boxes": 1752,
+ "boxing": 2103,
+ "boy": 448,
+ "boys": 2081,
+ "brace": 2471,
+ "bracelet": 2232,
+ "braid": 1501,
+ "branch": 14,
+ "branches": 2995,
+ "brand": 2930,
+ "brass": 2243,
+ "braves": 2585,
+ "brazil": 2775,
+ "bread": 2554,
+ "breakfast": 1042,
+ "brewers": 2050,
+ "brick": 2739,
+ "bricks": 2211,
+ "bride": 2657,
+ "bridge": 846,
+ "bridle": 1834,
+ "briefcase": 2756,
+ "bright": 1593,
+ "britain": 2528,
+ "british": 1786,
+ "british airways": 2879,
+ "broadway": 2461,
+ "broccoli": 2529,
+ "broccoli and carrots": 1440,
+ "broke": 1081,
+ "broken": 1246,
+ "bronze": 1460,
+ "broom": 2703,
+ "brown": 2594,
+ "brown and black": 1849,
+ "brown and white": 730,
+ "brush": 3121,
+ "brushing": 75,
+ "brushing hair": 1295,
+ "brushing her teeth": 494,
+ "brushing his teeth": 2646,
+ "brushing teeth": 2360,
+ "bucket": 1070,
+ "bud light": 970,
+ "budweiser": 1420,
+ "buffalo": 1256,
+ "building": 2638,
+ "buildings": 1326,
+ "bull": 2115,
+ "bulldog": 549,
+ "bun": 1354,
+ "bundt": 866,
+ "bunk": 2947,
+ "bunny": 1748,
+ "bunt": 1972,
+ "buoy": 979,
+ "buoys": 2482,
+ "burger": 1378,
+ "burgers": 2381,
+ "burrito": 1057,
+ "burton": 656,
+ "bus": 1353,
+ "bus driver": 1538,
+ "bus station": 2400,
+ "bus stop": 2157,
+ "buses": 2850,
+ "bush": 2368,
+ "bushes": 2264,
+ "business": 2634,
+ "busy": 2367,
+ "butt": 1987,
+ "butter": 1943,
+ "butterfly": 2416,
+ "button": 2690,
+ "button up": 267,
+ "buttons": 1699,
+ "by window": 188,
+ "c": 3065,
+ "cabbage": 1675,
+ "cabinet": 3029,
+ "cabinets": 293,
+ "cactus": 2744,
+ "cadillac": 2757,
+ "cafe": 533,
+ "cage": 2515,
+ "cake": 755,
+ "cakes": 3116,
+ "calendar": 1228,
+ "calico": 2885,
+ "california": 2813,
+ "calm": 2259,
+ "camel": 748,
+ "camera": 349,
+ "cameraman": 2078,
+ "cameras": 2556,
+ "camo": 1543,
+ "camouflage": 1833,
+ "camper": 1878,
+ "camping": 2006,
+ "can": 1771,
+ "can't see": 1906,
+ "can't see it": 1313,
+ "can't tell": 750,
+ "canada": 1976,
+ "candle": 526,
+ "candles": 1023,
+ "candy": 1148,
+ "cane": 423,
+ "cannot tell": 1713,
+ "canoe": 2431,
+ "canon": 2432,
+ "canopy": 3108,
+ "cantaloupe": 848,
+ "cap": 1769,
+ "captivity": 1236,
+ "car": 1768,
+ "caramel": 120,
+ "cardboard": 1167,
+ "cardinal": 2196,
+ "cardinals": 1743,
+ "cargo": 1764,
+ "carnation": 1389,
+ "carnations": 560,
+ "carpet": 2641,
+ "carriage": 1155,
+ "carrot": 1487,
+ "carrot cake": 1580,
+ "carrots": 1134,
+ "cars": 1784,
+ "cart": 1785,
+ "cartoon": 901,
+ "case": 649,
+ "casserole": 932,
+ "cast iron": 2853,
+ "castle": 1629,
+ "casual": 2644,
+ "cat": 1770,
+ "cat and dog": 185,
+ "cat food": 1044,
+ "catch": 2970,
+ "catch ball": 1280,
+ "catch frisbee": 940,
+ "catcher": 1840,
+ "catching": 636,
+ "catching frisbee": 2974,
+ "catholic": 2317,
+ "cats": 2636,
+ "caucasian": 1453,
+ "cauliflower": 274,
+ "caution": 1530,
+ "cd": 953,
+ "cds": 2276,
+ "ceiling": 1375,
+ "celery": 415,
+ "cell": 2691,
+ "cell phone": 200,
+ "cell phones": 721,
+ "cement": 704,
+ "center": 1346,
+ "ceramic": 87,
+ "cereal": 216,
+ "cessna": 1953,
+ "chain": 44,
+ "chain link": 2663,
+ "chains": 2927,
+ "chair": 45,
+ "chairs": 1709,
+ "chalk": 2726,
+ "champagne": 2068,
+ "chandelier": 2564,
+ "charging": 1370,
+ "chase": 2487,
+ "checkerboard": 400,
+ "checkered": 1595,
+ "checkers": 1480,
+ "cheddar": 127,
+ "cheese": 1983,
+ "cheesecake": 1998,
+ "chef": 1719,
+ "cherries": 331,
+ "cherry": 605,
+ "chest": 2767,
+ "chevrolet": 1867,
+ "chevron": 15,
+ "chevy": 2411,
+ "chicago": 2893,
+ "chicken": 3101,
+ "chihuahua": 1914,
+ "child": 795,
+ "children": 2844,
+ "chili": 796,
+ "chimney": 1839,
+ "china": 6,
+ "china airlines": 131,
+ "chinese": 2245,
+ "chips": 2322,
+ "chiquita": 1838,
+ "chocolate": 1414,
+ "choppy": 1318,
+ "chopsticks": 304,
+ "christian": 670,
+ "christmas": 1397,
+ "christmas tree": 1807,
+ "chrome": 792,
+ "church": 1643,
+ "cigarette": 1109,
+ "cigarettes": 1533,
+ "cilantro": 1606,
+ "cinnamon": 1410,
+ "circle": 2665,
+ "circles": 2562,
+ "circus": 568,
+ "cirrus": 237,
+ "citizen": 1349,
+ "city": 1582,
+ "city bus": 102,
+ "clams": 1275,
+ "classic": 1194,
+ "classroom": 2994,
+ "clay": 860,
+ "clean": 2662,
+ "cleaner": 3052,
+ "cleaning": 2675,
+ "clear": 2661,
+ "cleats": 1431,
+ "climbing": 2015,
+ "clip": 738,
+ "clock": 94,
+ "clock tower": 2455,
+ "clocks": 176,
+ "close": 324,
+ "close up": 2841,
+ "closed": 3106,
+ "closet": 3104,
+ "cloth": 2296,
+ "clothes": 1162,
+ "clothing": 1773,
+ "cloud": 1123,
+ "clouds": 681,
+ "cloudy": 624,
+ "club": 2602,
+ "cluttered": 1858,
+ "clydesdale": 1514,
+ "cnn": 2975,
+ "coach": 2185,
+ "coal": 1271,
+ "coaster": 1347,
+ "coat": 1269,
+ "coats": 1584,
+ "cobblestone": 922,
+ "coca cola": 2474,
+ "cocker spaniel": 570,
+ "coconut": 1222,
+ "coffee": 203,
+ "coffee cup": 754,
+ "coffee maker": 609,
+ "coffee pot": 268,
+ "coffee table": 2165,
+ "coins": 195,
+ "coke": 566,
+ "cold": 1025,
+ "coleslaw": 1091,
+ "colgate": 1792,
+ "collage": 1565,
+ "collar": 1455,
+ "collie": 2444,
+ "color": 1428,
+ "colorado": 828,
+ "colored": 1078,
+ "comcast": 196,
+ "comfort": 496,
+ "comforter": 1920,
+ "coming": 497,
+ "commercial": 1862,
+ "commuter": 173,
+ "compaq": 718,
+ "competition": 654,
+ "computer": 2723,
+ "computers": 305,
+ "concentration": 2658,
+ "concert": 1048,
+ "concrete": 1649,
+ "condiments": 1005,
+ "conductor": 2988,
+ "cone": 231,
+ "cones": 334,
+ "conference": 600,
+ "conference room": 963,
+ "confused": 1964,
+ "congratulations": 39,
+ "construction": 972,
+ "container": 836,
+ "continental": 1520,
+ "control": 2701,
+ "controller": 369,
+ "controllers": 1149,
+ "converse": 1758,
+ "cook": 2187,
+ "cooked": 535,
+ "cookie": 2263,
+ "cookies": 1815,
+ "cooking": 5,
+ "cool": 2188,
+ "cooler": 235,
+ "copper": 2052,
+ "copyright": 1094,
+ "cord": 1398,
+ "corgi": 1099,
+ "corn": 1399,
+ "corner": 2002,
+ "corona": 255,
+ "cosmo": 1864,
+ "costume": 359,
+ "cotton": 1115,
+ "couch": 506,
+ "counter": 1678,
+ "country": 1548,
+ "countryside": 887,
+ "couple": 129,
+ "court": 2253,
+ "cover": 905,
+ "cow": 1001,
+ "cowboy": 2181,
+ "cows": 1820,
+ "crafts": 1821,
+ "crane": 3077,
+ "cranes": 1876,
+ "crates": 46,
+ "cream": 83,
+ "crest": 666,
+ "crib": 1984,
+ "crocs": 1739,
+ "croissant": 1372,
+ "cross": 1508,
+ "cross country": 1610,
+ "crossing": 2121,
+ "crosstown": 217,
+ "crosswalk": 907,
+ "crow": 1319,
+ "crown": 33,
+ "crows": 34,
+ "cruise ship": 1082,
+ "csx": 2855,
+ "cubs": 740,
+ "cucumber": 918,
+ "cucumbers": 3043,
+ "cuddling": 1692,
+ "cumulus": 3069,
+ "cup": 524,
+ "cupcake": 1824,
+ "cupcakes": 1121,
+ "cups": 2860,
+ "curb": 532,
+ "curious": 1657,
+ "curly": 2606,
+ "current": 819,
+ "curtain": 2114,
+ "curtains": 2151,
+ "curved": 2909,
+ "cushion": 2369,
+ "cut": 523,
+ "cute": 1210,
+ "cutting": 2903,
+ "cutting board": 2323,
+ "cutting cake": 2826,
+ "cutting hair": 635,
+ "cycling": 2627,
+ "cylinder": 229,
+ "d": 1654,
+ "dachshund": 493,
+ "dad": 2901,
+ "daffodil": 3124,
+ "daffodils": 553,
+ "dairy": 665,
+ "dairy queen": 2623,
+ "daisies": 2883,
+ "daisy": 2653,
+ "dalmatian": 2180,
+ "dancing": 1463,
+ "dandelions": 2397,
+ "dark": 1607,
+ "dawn": 1169,
+ "day": 2904,
+ "day time": 2260,
+ "daytime": 1189,
+ "db": 2898,
+ "dc": 999,
+ "dead": 428,
+ "dead end": 875,
+ "deck": 2760,
+ "decoration": 1527,
+ "decorative": 2944,
+ "deep": 2026,
+ "deer": 2025,
+ "defense": 1133,
+ "deli": 761,
+ "delivery": 971,
+ "dell": 762,
+ "delta": 2297,
+ "denim": 558,
+ "descending": 608,
+ "desert": 2887,
+ "design": 1444,
+ "desk": 2534,
+ "desktop": 1060,
+ "dessert": 537,
+ "desserts": 1856,
+ "detroit": 581,
+ "diamond": 2851,
+ "diamonds": 2007,
+ "diesel": 2557,
+ "diet coke": 2309,
+ "different teams": 2533,
+ "digital": 1196,
+ "dim": 2793,
+ "dining": 1424,
+ "dining room": 1188,
+ "dinner": 611,
+ "dinosaur": 873,
+ "dip": 2796,
+ "direction": 647,
+ "directions": 1445,
+ "dirt": 1087,
+ "dirt bike": 2062,
+ "dirty": 80,
+ "dishes": 157,
+ "dishwasher": 313,
+ "disney": 1365,
+ "display": 385,
+ "distance": 1924,
+ "do not enter": 264,
+ "dock": 1687,
+ "dodge": 2720,
+ "dodgers": 837,
+ "dog": 1930,
+ "dog and cat": 1853,
+ "dog bed": 2822,
+ "dog food": 1092,
+ "dog show": 1363,
+ "dogs": 214,
+ "dole": 1244,
+ "doll": 1243,
+ "dome": 2427,
+ "domestic": 2921,
+ "don't know": 187,
+ "don't walk": 2399,
+ "donkey": 1380,
+ "donut": 1126,
+ "donut shop": 2789,
+ "donuts": 671,
+ "door": 99,
+ "doorway": 172,
+ "dots": 1551,
+ "double": 3051,
+ "double decker": 1407,
+ "doubles": 512,
+ "dough": 1272,
+ "doughnut": 2335,
+ "doughnuts": 1829,
+ "down": 435,
+ "down street": 2555,
+ "downhill": 2884,
+ "downtown": 2800,
+ "dr pepper": 1331,
+ "dragon": 499,
+ "drain": 1237,
+ "drawer": 2804,
+ "drawing": 1708,
+ "dreadlocks": 737,
+ "dress": 2457,
+ "dresser": 569,
+ "drink": 1706,
+ "drinking": 1477,
+ "drinking water": 2483,
+ "drinks": 2981,
+ "drive": 1591,
+ "driver": 2464,
+ "driveway": 1884,
+ "driving": 2952,
+ "drums": 1247,
+ "dry": 1911,
+ "drying": 2356,
+ "drywall": 1585,
+ "ducati": 1776,
+ "duck": 722,
+ "ducks": 2486,
+ "dugout": 3048,
+ "dump": 3058,
+ "dump truck": 1447,
+ "dunkin donuts": 1467,
+ "dusk": 957,
+ "e": 342,
+ "each other": 2161,
+ "eagle": 763,
+ "ear": 1897,
+ "earbuds": 2845,
+ "earring": 1802,
+ "earrings": 1516,
+ "ears": 417,
+ "east": 2383,
+ "easter": 525,
+ "easton": 1202,
+ "easy": 2382,
+ "easyjet": 1961,
+ "eat": 1898,
+ "eaten": 1093,
+ "eating": 2681,
+ "egg": 2648,
+ "egg salad": 1506,
+ "eggs": 507,
+ "eiffel tower": 1438,
+ "electric": 695,
+ "electricity": 760,
+ "electronics": 1332,
+ "elephant": 825,
+ "elephants": 461,
+ "elm": 598,
+ "elmo": 1535,
+ "email": 951,
+ "emergency": 128,
+ "emirates": 111,
+ "empty": 328,
+ "enclosure": 1170,
+ "end": 1369,
+ "engine": 2219,
+ "england": 2463,
+ "english": 3115,
+ "entering": 55,
+ "equestrian": 642,
+ "europe": 2481,
+ "evening": 306,
+ "evergreen": 1405,
+ "exhaust": 2829,
+ "exit": 2436,
+ "eyes": 1986,
+ "f": 2101,
+ "fabric": 38,
+ "face": 1696,
+ "facebook": 2688,
+ "factory": 3000,
+ "fair": 788,
+ "fake": 1569,
+ "fall": 1257,
+ "falling": 2398,
+ "family": 1817,
+ "fan": 3036,
+ "fancy": 2650,
+ "fans": 2067,
+ "fanta": 2820,
+ "far": 3035,
+ "far right": 1426,
+ "farm": 355,
+ "farmer": 634,
+ "farmers": 2209,
+ "farmers market": 913,
+ "fashion": 1381,
+ "fast": 1468,
+ "fast food": 93,
+ "father": 443,
+ "faucet": 500,
+ "feathers": 572,
+ "fedex": 968,
+ "fedora": 1845,
+ "feeder": 1630,
+ "feeding": 2937,
+ "feeding giraffe": 1499,
+ "feet": 2265,
+ "fell": 1067,
+ "female": 564,
+ "fence": 2643,
+ "fern": 613,
+ "ferris wheel": 1490,
+ "ferry": 2989,
+ "festival": 152,
+ "feta": 1686,
+ "few": 1485,
+ "field": 1253,
+ "fighter": 2442,
+ "fighting": 1511,
+ "finch": 386,
+ "finger": 594,
+ "fire": 912,
+ "fire extinguisher": 3064,
+ "fire hydrant": 962,
+ "fire truck": 585,
+ "firefighter": 1352,
+ "fireman": 2729,
+ "fireplace": 2940,
+ "fires": 1031,
+ "first": 462,
+ "first base": 1262,
+ "fish": 36,
+ "fisheye": 1320,
+ "fishing": 1513,
+ "fishing boat": 3001,
+ "flag": 674,
+ "flags": 2872,
+ "flamingo": 2118,
+ "flashlight": 559,
+ "flat": 673,
+ "flat screen": 252,
+ "flats": 659,
+ "flickr": 1142,
+ "flip": 567,
+ "flip flops": 1903,
+ "flip phone": 2016,
+ "floating": 2790,
+ "flood": 2392,
+ "floor": 2391,
+ "floral": 2993,
+ "florida": 2709,
+ "flour": 3093,
+ "flower": 2859,
+ "flowers": 2613,
+ "fluffy": 1935,
+ "fluorescent": 2337,
+ "fly": 2801,
+ "fly kite": 1104,
+ "flying": 2610,
+ "flying kite": 1946,
+ "flying kites": 180,
+ "foam": 280,
+ "focus": 2186,
+ "fog": 808,
+ "foggy": 2628,
+ "foil": 388,
+ "food": 1084,
+ "food processor": 1493,
+ "food truck": 2300,
+ "foot": 284,
+ "football": 621,
+ "footprints": 977,
+ "for balance": 1852,
+ "for fun": 397,
+ "for photo": 71,
+ "for sale": 872,
+ "ford": 1192,
+ "foreground": 3040,
+ "forehand": 1050,
+ "forest": 2105,
+ "fork": 1040,
+ "fork and knife": 589,
+ "fork and spoon": 502,
+ "forks": 2633,
+ "formal": 1653,
+ "formica": 2137,
+ "forward": 1310,
+ "fountain": 2652,
+ "fox": 807,
+ "frame": 168,
+ "france": 2798,
+ "free": 2956,
+ "freezer": 1774,
+ "freight": 1637,
+ "freightliner": 2249,
+ "french": 2797,
+ "french fries": 1379,
+ "fresh": 1666,
+ "fridge": 3025,
+ "fried": 1471,
+ "friend": 1036,
+ "friends": 1901,
+ "fries": 1470,
+ "frisbee": 1712,
+ "frisbees": 1619,
+ "frog": 723,
+ "front": 2705,
+ "frosted": 408,
+ "frosting": 446,
+ "fruit": 1056,
+ "fruit salad": 1715,
+ "fruits": 22,
+ "full": 95,
+ "fun": 1293,
+ "fur": 1292,
+ "furniture": 2230,
+ "futon": 1767,
+ "g": 732,
+ "game": 1848,
+ "game controller": 2370,
+ "gaming": 768,
+ "garage": 2535,
+ "garbage": 2495,
+ "garden": 924,
+ "garlic": 1940,
+ "gas": 2071,
+ "gas station": 1358,
+ "gate": 2948,
+ "gatorade": 832,
+ "gazebo": 1959,
+ "ge": 1118,
+ "geese": 2083,
+ "genetics": 483,
+ "german": 1562,
+ "german shepherd": 1146,
+ "germany": 220,
+ "ghost": 1714,
+ "giants": 2475,
+ "ginger": 409,
+ "giraffe": 991,
+ "giraffe and zebra": 2684,
+ "giraffes": 218,
+ "girl": 2810,
+ "girl on right": 2158,
+ "girls": 1174,
+ "give way": 843,
+ "glass": 2353,
+ "glasses": 149,
+ "glaze": 2010,
+ "glazed": 402,
+ "globe": 2706,
+ "glove": 1298,
+ "gloves": 1097,
+ "gmc": 327,
+ "go": 1119,
+ "goal": 2254,
+ "goalie": 998,
+ "goat": 1029,
+ "goatee": 1889,
+ "goats": 2284,
+ "goggles": 2578,
+ "going": 2420,
+ "gold": 1636,
+ "golden gate": 2429,
+ "golden retriever": 1106,
+ "golf": 1635,
+ "gone": 868,
+ "good": 1433,
+ "google": 2877,
+ "goose": 1030,
+ "gothic": 2328,
+ "graduation": 2882,
+ "graffiti": 112,
+ "grandfather": 1442,
+ "granite": 1357,
+ "grape": 1017,
+ "grapefruit": 2492,
+ "grapes": 2362,
+ "grass": 660,
+ "grassy": 2603,
+ "gravel": 1315,
+ "gravy": 219,
+ "gray": 1880,
+ "gray and black": 322,
+ "gray and red": 798,
+ "gray and white": 717,
+ "grazing": 1549,
+ "green": 990,
+ "green and black": 2852,
+ "green and blue": 2085,
+ "green and brown": 1216,
+ "green and orange": 2953,
+ "green and red": 250,
+ "green and white": 2916,
+ "green and yellow": 1515,
+ "green beans": 1529,
+ "greyhound": 1589,
+ "grill": 301,
+ "grilled": 1934,
+ "grilled cheese": 1258,
+ "grind": 1103,
+ "grinding": 381,
+ "grizzly": 1009,
+ "grocery": 2655,
+ "grocery store": 1638,
+ "ground": 1045,
+ "guitar": 645,
+ "guitar hero": 778,
+ "gun": 241,
+ "gym": 1922,
+ "h": 2607,
+ "hair": 561,
+ "hair dryer": 2330,
+ "haircut": 1024,
+ "half": 1028,
+ "half full": 1673,
+ "halloween": 1127,
+ "hallway": 2674,
+ "ham": 26,
+ "ham and cheese": 430,
+ "hamburger": 1413,
+ "hammer time": 725,
+ "hammock": 556,
+ "hand": 233,
+ "handicap": 440,
+ "handle": 1700,
+ "handlebars": 1450,
+ "hands": 1871,
+ "hanger": 2951,
+ "hanging": 3,
+ "happiness": 3117,
+ "happy": 809,
+ "happy birthday": 1724,
+ "harbor": 894,
+ "hard": 2048,
+ "hardwood": 2722,
+ "harley": 2143,
+ "harley davidson": 2508,
+ "harness": 486,
+ "harry potter": 130,
+ "hat": 28,
+ "hats": 1361,
+ "hauling": 889,
+ "hawaii": 2189,
+ "hawaiian": 132,
+ "hawk": 1676,
+ "hay": 27,
+ "hazy": 1907,
+ "he isn't": 2446,
+ "he's not": 1949,
+ "head": 1400,
+ "headband": 1981,
+ "headphones": 1982,
+ "healthy": 2190,
+ "heart": 1772,
+ "hearts": 2972,
+ "heat": 1402,
+ "heater": 1068,
+ "heavy": 309,
+ "heels": 1055,
+ "heineken": 823,
+ "heinz": 1409,
+ "helicopter": 2217,
+ "hello kitty": 1822,
+ "helmet": 1434,
+ "helmets": 390,
+ "herd": 2350,
+ "herding": 595,
+ "herself": 1130,
+ "hexagon": 2694,
+ "hiding": 2539,
+ "high": 933,
+ "high chair": 1129,
+ "high heels": 2725,
+ "highway": 896,
+ "hiking": 1020,
+ "hill": 683,
+ "hills": 1006,
+ "hilly": 1007,
+ "himself": 1111,
+ "hispanic": 1749,
+ "hit": 3055,
+ "hit ball": 2980,
+ "hitting": 911,
+ "hitting ball": 1083,
+ "hockey": 844,
+ "holding": 2589,
+ "holding baby": 1793,
+ "holding it": 2290,
+ "holding phone": 1321,
+ "holding umbrella": 191,
+ "hollywood": 1921,
+ "home": 380,
+ "home plate": 984,
+ "homemade": 1308,
+ "honda": 1544,
+ "honey": 2754,
+ "hood": 1173,
+ "hoodie": 404,
+ "horizontal": 303,
+ "horizontally": 2307,
+ "horns": 543,
+ "horse": 315,
+ "horse racing": 2765,
+ "horseback riding": 242,
+ "horses": 672,
+ "hose": 2928,
+ "hospital": 2141,
+ "hot": 2357,
+ "hot dog": 158,
+ "hot dogs": 3023,
+ "hot sauce": 422,
+ "hotel": 2268,
+ "hotel room": 414,
+ "house": 2858,
+ "houses": 312,
+ "hp": 1154,
+ "hsbc": 269,
+ "htc": 2597,
+ "huge": 101,
+ "hugging": 2865,
+ "human": 1944,
+ "humans": 1883,
+ "hummingbird": 1604,
+ "hundreds": 1366,
+ "hungry": 2207,
+ "husky": 2027,
+ "hydrant": 898,
+ "i": 1145,
+ "i don't know": 351,
+ "ibm": 1478,
+ "ice": 1395,
+ "ice cream": 2200,
+ "icing": 1564,
+ "identification": 742,
+ "illinois": 3126,
+ "in": 1184,
+ "in air": 1728,
+ "in back": 1059,
+ "in background": 2880,
+ "in basket": 1304,
+ "in bowl": 1371,
+ "in box": 85,
+ "in cabbage town": 151,
+ "in car": 2632,
+ "in corner": 1744,
+ "in cup": 2294,
+ "in field": 2766,
+ "in front": 1945,
+ "in grass": 321,
+ "in hand": 2819,
+ "in her hand": 58,
+ "in his hand": 2702,
+ "in middle": 751,
+ "in motion": 1873,
+ "in sink": 3016,
+ "in sky": 769,
+ "in snow": 1342,
+ "in stands": 782,
+ "in street": 406,
+ "in suitcase": 2946,
+ "in vase": 994,
+ "in water": 2327,
+ "index": 925,
+ "india": 2547,
+ "indian": 2501,
+ "indians": 988,
+ "indoor": 2718,
+ "indoors": 879,
+ "information": 884,
+ "inside": 1557,
+ "intersection": 378,
+ "iphone": 2194,
+ "ipod": 2313,
+ "ireland": 1289,
+ "iris": 1710,
+ "iron": 2561,
+ "island": 1249,
+ "it isn't": 1496,
+ "it's not": 2355,
+ "it's raining": 1796,
+ "italian": 2119,
+ "italy": 1532,
+ "ivory": 2929,
+ "ivy": 1603,
+ "j": 1882,
+ "jacket": 441,
+ "jackets": 395,
+ "jal": 164,
+ "japan": 1732,
+ "japanese": 2743,
+ "jar": 162,
+ "jeans": 276,
+ "jeep": 2235,
+ "jelly": 2967,
+ "jesus": 941,
+ "jet": 1631,
+ "jet ski": 1859,
+ "jetblue": 2991,
+ "jets": 849,
+ "jockey": 1307,
+ "john": 213,
+ "jones": 2791,
+ "joshua": 393,
+ "jp morgan": 1847,
+ "juice": 329,
+ "jump": 346,
+ "jumped": 2424,
+ "jumping": 2142,
+ "jungle": 465,
+ "junk": 3128,
+ "k": 1524,
+ "kangaroo": 719,
+ "kawasaki": 2336,
+ "kayak": 1962,
+ "kayaking": 2651,
+ "kenmore": 1588,
+ "ketchup": 2407,
+ "ketchup and mustard": 541,
+ "kettle": 2734,
+ "keyboard": 1168,
+ "keys": 2869,
+ "khaki": 610,
+ "kia": 1941,
+ "kicking": 367,
+ "kickstand": 2716,
+ "kid": 1942,
+ "kids": 7,
+ "king": 690,
+ "kissing": 2484,
+ "kitchen": 226,
+ "kitchenaid": 1763,
+ "kite": 2912,
+ "kite flying": 288,
+ "kite string": 1958,
+ "kites": 2873,
+ "kitesurfing": 427,
+ "kiting": 617,
+ "kitten": 1762,
+ "kiwi": 2558,
+ "klm": 2452,
+ "knee pads": 916,
+ "kneeling": 3024,
+ "knife": 484,
+ "knife and fork": 2520,
+ "knives": 1220,
+ "kodak": 519,
+ "korean air": 1462,
+ "krispy kreme": 1238,
+ "l": 207,
+ "la": 1330,
+ "lab": 2548,
+ "labrador": 2496,
+ "lace": 3033,
+ "lacoste": 2907,
+ "ladder": 199,
+ "lady": 1065,
+ "ladybug": 2587,
+ "lake": 2923,
+ "lamb": 2102,
+ "lamp": 2104,
+ "lamps": 2179,
+ "land": 134,
+ "landing": 438,
+ "landscape": 2750,
+ "lanes": 2430,
+ "lanyard": 910,
+ "lap": 2549,
+ "laptop": 2973,
+ "laptops": 476,
+ "large": 1616,
+ "laughing": 2837,
+ "laundry": 1874,
+ "laying": 2448,
+ "laying down": 1179,
+ "lays": 811,
+ "leaf": 3120,
+ "leaning": 1647,
+ "learning": 2625,
+ "leash": 2054,
+ "leather": 2618,
+ "leaves": 575,
+ "leaving": 720,
+ "left": 2785,
+ "left 1": 2512,
+ "left and right": 758,
+ "left side": 1177,
+ "leg": 928,
+ "lego": 777,
+ "legos": 538,
+ "legs": 779,
+ "lemon": 1473,
+ "lemonade": 1000,
+ "lemons": 2034,
+ "leopard": 2870,
+ "letters": 184,
+ "lettuce": 407,
+ "lexus": 2288,
+ "lg": 1702,
+ "library": 379,
+ "license plate": 1329,
+ "licking": 2965,
+ "lid": 2660,
+ "life": 793,
+ "life jacket": 25,
+ "life vest": 2291,
+ "lifeguard": 1312,
+ "lift": 794,
+ "light": 2305,
+ "lighter": 3012,
+ "lighthouse": 2376,
+ "lighting": 675,
+ "lights": 2747,
+ "lilac": 2310,
+ "lilies": 2617,
+ "lily": 1695,
+ "lime": 2896,
+ "limes": 2794,
+ "lines": 2899,
+ "linoleum": 2019,
+ "lion": 2066,
+ "liquor": 1384,
+ "listening": 1797,
+ "listening to music": 138,
+ "little": 1985,
+ "little girl": 785,
+ "living": 2811,
+ "living room": 275,
+ "lizard": 985,
+ "loading": 1465,
+ "lobster": 1608,
+ "log": 1803,
+ "logitech": 938,
+ "logo": 1741,
+ "logs": 1740,
+ "london": 1963,
+ "long": 1218,
+ "long sleeve": 2426,
+ "long time": 622,
+ "looking": 1783,
+ "looking at camera": 565,
+ "looking at phone": 368,
+ "looking out window": 789,
+ "los angeles": 2109,
+ "lot": 1805,
+ "lotion": 418,
+ "lots": 20,
+ "love": 821,
+ "low": 1804,
+ "lufthansa": 133,
+ "luggage": 574,
+ "lunch": 459,
+ "lying down": 993,
+ "m": 1929,
+ "mac": 1967,
+ "macaroni": 3021,
+ "machine": 767,
+ "mack": 1835,
+ "magazine": 432,
+ "magazines": 1556,
+ "magnet": 1200,
+ "magnets": 2024,
+ "mailbox": 514,
+ "main": 2809,
+ "main st": 2467,
+ "main street": 802,
+ "makeup": 1960,
+ "male": 2456,
+ "males": 1274,
+ "mall": 2454,
+ "man": 1968,
+ "man in middle": 453,
+ "man made": 460,
+ "man on left": 780,
+ "man on right": 2758,
+ "man's": 2303,
+ "mane": 1599,
+ "mango": 52,
+ "mantle": 1014,
+ "many": 1598,
+ "map": 1965,
+ "maple": 1830,
+ "maple leaf": 3095,
+ "marble": 1266,
+ "marina": 2609,
+ "mariners": 930,
+ "mario": 412,
+ "marker": 3072,
+ "market": 2600,
+ "maroon": 756,
+ "married": 741,
+ "marshmallows": 1212,
+ "mask": 1613,
+ "mat": 1966,
+ "mattress": 1051,
+ "mayo": 2580,
+ "mayonnaise": 534,
+ "mcdonald's": 2292,
+ "me": 1367,
+ "meat": 1915,
+ "meatballs": 1503,
+ "medium": 1401,
+ "meeting": 2867,
+ "men": 392,
+ "men's": 639,
+ "menu": 787,
+ "meow": 2787,
+ "mercedes": 552,
+ "mercedes benz": 1374,
+ "messy": 2640,
+ "metal": 2960,
+ "meter": 1328,
+ "metro": 3081,
+ "mets": 1690,
+ "mexican": 892,
+ "mexico": 2781,
+ "miami": 1466,
+ "michigan": 2721,
+ "mickey mouse": 1818,
+ "microphone": 2715,
+ "microsoft": 1634,
+ "microwave": 2593,
+ "middle": 1265,
+ "middle 1": 2987,
+ "military": 765,
+ "milk": 2792,
+ "millions": 1421,
+ "minnie mouse": 1701,
+ "mint": 1926,
+ "mirror": 2076,
+ "mirrors": 49,
+ "mississippi": 1151,
+ "mitsubishi": 1125,
+ "mitt": 3080,
+ "mixer": 2020,
+ "model": 1436,
+ "modern": 1925,
+ "mohawk": 1605,
+ "mom": 2836,
+ "monday": 2733,
+ "money": 2017,
+ "monitor": 458,
+ "monkey": 601,
+ "monster": 1217,
+ "moon": 655,
+ "moped": 2439,
+ "more": 97,
+ "morning": 469,
+ "mosaic": 2530,
+ "moss": 2060,
+ "motel": 2148,
+ "mother": 2168,
+ "mother and child": 1259,
+ "motion": 3002,
+ "motocross": 2445,
+ "motor": 3084,
+ "motorbike": 746,
+ "motorcycle": 2514,
+ "motorcycles": 511,
+ "motorola": 332,
+ "mound": 2221,
+ "mountain": 2862,
+ "mountain dew": 1896,
+ "mountainous": 156,
+ "mountains": 1469,
+ "mouse": 1939,
+ "mouse pad": 1322,
+ "mouth": 16,
+ "mouthwash": 513,
+ "movement": 2847,
+ "movie": 2480,
+ "moving": 3070,
+ "mozzarella": 420,
+ "mt airy": 2708,
+ "mud": 592,
+ "muffin": 2552,
+ "muffins": 439,
+ "mug": 593,
+ "multi": 2116,
+ "multi colored": 72,
+ "multicolored": 2123,
+ "multiple": 3008,
+ "mural": 1632,
+ "museum": 2738,
+ "mushroom": 976,
+ "mushrooms": 1150,
+ "music": 10,
+ "mustache": 542,
+ "mustard": 1245,
+ "mutt": 144,
+ "n": 602,
+ "name": 749,
+ "name tag": 2986,
+ "napkin": 1225,
+ "napkins": 2304,
+ "nasa": 1476,
+ "nathan's": 1509,
+ "national express": 697,
+ "natural": 1574,
+ "nature": 21,
+ "navy": 1919,
+ "neck": 1969,
+ "necklace": 2306,
+ "neither": 1141,
+ "neon": 283,
+ "nest": 2225,
+ "net": 1164,
+ "never": 1165,
+ "new": 1163,
+ "new orleans": 774,
+ "new york": 2712,
+ "news": 596,
+ "newspaper": 67,
+ "next to toilet": 939,
+ "night": 236,
+ "night time": 59,
+ "nightstand": 2287,
+ "nighttime": 2768,
+ "nike": 603,
+ "nikon": 1794,
+ "nintendo": 1158,
+ "nissan": 2231,
+ "no": 1403,
+ "no 1": 2935,
+ "no cat": 413,
+ "no clock": 2816,
+ "no dog": 857,
+ "no flag": 2275,
+ "no grass": 3071,
+ "no hat": 2573,
+ "no left turn": 1176,
+ "no light": 2191,
+ "no man": 335,
+ "no number": 1334,
+ "no parking": 886,
+ "no plate": 1233,
+ "no shirt": 1890,
+ "no sign": 1112,
+ "no smoking": 820,
+ "no train": 2908,
+ "no water": 1888,
+ "nobody": 550,
+ "nokia": 1870,
+ "noodles": 2162,
+ "noon": 2435,
+ "normal": 2817,
+ "north": 383,
+ "north america": 2962,
+ "north face": 955,
+ "nose": 1242,
+ "not": 261,
+ "not at all": 294,
+ "not here": 2666,
+ "not high": 468,
+ "not in service": 2281,
+ "not likely": 2110,
+ "not long": 2227,
+ "not possible": 949,
+ "not sure": 1553,
+ "not there": 835,
+ "not very": 885,
+ "notebook": 937,
+ "notes": 3078,
+ "nothing": 2274,
+ "now": 262,
+ "nowhere": 2494,
+ "numbers": 495,
+ "nursing": 629,
+ "nuts": 198,
+ "ny": 1404,
+ "o": 2389,
+ "oak": 2132,
+ "oar": 2136,
+ "oars": 1481,
+ "obama": 902,
+ "ocean": 604,
+ "octagon": 3113,
+ "octopus": 1755,
+ "off": 175,
+ "office": 2551,
+ "oil": 2013,
+ "old": 2388,
+ "older": 1846,
+ "olives": 2626,
+ "ollie": 815,
+ "olympics": 2779,
+ "omelet": 291,
+ "on": 2507,
+ "on beach": 1885,
+ "on bed": 728,
+ "on bench": 1745,
+ "on bike": 2566,
+ "on boat": 2035,
+ "on building": 2689,
+ "on bus": 2724,
+ "on car": 341,
+ "on chair": 212,
+ "on couch": 2574,
+ "on counter": 2203,
+ "on desk": 2567,
+ "on dresser": 766,
+ "on elephant": 1156,
+ "on floor": 657,
+ "on fridge": 2630,
+ "on grass": 215,
+ "on ground": 2922,
+ "on his face": 743,
+ "on his head": 2992,
+ "on horse": 1096,
+ "on laptop": 2537,
+ "on left": 2730,
+ "on man": 2983,
+ "on motorcycle": 1494,
+ "on napkin": 2047,
+ "on phone": 9,
+ "on pizza": 2676,
+ "on plane": 1872,
+ "on plate": 2396,
+ "on pole": 1536,
+ "on rack": 1425,
+ "on right": 17,
+ "on road": 489,
+ "on rock": 1288,
+ "on runway": 1492,
+ "on shelf": 2737,
+ "on shore": 1642,
+ "on sidewalk": 348,
+ "on sign": 2390,
+ "on sink": 1339,
+ "on skateboard": 1435,
+ "on stove": 2476,
+ "on street": 3112,
+ "on suitcase": 2619,
+ "on table": 1309,
+ "on toilet": 1522,
+ "on top": 1937,
+ "on tower": 91,
+ "on track": 317,
+ "on tracks": 2402,
+ "on train": 2749,
+ "on tray": 992,
+ "on tree": 2510,
+ "on wall": 1408,
+ "on water": 488,
+ "on woman": 352,
+ "onion": 966,
+ "onion rings": 228,
+ "onions": 3091,
+ "only": 1790,
+ "opaque": 510,
+ "open": 1581,
+ "opponent": 698,
+ "orange": 1491,
+ "orange and black": 859,
+ "orange and blue": 1182,
+ "orange and white": 2637,
+ "orange and yellow": 540,
+ "orange juice": 856,
+ "oranges": 2308,
+ "orchid": 2582,
+ "oregon": 2403,
+ "organic": 731,
+ "oriental": 1717,
+ "orioles": 3067,
+ "ostrich": 840,
+ "ottoman": 363,
+ "out": 729,
+ "out of focus": 1505,
+ "outdoor": 480,
+ "outdoors": 2271,
+ "outfield": 2843,
+ "outside": 2210,
+ "oval": 1325,
+ "oven": 2005,
+ "over": 2949,
+ "over easy": 1950,
+ "overalls": 959,
+ "overcast": 2531,
+ "owl": 1518,
+ "owner": 942,
+ "p": 1018,
+ "pacific": 1437,
+ "pacifier": 474,
+ "packing": 539,
+ "paddle": 2087,
+ "paddle boarding": 1806,
+ "paddling": 2477,
+ "paint": 1277,
+ "painted": 1507,
+ "painting": 1697,
+ "paisley": 3063,
+ "pajamas": 2470,
+ "palm": 1656,
+ "palm tree": 1590,
+ "palm trees": 2812,
+ "pan": 2828,
+ "pancake": 347,
+ "pancakes": 2748,
+ "panda": 190,
+ "pans": 890,
+ "pants": 3107,
+ "paper": 103,
+ "paper towels": 2814,
+ "papers": 619,
+ "parachute": 50,
+ "parade": 2680,
+ "parakeet": 2497,
+ "parasailing": 3097,
+ "pare": 2055,
+ "paris": 2938,
+ "park": 2056,
+ "parked": 1139,
+ "parking": 3013,
+ "parking garage": 880,
+ "parking lot": 2608,
+ "parking meter": 714,
+ "parking meters": 1703,
+ "parmesan": 1439,
+ "parmesan cheese": 1782,
+ "parrot": 2941,
+ "parrots": 724,
+ "parsley": 419,
+ "partly cloudy": 2707,
+ "party": 373,
+ "passenger": 40,
+ "passengers": 1567,
+ "pasta": 752,
+ "pastries": 1894,
+ "pastry": 464,
+ "pasture": 2886,
+ "patio": 2460,
+ "patterned": 696,
+ "paved": 2153,
+ "pavement": 804,
+ "paw": 1270,
+ "pc": 2197,
+ "peace": 713,
+ "peach": 712,
+ "peaches": 1592,
+ "peacock": 813,
+ "peanut butter": 651,
+ "peanuts": 2649,
+ "pear": 1808,
+ "pearl": 1617,
+ "peas": 1809,
+ "pedestal": 1611,
+ "pedestrian": 1633,
+ "pedestrian crossing": 1841,
+ "pedestrians": 1664,
+ "pee": 1303,
+ "peeing": 1825,
+ "pelican": 3003,
+ "pelicans": 78,
+ "pen": 1301,
+ "pencil": 139,
+ "penguin": 2298,
+ "penne": 2740,
+ "pens": 1273,
+ "people": 806,
+ "pepper": 2120,
+ "pepperoni": 2815,
+ "peppers": 518,
+ "pepsi": 2069,
+ "persian": 2998,
+ "person": 781,
+ "petting": 2177,
+ "petting horse": 1568,
+ "philadelphia": 2441,
+ "phillies": 2799,
+ "phone": 707,
+ "phones": 2544,
+ "photo": 1750,
+ "photograph": 1131,
+ "photographer": 2579,
+ "photography": 2913,
+ "photoshop": 1789,
+ "piano": 2320,
+ "pickle": 628,
+ "pickles": 1609,
+ "pickup": 1641,
+ "picnic": 2413,
+ "picnic table": 1813,
+ "picture": 620,
+ "pictures": 325,
+ "pie": 2932,
+ "pier": 179,
+ "pig": 2933,
+ "pigeon": 1276,
+ "pigeons": 1464,
+ "pigtails": 1052,
+ "pillow": 249,
+ "pillows": 662,
+ "pilot": 648,
+ "pine": 1207,
+ "pineapple": 2155,
+ "ping pong": 706,
+ "pink": 1204,
+ "pink and black": 2003,
+ "pink and blue": 536,
+ "pink and white": 1559,
+ "pink and yellow": 2542,
+ "pipe": 739,
+ "pipes": 2086,
+ "pirate": 790,
+ "pirates": 3047,
+ "pitbull": 1058,
+ "pitch": 1971,
+ "pitcher": 290,
+ "pitching": 881,
+ "pizza": 1726,
+ "pizza box": 452,
+ "pizza cutter": 1575,
+ "pizza hut": 343,
+ "placemat": 2404,
+ "plaid": 2919,
+ "plain": 2920,
+ "plane": 2459,
+ "planes": 531,
+ "plant": 2458,
+ "planter": 2598,
+ "plants": 2286,
+ "plaster": 1373,
+ "plastic": 3004,
+ "plastic wrap": 2358,
+ "plate": 19,
+ "plates": 1002,
+ "platform": 633,
+ "play": 904,
+ "play tennis": 1283,
+ "player": 2377,
+ "players": 2968,
+ "playing": 2037,
+ "playing baseball": 279,
+ "playing frisbee": 1124,
+ "playing game": 224,
+ "playing soccer": 2178,
+ "playing tennis": 1022,
+ "playing video game": 708,
+ "playing video games": 2911,
+ "playing wii": 2599,
+ "playstation": 1178,
+ "plow": 193,
+ "plunger": 1528,
+ "pm": 1461,
+ "pocket": 141,
+ "pockets": 485,
+ "pointing": 1075,
+ "polar": 1073,
+ "polar bear": 1928,
+ "polar bears": 3123,
+ "pole": 1429,
+ "poles": 2692,
+ "police": 457,
+ "police officer": 163,
+ "polka dot": 830,
+ "polka dots": 2239,
+ "polo": 1430,
+ "pomeranian": 181,
+ "pond": 2252,
+ "pony": 2251,
+ "ponytail": 186,
+ "poodle": 2451,
+ "pool": 297,
+ "poop": 296,
+ "pooping": 996,
+ "poor": 295,
+ "porcelain": 897,
+ "porch": 3085,
+ "pork": 625,
+ "posing": 2604,
+ "post": 1754,
+ "poster": 1660,
+ "posts": 623,
+ "pot": 2212,
+ "potato": 1951,
+ "potato salad": 544,
+ "potatoes": 2146,
+ "pots": 1337,
+ "pottery": 1475,
+ "powdered": 3099,
+ "powdered sugar": 1688,
+ "power": 2437,
+ "power lines": 2049,
+ "practice": 3094,
+ "prince": 705,
+ "print": 2051,
+ "printer": 61,
+ "privacy": 2710,
+ "private": 2386,
+ "produce": 253,
+ "professional": 2615,
+ "prom": 3073,
+ "propeller": 377,
+ "protection": 1181,
+ "protest": 2979,
+ "public": 2029,
+ "public market center": 582,
+ "pug": 1088,
+ "pull": 79,
+ "puma": 1229,
+ "pumpkin": 1572,
+ "puppy": 84,
+ "purple": 1013,
+ "purple and white": 2183,
+ "purse": 1601,
+ "qantas": 663,
+ "qatar": 1105,
+ "queen": 2961,
+ "quilt": 2742,
+ "r": 1422,
+ "rabbit": 3086,
+ "race": 1667,
+ "racing": 2247,
+ "rack": 1668,
+ "racket": 554,
+ "rackets": 1484,
+ "racquet": 2440,
+ "radiator": 424,
+ "radio": 2156,
+ "radish": 2401,
+ "raft": 2033,
+ "rail": 1003,
+ "railing": 2343,
+ "railroad crossing": 2832,
+ "rain": 1004,
+ "rainbow": 711,
+ "raining": 1523,
+ "rainy": 2299,
+ "ram": 2958,
+ "ramp": 2526,
+ "ranch": 2226,
+ "raspberries": 2693,
+ "raspberry": 2683,
+ "raw": 2959,
+ "rays": 1205,
+ "reading": 1231,
+ "real": 1064,
+ "rear": 1066,
+ "recently": 1459,
+ "recessed": 2714,
+ "recliner": 786,
+ "rectangle": 221,
+ "rectangles": 3041,
+ "red": 1333,
+ "red and black": 2061,
+ "red and blue": 2805,
+ "red and gray": 1625,
+ "red and green": 2453,
+ "red and silver": 1062,
+ "red and white": 2241,
+ "red and yellow": 1047,
+ "red bull": 298,
+ "red light": 1674,
+ "red sox": 1197,
+ "red velvet": 2338,
+ "red white and blue": 2234,
+ "red white blue": 2075,
+ "reds": 1482,
+ "referee": 2285,
+ "reflection": 1144,
+ "refrigerator": 2864,
+ "refrigerators": 903,
+ "regular": 1927,
+ "reins": 2246,
+ "relaxing": 2575,
+ "relish": 1545,
+ "remodeling": 2262,
+ "remote": 1255,
+ "remote control": 1166,
+ "remotes": 1046,
+ "residential": 964,
+ "restaurant": 515,
+ "resting": 1645,
+ "ribbon": 2846,
+ "rice": 18,
+ "ride": 2699,
+ "riding": 166,
+ "riding bike": 2635,
+ "riding bikes": 442,
+ "riding elephant": 376,
+ "riding horse": 1324,
+ "riding horses": 1525,
+ "riding motorcycle": 477,
+ "right": 2387,
+ "right 1": 1122,
+ "right hand": 2465,
+ "right side": 109,
+ "ring": 266,
+ "ring finger": 1628,
+ "ripe": 954,
+ "river": 2479,
+ "road": 2838,
+ "roast beef": 801,
+ "robe": 845,
+ "robin": 2485,
+ "robot": 142,
+ "rock": 1975,
+ "rocks": 1738,
+ "rocky": 1737,
+ "rodeo": 2736,
+ "rolex": 2152,
+ "roll": 43,
+ "roman": 2282,
+ "roman numerals": 169,
+ "roof": 399,
+ "room": 398,
+ "rooster": 747,
+ "rope": 1842,
+ "rose": 2228,
+ "roses": 661,
+ "rottweiler": 891,
+ "rough": 2523,
+ "round": 445,
+ "roundabout": 1327,
+ "rowing": 2964,
+ "rubber": 2532,
+ "rug": 1108,
+ "rugby": 1234,
+ "run": 1107,
+ "running": 2831,
+ "runway": 1704,
+ "rural": 978,
+ "russia": 1586,
+ "russian": 1113,
+ "rust": 81,
+ "rv": 1534,
+ "rye": 2854,
+ "s": 63,
+ "sad": 2414,
+ "saddle": 1517,
+ "safari": 1973,
+ "safe": 206,
+ "safety": 310,
+ "sail": 2776,
+ "sailboat": 631,
+ "sailboats": 239,
+ "sailing": 1993,
+ "salad": 2698,
+ "salmon": 2059,
+ "salon": 1730,
+ "salt": 2417,
+ "salt and pepper": 2371,
+ "samsung": 389,
+ "san diego": 410,
+ "san francisco": 2695,
+ "sand": 89,
+ "sandals": 1294,
+ "sandwich": 3045,
+ "sandwiches": 3053,
+ "santa": 921,
+ "santa hat": 2462,
+ "sas": 2415,
+ "sauce": 106,
+ "sauerkraut": 1670,
+ "sausage": 1861,
+ "savannah": 2731,
+ "savory": 1734,
+ "scale": 2878,
+ "scania": 137,
+ "scarf": 2519,
+ "scenery": 2502,
+ "schnauzer": 587,
+ "school": 571,
+ "school bus": 155,
+ "scissors": 2957,
+ "scooter": 1837,
+ "scrambled": 2717,
+ "scratching": 1452,
+ "screen": 1597,
+ "seafood": 3009,
+ "seagull": 100,
+ "seagulls": 2830,
+ "seat": 470,
+ "seattle": 2783,
+ "seaweed": 3100,
+ "second": 2348,
+ "security": 1010,
+ "sedan": 2108,
+ "seeds": 969,
+ "selfie": 434,
+ "selling": 1832,
+ "semi": 2073,
+ "sepia": 710,
+ "serious": 2978,
+ "serve": 1376,
+ "serving": 256,
+ "sesame": 915,
+ "sesame seeds": 1665,
+ "setting": 618,
+ "several": 1390,
+ "sewing": 1877,
+ "shade": 2256,
+ "shadow": 31,
+ "shadows": 2145,
+ "shaking hands": 562,
+ "shallow": 1497,
+ "shampoo": 1338,
+ "shape": 522,
+ "shark": 1411,
+ "shaved": 2777,
+ "shearing": 1356,
+ "shed": 2732,
+ "sheep": 1034,
+ "sheepdog": 2373,
+ "sheet": 1035,
+ "sheets": 467,
+ "shelf": 2316,
+ "shell": 2315,
+ "shells": 2021,
+ "shelter": 1350,
+ "shelves": 2363,
+ "shepherd": 2278,
+ "shih tzu": 3022,
+ "shingles": 2018,
+ "ship": 1195,
+ "shirt": 702,
+ "shirt and tie": 1224,
+ "shirts": 48,
+ "shoe": 2001,
+ "shoes": 456,
+ "shop": 1999,
+ "shopping": 2825,
+ "shopping cart": 3092,
+ "shore": 677,
+ "short": 676,
+ "shorter": 2488,
+ "shorts": 1693,
+ "shoulder": 1948,
+ "show": 2000,
+ "shower": 1540,
+ "shower curtain": 2700,
+ "shower head": 2418,
+ "shrimp": 2236,
+ "shut": 2518,
+ "siamese": 3042,
+ "siblings": 3034,
+ "side": 1916,
+ "side of road": 2761,
+ "sidecar": 2910,
+ "sidewalk": 2596,
+ "sideways": 1978,
+ "sign": 1566,
+ "signs": 104,
+ "silk": 2065,
+ "silver": 775,
+ "silver and black": 1788,
+ "silver and red": 320,
+ "silverware": 240,
+ "singapore": 69,
+ "singing": 2696,
+ "single": 2084,
+ "single engine": 1101,
+ "singles": 116,
+ "sink": 2894,
+ "sitting": 490,
+ "size": 1033,
+ "skate": 1560,
+ "skate park": 88,
+ "skateboard": 547,
+ "skateboarder": 431,
+ "skateboarding": 170,
+ "skateboards": 1652,
+ "skatepark": 1711,
+ "skating": 2125,
+ "skeleton": 1812,
+ "ski": 3119,
+ "ski boots": 2082,
+ "ski lift": 2576,
+ "ski pole": 1008,
+ "ski poles": 2806,
+ "ski resort": 2917,
+ "ski slope": 192,
+ "skier": 858,
+ "skiers": 278,
+ "skiing": 1561,
+ "skirt": 1866,
+ "skis": 1198,
+ "skull": 2686,
+ "skull and crossbones": 225,
+ "sky": 3118,
+ "skyscraper": 2622,
+ "skyscrapers": 693,
+ "slacks": 260,
+ "sled": 209,
+ "sleep": 2936,
+ "sleeping": 478,
+ "sleeve": 906,
+ "sliced": 394,
+ "slide": 360,
+ "sliding": 995,
+ "slippers": 2223,
+ "slope": 2395,
+ "slow": 2419,
+ "slow down": 243,
+ "small": 583,
+ "smaller": 2302,
+ "smartphone": 2647,
+ "smile": 2447,
+ "smiley face": 1069,
+ "smiling": 105,
+ "smoke": 987,
+ "smoking": 370,
+ "smooth": 973,
+ "smoothie": 1213,
+ "snake": 145,
+ "sneakers": 1302,
+ "sniffing": 1689,
+ "snow": 2154,
+ "snowboard": 1021,
+ "snowboarder": 122,
+ "snowboarding": 684,
+ "snowboards": 345,
+ "snowflakes": 1160,
+ "snowing": 2344,
+ "snowsuit": 2423,
+ "snowy": 2584,
+ "soap": 946,
+ "soccer": 680,
+ "soccer ball": 1391,
+ "soccer field": 1248,
+ "socks": 563,
+ "soda": 584,
+ "sofa": 2924,
+ "soft": 2925,
+ "softball": 2255,
+ "soldier": 1080,
+ "soldiers": 2719,
+ "solid": 2868,
+ "someone": 2857,
+ "sony": 3037,
+ "sony ericsson": 2753,
+ "soon": 1823,
+ "soup": 2803,
+ "south": 1729,
+ "southwest": 1760,
+ "space": 1032,
+ "space needle": 1019,
+ "space shuttle": 757,
+ "spaghetti": 1669,
+ "spanish": 2412,
+ "sparrow": 588,
+ "spatula": 143,
+ "speaker": 372,
+ "speakers": 1997,
+ "spectators": 1117,
+ "speed limit": 1554,
+ "spices": 3082,
+ "spider": 2361,
+ "spiderman": 1432,
+ "spinach": 2763,
+ "spiral": 753,
+ "spoon": 2301,
+ "spoons": 3015,
+ "sports": 709,
+ "spots": 2541,
+ "spotted": 1881,
+ "spray paint": 2704,
+ "spring": 1655,
+ "sprinkles": 1136,
+ "sprint": 1658,
+ "sprite": 2164,
+ "square": 1577,
+ "squares": 1579,
+ "squash": 475,
+ "squatting": 2900,
+ "squirrel": 338,
+ "st patrick's day": 1486,
+ "stability": 1211,
+ "stadium": 1550,
+ "stagecoach": 76,
+ "stained glass": 1345,
+ "stainless steel": 919,
+ "stairs": 2468,
+ "stand": 2237,
+ "standing": 931,
+ "standing still": 1594,
+ "stands": 2982,
+ "star": 387,
+ "star alliance": 3114,
+ "star wars": 2943,
+ "starbucks": 308,
+ "staring": 171,
+ "stars": 289,
+ "state farm": 1777,
+ "station": 316,
+ "statue": 650,
+ "statues": 557,
+ "steak": 2570,
+ "steam": 2571,
+ "steamed": 73,
+ "steel": 943,
+ "steeple": 2595,
+ "steering wheel": 1278,
+ "steps": 805,
+ "stew": 1850,
+ "stick": 2592,
+ "sticker": 2577,
+ "stickers": 2629,
+ "sticks": 1193,
+ "still": 257,
+ "stir fry": 265,
+ "stomach": 154,
+ "stone": 2438,
+ "stones": 1457,
+ "stool": 1260,
+ "stop": 935,
+ "stop light": 3014,
+ "stop sign": 1519,
+ "stopped": 1826,
+ "stopping": 2166,
+ "storage": 1072,
+ "store": 688,
+ "stork": 686,
+ "storm": 687,
+ "stove": 2318,
+ "straight": 1646,
+ "straight ahead": 2139,
+ "strap": 426,
+ "straw": 2140,
+ "strawberries": 384,
+ "strawberry": 1250,
+ "street": 1364,
+ "street light": 2117,
+ "street name": 1722,
+ "street sign": 178,
+ "stretching": 2849,
+ "strike": 1526,
+ "string": 1199,
+ "stripe": 521,
+ "striped": 2915,
+ "stripes": 1775,
+ "stroller": 1314,
+ "stucco": 744,
+ "student": 2331,
+ "students": 1254,
+ "stuffed": 1583,
+ "stuffed animal": 727,
+ "stuffed animals": 2449,
+ "style": 2257,
+ "styrofoam": 167,
+ "sub": 667,
+ "subway": 816,
+ "sugar": 2505,
+ "suit": 1659,
+ "suitcase": 1251,
+ "suitcases": 62,
+ "suits": 1857,
+ "summer": 2433,
+ "sun": 668,
+ "sun hat": 451,
+ "sunbathing": 822,
+ "sunflower": 1187,
+ "sunflowers": 1500,
+ "sunglasses": 1383,
+ "sunlight": 615,
+ "sunny": 119,
+ "sunrise": 2999,
+ "sunset": 1043,
+ "supreme": 2931,
+ "surf": 641,
+ "surfboard": 689,
+ "surfboards": 2425,
+ "surfer": 1261,
+ "surfers": 2293,
+ "surfing": 51,
+ "surprise": 1171,
+ "surprised": 2493,
+ "sushi": 2782,
+ "suspenders": 3066,
+ "suv": 669,
+ "suzuki": 1152,
+ "swan": 2351,
+ "swans": 2996,
+ "sweat": 2339,
+ "sweatband": 3122,
+ "sweater": 194,
+ "sweatshirt": 2905,
+ "sweet": 701,
+ "sweet potato": 2861,
+ "swim": 285,
+ "swim trunks": 1449,
+ "swimming": 183,
+ "swimsuit": 893,
+ "swing": 2204,
+ "swinging": 1887,
+ "swinging bat": 2450,
+ "swirls": 2244,
+ "swiss": 2072,
+ "switzerland": 1098,
+ "sydney": 1650,
+ "syrup": 3050,
+ "t": 1798,
+ "t shirt": 222,
+ "t shirt and jeans": 599,
+ "tabby": 2478,
+ "table": 3026,
+ "tablecloth": 454,
+ "tables": 2289,
+ "tablet": 1180,
+ "tag": 3088,
+ "tags": 2248,
+ "tail": 1615,
+ "take off": 865,
+ "taking off": 1639,
+ "taking photo": 1415,
+ "taking picture": 923,
+ "taking pictures": 358,
+ "taking selfie": 182,
+ "talking": 1382,
+ "talking on phone": 307,
+ "tall": 1970,
+ "taller": 1147,
+ "tam": 3089,
+ "tan": 3090,
+ "tank": 1183,
+ "tank top": 1143,
+ "tape": 165,
+ "target": 2560,
+ "tarmac": 2277,
+ "tarp": 2498,
+ "tater tots": 2521,
+ "tattoo": 174,
+ "tattoos": 2848,
+ "taxi": 282,
+ "tea": 1443,
+ "teacher": 246,
+ "teal": 817,
+ "team": 818,
+ "teddy": 853,
+ "teddy bear": 160,
+ "teddy bears": 606,
+ "teeth": 1952,
+ "telephone": 3018,
+ "television": 1787,
+ "tell time": 1891,
+ "telling time": 2735,
+ "tennis": 436,
+ "tennis ball": 2261,
+ "tennis court": 530,
+ "tennis player": 1226,
+ "tennis racket": 733,
+ "tennis rackets": 2267,
+ "tennis racquet": 2616,
+ "tennis shoes": 82,
+ "tent": 366,
+ "tents": 1691,
+ "terrier": 2106,
+ "texas": 1214,
+ "texting": 2032,
+ "thai": 2612,
+ "thailand": 77,
+ "thanksgiving": 159,
+ "theater": 110,
+ "they aren't": 1385,
+ "thick": 1742,
+ "thin": 2511,
+ "thomas": 1282,
+ "thoroughbred": 2258,
+ "thousands": 3102,
+ "throw": 1801,
+ "throw ball": 1612,
+ "throw frisbee": 1285,
+ "throwing": 2669,
+ "throwing frisbee": 23,
+ "thumb": 2406,
+ "thumbs up": 2590,
+ "tiara": 258,
+ "tie": 2976,
+ "tie dye": 1012,
+ "ties": 2513,
+ "tiger": 2220,
+ "tigers": 810,
+ "tile": 1208,
+ "tiled": 1933,
+ "tiles": 1932,
+ "tim hortons": 2107,
+ "time": 2394,
+ "tinkerbell": 2788,
+ "tire": 1879,
+ "tired": 2345,
+ "tires": 2347,
+ "tissue": 230,
+ "tissues": 1899,
+ "to catch ball": 2319,
+ "to catch frisbee": 1206,
+ "to dry": 555,
+ "to eat": 1854,
+ "to get to other side": 29,
+ "to hit ball": 1290,
+ "to left": 576,
+ "to right": 1600,
+ "to see": 965,
+ "toast": 2565,
+ "toasted": 2379,
+ "toaster": 2378,
+ "toaster oven": 353,
+ "toilet": 2527,
+ "toilet brush": 1241,
+ "toilet paper": 1778,
+ "toiletries": 498,
+ "toilets": 2334,
+ "tokyo": 2802,
+ "tomato": 1677,
+ "tomatoes": 2329,
+ "tongs": 323,
+ "tongue": 1893,
+ "tools": 2506,
+ "toothbrush": 2966,
+ "toothbrushes": 371,
+ "toothpaste": 854,
+ "toothpick": 1016,
+ "toothpicks": 612,
+ "top": 501,
+ "top hat": 1644,
+ "top left": 259,
+ "top right": 2656,
+ "toronto": 2559,
+ "toshiba": 2902,
+ "tour": 473,
+ "tourist": 2144,
+ "tow": 2150,
+ "tow truck": 2745,
+ "toward": 319,
+ "towards": 336,
+ "towel": 652,
+ "towels": 1386,
+ "tower": 653,
+ "towing": 616,
+ "town": 1264,
+ "toy": 2149,
+ "toyota": 2678,
+ "toys": 1819,
+ "track": 2818,
+ "tracks": 299,
+ "tractor": 1221,
+ "traffic": 74,
+ "traffic light": 3109,
+ "traffic lights": 487,
+ "trailer": 1085,
+ "train": 2100,
+ "train car": 803,
+ "train station": 1474,
+ "train tracks": 997,
+ "trains": 2058,
+ "transport": 967,
+ "transportation": 1201,
+ "trash": 3032,
+ "trash can": 2,
+ "travel": 11,
+ "traveling": 1281,
+ "tray": 3096,
+ "tree": 1539,
+ "tree branch": 211,
+ "trees": 1095,
+ "triangle": 699,
+ "triangles": 42,
+ "trick": 1795,
+ "tripod": 2842,
+ "triumph": 1718,
+ "trolley": 1362,
+ "tropical": 277,
+ "tropicana": 1215,
+ "truck": 2405,
+ "trucks": 365,
+ "trunk": 2645,
+ "trunks": 2199,
+ "tub": 1232,
+ "tube": 862,
+ "tugboat": 2591,
+ "tulip": 12,
+ "tulips": 2202,
+ "tuna": 2380,
+ "tunnel": 2897,
+ "turkey": 646,
+ "turn": 638,
+ "turn right": 208,
+ "turning": 2762,
+ "turtle": 2409,
+ "tusks": 2611,
+ "tuxedo": 626,
+ "tv": 1614,
+ "tv stand": 1546,
+ "twin": 852,
+ "twins": 926,
+ "tying tie": 861,
+ "typing": 842,
+ "uk": 1663,
+ "umbrella": 573,
+ "umbrellas": 734,
+ "umpire": 2588,
+ "unclear": 745,
+ "under": 396,
+ "under armour": 2963,
+ "under sink": 1573,
+ "under table": 1918,
+ "under tree": 1931,
+ "uniform": 1766,
+ "uniforms": 1720,
+ "union station": 2670,
+ "united": 1488,
+ "united states": 2238,
+ "unknown": 735,
+ "unsure": 3059,
+ "up": 1661,
+ "uphill": 251,
+ "upright": 3076,
+ "ups": 1161,
+ "upside down": 1336,
+ "urban": 503,
+ "urinal": 685,
+ "urinals": 3044,
+ "us": 1662,
+ "us air force": 2242,
+ "us airways": 302,
+ "us airways express": 2540,
+ "us open": 2808,
+ "usa": 1483,
+ "used": 1102,
+ "using computer": 1335,
+ "using laptop": 877,
+ "utensils": 1900,
+ "v": 2250,
+ "vacation": 855,
+ "vaio": 791,
+ "valentine's day": 147,
+ "van": 2341,
+ "vanilla": 3110,
+ "vans": 2070,
+ "vase": 1904,
+ "vases": 254,
+ "vegetable": 2784,
+ "vegetables": 2122,
+ "vegetarian": 1816,
+ "veggie": 2365,
+ "veggies": 1723,
+ "vehicles": 2888,
+ "venice": 814,
+ "vent": 2918,
+ "verizon": 3030,
+ "vertical": 1596,
+ "very": 1076,
+ "very big": 517,
+ "very deep": 2664,
+ "very fast": 2752,
+ "very high": 716,
+ "very long": 2295,
+ "very old": 1291,
+ "very tall": 108,
+ "vest": 2224,
+ "vests": 333,
+ "victoria": 784,
+ "victorian": 1219,
+ "video": 136,
+ "video game": 2097,
+ "vines": 2639,
+ "virgin": 2182,
+ "virgin atlantic": 3105,
+ "visibility": 350,
+ "visilab": 115,
+ "visor": 1137,
+ "volkswagen": 1800,
+ "volleyball": 1627,
+ "volvo": 974,
+ "w": 899,
+ "waffle": 2147,
+ "wagon": 2198,
+ "waiting": 3079,
+ "wakeboard": 391,
+ "walgreens": 1731,
+ "walk": 2326,
+ "walking": 1954,
+ "wall": 2325,
+ "wall st": 2524,
+ "wallet": 1203,
+ "wallpaper": 936,
+ "war": 1757,
+ "warm": 1912,
+ "warmth": 1746,
+ "warning": 1472,
+ "washing": 491,
+ "washington": 1895,
+ "washington dc": 2654,
+ "washington monument": 2971,
+ "watch": 2159,
+ "watch tv": 2266,
+ "watching": 2321,
+ "watching tv": 161,
+ "water": 2984,
+ "water bottle": 3046,
+ "water ski": 189,
+ "water skiing": 1576,
+ "water skis": 1300,
+ "watermark": 1875,
+ "watermelon": 416,
+ "wave": 344,
+ "waves": 1626,
+ "waving": 86,
+ "wavy": 2036,
+ "wax": 1756,
+ "wax paper": 2222,
+ "weather vane": 3049,
+ "website": 1938,
+ "wedding": 590,
+ "weeds": 107,
+ "welcome": 1759,
+ "west": 66,
+ "western": 1377,
+ "westin": 281,
+ "westjet": 479,
+ "wet": 177,
+ "wetsuit": 1936,
+ "wetsuits": 1489,
+ "whale": 2332,
+ "wheat": 1799,
+ "wheel": 232,
+ "wheelchair": 826,
+ "wheelie": 2422,
+ "wheels": 2624,
+ "whipped cream": 2393,
+ "whirlpool": 2997,
+ "white": 3006,
+ "white and black": 2697,
+ "white and blue": 205,
+ "white and brown": 914,
+ "white and gray": 1086,
+ "white and green": 1223,
+ "white and orange": 1053,
+ "white and pink": 2064,
+ "white and red": 2489,
+ "white and yellow": 1190,
+ "white house": 1252,
+ "whole": 909,
+ "wicker": 1570,
+ "wide": 3007,
+ "wii": 1863,
+ "wii controller": 1814,
+ "wii controllers": 607,
+ "wii remote": 643,
+ "wii remotes": 482,
+ "wiimote": 2990,
+ "wild": 3111,
+ "wildebeest": 1765,
+ "willow": 1780,
+ "wilson": 694,
+ "wind": 771,
+ "windmill": 520,
+ "window": 1027,
+ "window sill": 1671,
+ "windows": 3054,
+ "windowsill": 135,
+ "windsor": 271,
+ "windsurfing": 2906,
+ "windy": 715,
+ "wine": 772,
+ "wine bottle": 1306,
+ "wine glass": 2687,
+ "wine glasses": 2053,
+ "wine tasting": 65,
+ "wing": 770,
+ "wings": 1947,
+ "winnie pooh": 1705,
+ "winter": 824,
+ "wire": 2525,
+ "wireless": 2583,
+ "wires": 68,
+ "wisconsin": 1454,
+ "woman": 1441,
+ "woman's": 2466,
+ "women": 3087,
+ "women's": 983,
+ "wood": 3010,
+ "wooden": 4,
+ "woodpecker": 2945,
+ "woods": 1,
+ "wool": 3011,
+ "words": 3103,
+ "work": 2546,
+ "working": 340,
+ "worms": 2028,
+ "wreath": 981,
+ "wrist": 726,
+ "wristband": 2434,
+ "writing": 2950,
+ "x": 2668,
+ "xbox": 2581,
+ "y": 1542,
+ "yacht": 2184,
+ "yamaha": 234,
+ "yankees": 2677,
+ "yard": 546,
+ "yarn": 548,
+ "years": 53,
+ "yellow": 759,
+ "yellow and black": 2208,
+ "yellow and blue": 1498,
+ "yellow and green": 1510,
+ "yellow and orange": 1456,
+ "yellow and red": 113,
+ "yellow and white": 1191,
+ "yes": 425,
+ "yield": 2821,
+ "yogurt": 1547,
+ "young": 878,
+ "younger": 2977,
+ "zebra": 1418,
+ "zebra and giraffe": 1587,
+ "zebras": 783,
+ "zig zag": 2543,
+ "zipper": 326,
+ "zoo": 60,
+ "zucchini": 2057
+}
diff --git a/src/emma_datasets/datamodels/__init__.py b/src/emma_datasets/datamodels/__init__.py
new file mode 100644
index 0000000..81f36ed
--- /dev/null
+++ b/src/emma_datasets/datamodels/__init__.py
@@ -0,0 +1,21 @@
+from emma_datasets.datamodels.annotations import (
+ ActionTrajectory,
+ Annotation,
+ Caption,
+ QuestionAnswerPair,
+ Region,
+ SceneGraph,
+ TaskDescription,
+ Text,
+)
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import (
+ AnnotationDatasetMap,
+ AnnotationType,
+ DatasetModalityMap,
+ DatasetName,
+ DatasetSplit,
+ MediaType,
+)
+from emma_datasets.datamodels.dataset_metadata import DatasetMetadata, SourceMedia
+from emma_datasets.datamodels.instance import Instance
diff --git a/src/emma_datasets/datamodels/annotations.py b/src/emma_datasets/datamodels/annotations.py
new file mode 100644
index 0000000..e863a2d
--- /dev/null
+++ b/src/emma_datasets/datamodels/annotations.py
@@ -0,0 +1,183 @@
+import re
+from typing import Optional, Union
+
+import numpy
+from numpy.typing import NDArray
+from pydantic import validator
+
+from emma_datasets.datamodels.base_model import BaseModel
+from emma_datasets.datamodels.constants import AnnotationType
+from emma_datasets.datamodels.datasets.alfred import AlfredHighAction, AlfredLowAction
+from emma_datasets.datamodels.datasets.gqa import GqaObject
+from emma_datasets.datamodels.generics import GenericActionTrajectory
+
+
+BBox = NDArray[numpy.float32]
+
+
+class Annotation(BaseModel):
+ """Base annotation used by other annotation interfaces."""
+
+ _annotation_type: AnnotationType
+
+ def get_language_data(self) -> Union[str, list[str]]:
+ """Get the language data from the current Annotation class."""
+ raise NotImplementedError()
+
+
+class Caption(Annotation):
+ """Text caption for the image."""
+
+ _annotation_type = AnnotationType.caption
+
+ text: str
+
+ def get_language_data(self) -> str:
+ """Get the language data from a Caption."""
+ return self.text
+
+
+class QuestionAnswerPair(Annotation):
+ """Question-Answer pair for image."""
+
+ _annotation_type = AnnotationType.qa_pair
+
+ id: str
+ question: str
+ answer: Union[str, list[str]]
+
+ def get_language_data(self) -> str:
+ """Get the language data from a QA Pair."""
+ return f"{self.question} {self.answer}"
+
+
+Text = Union[Caption, QuestionAnswerPair]
+
+
+class SceneGraph(Annotation):
+ """Scene graph for a scene.
+
+ Currently, this is just a reduced version of the `GQASceneGraph`. Does the scene graph
+ representation need improving?
+ """
+
+ _annotation_type = AnnotationType.scene_graph
+
+ location: Optional[str]
+ weather: Optional[str]
+ objects: dict[str, GqaObject] # noqa: WPS110
+
+ def get_language_data(self) -> list[str]:
+ """Get the language data from a Scene Graph."""
+ annotations = []
+
+ for scene_obj in self.objects.values():
+ if scene_obj.attributes:
+ for attr in scene_obj.attributes:
+ annotations.append(f"{scene_obj.name} has attribute {attr}")
+
+ if scene_obj.relations:
+ for rel in scene_obj.relations:
+ rel_object = self.objects[rel.object]
+ annotations.append(f"{scene_obj.name} {rel.name} {rel_object.name}")
+
+ return annotations
+
+
+class Region(Annotation):
+ """Regions within media sources, with additional information."""
+
+ _annotation_type = AnnotationType.region
+
+ # Is 1D with 4 values (x, y, width, height) with x,y being top-left coordinate
+ bbox: BBox
+ caption: str
+
+ @validator("bbox", pre=True)
+ @classmethod
+ def convert_bbox_to_numpy(cls, bbox: Union[list[int], list[float], BBox]) -> BBox:
+ """Convert list of numbers to a numpy array before validation.
+
+ If stored in a file, it is likely as a list of numbers, so they are then converted back to
+ a numpy array. If it's not a list, it'll just return whatever it is.
+ """
+ if isinstance(bbox, list):
+ return numpy.asarray(bbox, dtype=numpy.float32)
+ return bbox
+
+ @validator("bbox")
+ @classmethod
+ def bbox_has_positive_numbers(cls, bbox: BBox) -> BBox:
+ """Verify bbox only has 4 positive numbers.
+
+ This is not true for VG, so this has been disabled for now.
+ """
+ # if not numpy.all(numpy.greater_equal(bbox, 0)):
+ # raise AssertionError("All numbers within a BBox should be greater than 0.")
+ return bbox
+
+ @property
+ def x_coord(self) -> int:
+ """Get the top-left x coordinate of the region."""
+ return self.bbox[0]
+
+ @property
+ def y_coord(self) -> int:
+ """Get the top-left y coordinate of the region."""
+ return self.bbox[1]
+
+ @property
+ def width(self) -> int:
+ """Get the width of the region."""
+ return self.bbox[2]
+
+ @property
+ def height(self) -> int:
+ """Get the height of the region."""
+ return self.bbox[3]
+
+ def get_language_data(self) -> str:
+ """Get the language data from a Region."""
+ return self.caption
+
+
+class ActionTrajectory(GenericActionTrajectory[AlfredLowAction, AlfredHighAction]):
+ """Action Trajectory used for the standardised annotation."""
+
+ _annotation_type = AnnotationType.action_trajectory
+
+ low_level_actions: list[AlfredLowAction]
+ high_level_actions: list[AlfredHighAction]
+
+ def get_language_data(self) -> str:
+ """Get the language data from an action trajectory."""
+ trajectory_str = " ".join(
+ self._get_action_string(low_action.discrete_action.action)
+ for low_action in self.low_level_actions
+ )
+
+ return trajectory_str
+
+ def _get_action_string(self, action_name: str) -> str:
+ """Returns a phrase associated with the action API name.
+
+ API action names are in camelcase format: MoveAhead_25
+ """
+ parts: list[str] = []
+
+ for x in re.findall("[A-Z][^A-Z]*", action_name):
+ parts.extend(xi for xi in x.split("_"))
+
+ return " ".join(parts)
+
+
+class TaskDescription(Annotation):
+ """Text caption for the image."""
+
+ _annotation_type = AnnotationType.task_description
+
+ text: str
+
+ def get_language_data(self) -> str:
+ """Get the language data from a TaskDescription."""
+ return self.text
diff --git a/src/emma_datasets/datamodels/base_model.py b/src/emma_datasets/datamodels/base_model.py
new file mode 100644
index 0000000..f437833
--- /dev/null
+++ b/src/emma_datasets/datamodels/base_model.py
@@ -0,0 +1,36 @@
+from abc import ABC, abstractmethod
+from pathlib import Path
+from typing import Union
+
+import orjson
+from pydantic import BaseModel as PydanticBaseModel
+
+from emma_datasets.datamodels.constants import MediaType
+from emma_datasets.io.json import orjson_dumps
+
+
+class BaseModel(PydanticBaseModel):
+ """Base model class, inherited from Pydantic."""
+
+ class Config:
+ """Updated config."""
+
+ json_loads = orjson.loads
+ json_dumps = orjson_dumps
+ arbitrary_types_allowed = True
+
+
+class BaseInstance(BaseModel, ABC):
+ """Base instance class with common attributes and method used by all instances."""
+
+ @property
+ @abstractmethod
+ def modality(self) -> MediaType:
+ """Returns the modality of the instance."""
+ raise NotImplementedError
+
+ @property
+ @abstractmethod
+ def features_path(self) -> Union[Path, list[Path]]:
+ """Get the path to the features for this instance."""
+ raise NotImplementedError
diff --git a/src/emma_datasets/datamodels/common.py b/src/emma_datasets/datamodels/common.py
new file mode 100644
index 0000000..175bcb7
--- /dev/null
+++ b/src/emma_datasets/datamodels/common.py
@@ -0,0 +1,15 @@
+from emma_datasets.datamodels.base_model import BaseModel
+
+
+class Coordinate(BaseModel):
+ """Model for coordinates."""
+
+ x: float
+ y: float
+ z: float
+
+
+class Action(BaseModel):
+ """Base action model for action trajectories."""
+
+ action: str
diff --git a/src/emma_datasets/datamodels/constants.py b/src/emma_datasets/datamodels/constants.py
new file mode 100644
index 0000000..2ef7cca
--- /dev/null
+++ b/src/emma_datasets/datamodels/constants.py
@@ -0,0 +1,137 @@
+from enum import Enum, IntEnum
+
+from emma_datasets.common.helpers import flip_list_map_elements
+
+
+class AnnotationType(Enum):
+ """Possible annotations available from a dataset.
+
+ The values for these enums are used for automatically providing clear and consistent feedback
+ to users. Ensure that any new annotations are formatted similarly to maintain consistency.
+ """
+
+ qa_pair = "QA Pair"
+ caption = "Caption"
+ region = "Region"
+ scene_graph = "Scene Graph"
+ action_trajectory = "Action Trajectory"
+ task_description = "Task Description"
+
+
+class MediaType(IntEnum):
+ """Types of media which can be stored from datasets."""
+
+ # Image = R, G, B
+ image = 3
+ # Video = R, G, B, Time
+ video = 4
+ # Multicam = R, G, B, Time, Camera
+ multicam = 5
+
+
+class DatasetName(Enum):
+ """The different datasets available."""
+
+ alfred = "ALFRED"
+ coco = "COCO"
+ epic_kitchens = "Epic Kitchens"
+ gqa = "GQA"
+ visual_genome = "Visual Genome"
+ teach = "TEACh"
+ conceptual_captions = "Conceptual Captions"
+ sbu_captions = "SBU Captions"
+ nlvr = "NLVR^2"
+ vqa_v2 = "VQA v2"
+ ego4d = "Ego4D Benchmark Annotations"
+ ego4d_nlq = "Ego4D Natural Language Queries"
+ ego4d_moments = "Ego4D Moment Queries"
+ ego4d_vq = "Ego4D Visual Queries"
+ ego4d_narrations = "Ego4D Narrations"
+ winoground = "Winoground"
+ refcoco = "COCO Referring Expressions"
+ simbot_missions = "Alexa Prize SimBot Mission data"
+ simbot_instructions = "Alexa Prize SimBot Instruction data"
+ simbot_actions = "Alexa Prize SimBot Action-level data"
+ simbot_clarifications = "Alexa Prize SimBot Clarification data"
+ simbot_planner = "Alexa Prize SimBot High-level Planner data"
+
+
+class DatasetSplit(Enum):
+ """Split type for the dataset."""
+
+ train = "training"
+ valid = "validation"
+ test = "testing"
+ valid_seen = "valid_seen"
+ valid_unseen = "valid_unseen"
+ test_seen = "test_seen"
+ test_unseen = "test_unseen"
+ restval = "rest_val"
+ test_dev = "test_dev"
+
+
+DatasetModalityMap: dict[DatasetName, MediaType] = {
+ DatasetName.coco: MediaType.image,
+ DatasetName.gqa: MediaType.image,
+ DatasetName.visual_genome: MediaType.image,
+ DatasetName.epic_kitchens: MediaType.video,
+ DatasetName.alfred: MediaType.video,
+ DatasetName.conceptual_captions: MediaType.image,
+ DatasetName.sbu_captions: MediaType.image,
+ DatasetName.teach: MediaType.video,
+ DatasetName.nlvr: MediaType.video,
+ DatasetName.vqa_v2: MediaType.image,
+ DatasetName.ego4d: MediaType.video,
+ DatasetName.ego4d_moments: MediaType.video,
+ DatasetName.ego4d_narrations: MediaType.video,
+ DatasetName.ego4d_nlq: MediaType.video,
+ DatasetName.ego4d_vq: MediaType.video,
+ DatasetName.winoground: MediaType.image,
+ DatasetName.refcoco: MediaType.image,
+ DatasetName.simbot_missions: MediaType.multicam,
+ DatasetName.simbot_instructions: MediaType.multicam,
+ DatasetName.simbot_actions: MediaType.multicam,
+ DatasetName.simbot_clarifications: MediaType.multicam,
+ DatasetName.simbot_planner: MediaType.multicam,
+}
+
+AnnotationDatasetMap: dict[AnnotationType, list[DatasetName]] = {
+ AnnotationType.qa_pair: [
+ DatasetName.gqa,
+ DatasetName.coco,
+ DatasetName.vqa_v2,
+ DatasetName.ego4d_vq,
+ DatasetName.ego4d_moments,
+ DatasetName.ego4d_nlq,
+ DatasetName.simbot_missions,
+ DatasetName.simbot_instructions,
+ DatasetName.simbot_actions,
+ DatasetName.simbot_clarifications,
+ ],
+ AnnotationType.caption: [
+ DatasetName.coco,
+ DatasetName.epic_kitchens,
+ DatasetName.alfred,
+ DatasetName.conceptual_captions,
+ DatasetName.sbu_captions,
+ DatasetName.nlvr,
+ DatasetName.ego4d,
+ DatasetName.ego4d_narrations,
+ DatasetName.winoground,
+ ],
+ AnnotationType.region: [DatasetName.visual_genome, DatasetName.refcoco],
+ AnnotationType.scene_graph: [DatasetName.gqa],
+ AnnotationType.action_trajectory: [
+ DatasetName.alfred,
+ DatasetName.teach,
+ DatasetName.simbot_missions,
+ DatasetName.simbot_instructions,
+ DatasetName.simbot_actions,
+ DatasetName.simbot_clarifications,
+ DatasetName.simbot_planner,
+ ],
+ AnnotationType.task_description: [DatasetName.alfred],
+}
+
+
+DatasetAnnotationMap = flip_list_map_elements(AnnotationDatasetMap)
diff --git a/src/emma_datasets/datamodels/dataset_metadata.py b/src/emma_datasets/datamodels/dataset_metadata.py
new file mode 100644
index 0000000..7f4a58e
--- /dev/null
+++ b/src/emma_datasets/datamodels/dataset_metadata.py
@@ -0,0 +1,42 @@
+from pathlib import Path
+from typing import Optional, Union
+
+from emma_datasets.datamodels.base_model import BaseModel
+from emma_datasets.datamodels.constants import DatasetName, DatasetSplit, MediaType
+
+
+class SourceMedia(BaseModel, frozen=True):
+ """Source media from dataset."""
+
+ url: Optional[str]
+ media_type: MediaType
+ path: Optional[Path]
+ width: Optional[int]
+ height: Optional[int]
+
+
+class DatasetMetadata(BaseModel, frozen=True):
+ """Source dataset metadata per instance."""
+
+ id: str
+ name: DatasetName
+ split: Optional[DatasetSplit] = None
+ media: Union[SourceMedia, list[SourceMedia]]
+ features_path: Union[Path, list[Path]]
+
+ # From splitters
+ scene_graph_path: Optional[Path] = None
+ regions_path: Optional[Path] = None
+ caption_path: Optional[Path] = None
+ qa_pairs_path: Optional[Path] = None
+ action_trajectory_path: Optional[Path] = None
+ task_description_path: Optional[Path] = None
+
+ @property
+ def paths(self) -> Union[Path, list[Path], None]:
+ """Get paths to the source media."""
+ if isinstance(self.media, list):
+ all_paths = [media.path for media in self.media if media.path is not None]
+ return all_paths if all_paths else None
+
+ return self.media.path
diff --git a/src/emma_datasets/datamodels/datasets/__init__.py b/src/emma_datasets/datamodels/datasets/__init__.py
new file mode 100644
index 0000000..4d0192e
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/__init__.py
@@ -0,0 +1,35 @@
+from emma_datasets.datamodels.datasets.alfred import (
+ AlfredAnnotation,
+ AlfredHighAction,
+ AlfredImageMetadata,
+ AlfredLowAction,
+ AlfredMetadata,
+ AlfredScene,
+)
+from emma_datasets.datamodels.datasets.coco import CocoCaption, CocoImageMetadata, CocoInstance
+from emma_datasets.datamodels.datasets.conceptual_captions import ConceptualCaptionsMetadata
+from emma_datasets.datamodels.datasets.epic_kitchens import (
+ EpicKitchensInstance,
+ EpicKitchensNarrationMetadata,
+)
+from emma_datasets.datamodels.datasets.gqa import (
+ GqaImageMetadata,
+ GqaObject,
+ GqaRelation,
+ GqaSceneGraph,
+)
+from emma_datasets.datamodels.datasets.nlvr import NlvrInstance
+from emma_datasets.datamodels.datasets.refcoco import RefCocoInstance
+from emma_datasets.datamodels.datasets.teach import TeachEdhInstance, TeachInteraction
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ SimBotInstructionInstance,
+ SimBotMissionInstance,
+ SimBotPlannerInstance,
+)
+from emma_datasets.datamodels.datasets.visual_genome import (
+ VgImageMetadata,
+ VgImageRegions,
+ VgRegion,
+)
+from emma_datasets.datamodels.datasets.vqa_v2 import VQAv2AnnotationPaths, VQAv2Instance
+from emma_datasets.datamodels.datasets.winoground import WinogroundInstance
diff --git a/src/emma_datasets/datamodels/datasets/alfred.py b/src/emma_datasets/datamodels/datasets/alfred.py
new file mode 100644
index 0000000..b3abc5c
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/alfred.py
@@ -0,0 +1,145 @@
+from typing import Any, Optional
+
+from pydantic import BaseModel, Field, root_validator
+
+from emma_datasets.datamodels.common import Action, Coordinate
+from emma_datasets.datamodels.constants import DatasetSplit
+from emma_datasets.datamodels.generics import GenericActionTrajectory
+
+
+class AlfredImageMetadata(BaseModel):
+ """Metadata for an image frame from ALFRED Trajectory."""
+
+ high_idx: int
+ low_idx: int
+ image_name: str
+
+
+class AlfredInitAction(Coordinate):
+ """Metadata of the action used to initialise the agent."""
+
+ action: str
+ horizon: int
+ rotate_on_teleport: bool = Field(..., alias="rotateOnTeleport")
+ rotation: int
+
+
+class AlfredObjectPosition(Coordinate):
+ """Position of object in 3D space."""
+
+
+class AlfredObjectRotation(Coordinate):
+ """The rotation component on an object in 3D space."""
+
+
+class AlfredObjectPose(BaseModel):
+ """Pose of an object in the 3D world."""
+
+ object_name: str = Field(..., alias="objectName")
+ position: AlfredObjectPosition
+ rotation: AlfredObjectRotation
+
+
+class AlfredScene(BaseModel):
+ """Defines the metadata of an AI2Thor scene used for the current trajectory."""
+
+ dirty_and_empty: bool
+ floor_plan: str
+ init_action: AlfredInitAction
+ object_poses: list[AlfredObjectPose]
+ object_toggles: Any
+ random_seed: int
+ scene_num: int
+
+
+class AlfredAnnotation(BaseModel):
+ """Alfred language annotations associated with each trajectory."""
+
+ high_descs: list[str]
+ task_desc: str
+
+
+class AlfredApiAction(Action):
+ """Represents an AI2Thor action that can be executed on the simulartor."""
+
+ object_id: Optional[str] = Field(None, alias="objectId")
+ receptacle_object_id: Optional[str] = Field(None, alias="receptacleObjectId")
+ force_action: Optional[bool] = Field(None, alias="forceAction")
+ move_magnitude: Optional[float] = Field(None, alias="moveMagnitude")
+
+
+class AlfredPlannerAction(Action):
+ """Represents a PDDL planner action."""
+
+ location: Optional[str]
+ coordinate_object_id: Optional[tuple[str, list[int]]] = Field(None, alias="coordinateObjectId")
+ coordinate_receptable_object_id: Optional[tuple[str, list[int]]] = Field(
+ None, alias="coordinateReceptacleObjectId"
+ )
+ force_visible: Optional[bool] = Field(None, alias="forceVisible")
+ object_id: Optional[str] = Field(None, alias="objectId")
+
+
+class AlfredLowDiscreteAction(Action):
+ """Represents a discrete representation of the low-level action used by the planner."""
+
+ args: dict[str, Any]
+
+
+class AlfredHighDiscreteAction(Action):
+ """ALFRED high-level discrete action."""
+
+ args: list[str]
+
+
+class AlfredHighAction(BaseModel):
+ """An ALFRED high-level action definition based on discrete and planner actions."""
+
+ discrete_action: AlfredHighDiscreteAction
+ planner_action: AlfredPlannerAction
+ high_idx: int
+
+
+class AlfredLowAction(BaseModel):
+ """Low-level AI2Thor action."""
+
+ api_action: AlfredApiAction
+ discrete_action: AlfredLowDiscreteAction
+ high_idx: int
+
+
+class AlfredTrajectory(GenericActionTrajectory[AlfredLowAction, AlfredHighAction]):
+ """An ALFRED trajectory divided in low-level and high-level actions."""
+
+ low_level_actions: list[AlfredLowAction] = Field(..., alias="low_actions")
+ high_level_actions: list[AlfredHighAction] = Field(..., alias="high_pddl")
+
+
+class AlfredMetadata(BaseModel):
+ """Represents the metadata of an ALFRED trajectory.
+
+ For each trajectory, we have multiple language annotations that are stored in
+ `turk_annotations`.
+ Turkers annotated both goal description as well as sub-goal instructions for each subgoal.
+
+ When using the AI2Thor environment, the scene metadata are required to re-initialise the
+ environment in the exact same scenario the trajectory was originally recorded.
+ """
+
+ images: list[AlfredImageMetadata]
+ plan: AlfredTrajectory
+ scene: AlfredScene
+ task_id: str
+ task_type: str
+ turk_annotations: dict[str, list[AlfredAnnotation]]
+ dataset_split: Optional[DatasetSplit]
+
+ @root_validator(pre=True)
+ @classmethod
+ def fix_misaligned_plan(cls, example: dict[str, Any]) -> dict[str, Any]:
+ """Removes End subgoal from ALFRED high-level subgoals."""
+ high_level_actions = example["plan"]["high_pddl"]
+ if high_level_actions[-1]["planner_action"]["action"] == "End":
+ example["plan"]["high_pddl"] = high_level_actions[:-1]
+
+ return example
diff --git a/src/emma_datasets/datamodels/datasets/coco.py b/src/emma_datasets/datamodels/datasets/coco.py
new file mode 100644
index 0000000..46e9f37
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/coco.py
@@ -0,0 +1,74 @@
+from datetime import datetime
+from pathlib import Path
+from typing import Any, Optional
+
+from pydantic import BaseModel, HttpUrl, PrivateAttr
+
+from emma_datasets.common import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import DatasetSplit, MediaType
+
+
+settings = Settings()
+
+
+class CocoImageMetadata(BaseModel, frozen=True):
+ """Image metadata from COCO.
+
+ Commonly found in the `images` key within the captions JSON files.
+
+ Note:
+ - `dataset_split` is not given within the raw metadata for COCO, but should be provided to
+ make life easier later on.
+ - `id` is a string and not an integer to remain compatible with other datasets.
+ """
+
+ id: str
+ license: int
+ file_name: str
+ coco_url: HttpUrl
+ flickr_url: HttpUrl
+ height: int
+ width: int
+ date_captured: datetime
+ dataset_split: Optional[DatasetSplit]
+
+
+class CocoCaption(BaseModel):
+ """Caption data from COCO.
+
+ Commonly found in the `annotations` key within the captions JSON files.
+
+ Note:
+ - `id` is a string and not an integer to remain compatible with other datasets.
+ """
+
+ id: str
+ image_id: str
+ caption: str
+
+
+class CocoInstance(BaseInstance):
+ """COCO Instance."""
+
+ image_id: str
+ captions_id: list[str]
+ captions: list[str]
+ _features_path: Path = PrivateAttr()
+
+ def __init__(self, **data: Any) -> None:
+ super().__init__(**data)
+
+ self._features_path = settings.paths.coco_features.joinpath( # noqa: WPS601
+ f"{self.image_id.zfill(12)}.pt" # noqa: WPS432
+ )
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.image
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance."""
+ return self._features_path
diff --git a/src/emma_datasets/datamodels/datasets/conceptual_captions.py b/src/emma_datasets/datamodels/datasets/conceptual_captions.py
new file mode 100644
index 0000000..11d1ef5
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/conceptual_captions.py
@@ -0,0 +1,15 @@
+from pydantic import BaseModel, HttpUrl
+
+from emma_datasets.datamodels.constants import DatasetSplit
+
+
+class ConceptualCaptionsMetadata(BaseModel):
+ """Represents the metadata of a Conceptual Caption example."""
+
+ key: str
+ caption: str
+ url: HttpUrl
+ width: int
+ height: int
+ shard_id: str
+ dataset_split: DatasetSplit
diff --git a/src/emma_datasets/datamodels/datasets/ego4d.py b/src/emma_datasets/datamodels/datasets/ego4d.py
new file mode 100644
index 0000000..6690af4
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/ego4d.py
@@ -0,0 +1,171 @@
+import json
+from pathlib import Path
+from typing import Any, Optional
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.base_model import BaseInstance, BaseModel
+from emma_datasets.datamodels.constants import MediaType
+
+
+settings = Settings()
+
+
+class Ego4DNLQueryItem(BaseModel):
+ """The dataclass for an Ego4D Natural Language query annotation item."""
+
+ clip_start_sec: Optional[float]
+ clip_end_sec: Optional[float]
+ video_start_sec: Optional[float]
+ video_end_sec: Optional[float]
+ video_start_frame: Optional[int]
+ video_end_frame: Optional[int]
+ template: Optional[str]
+ query: Optional[str]
+ slot_x: Optional[str]
+ verb_x: Optional[str]
+ slot_y: Optional[str]
+ verb_y: Optional[str]
+ raw_tags: Optional[list[Optional[str]]]
+
+
+class Ego4DNLAnnotation(BaseModel):
+ """The dataclass for an Natural Language Queries annotation."""
+
+ language_queries: list[Ego4DNLQueryItem]
+
+
+class Ego4DMomentLabel(BaseModel):
+ """A dataclass for an Ego4D moment annotation."""
+
+ start_time: float
+ end_time: float
+ label: str
+ video_start_time: float
+ video_end_time: float
+ video_start_frame: int
+ video_end_frame: int
+ primary: bool
+
+
+class Ego4DMomentsAnnotation(BaseModel):
+ """A dataclass for a list of Ego4D moment annotations."""
+
+ annotator_uid: str
+ labels: list[Ego4DMomentLabel]
+
+
+class Ego4DInstance(BaseInstance):
+ """Base class for all the Ego4D instance classes."""
+
+ video_uid: str
+ clip_uid: str
+ video_start_sec: float
+ video_end_sec: float
+ video_start_frame: int
+ video_end_frame: int
+ clip_start_sec: float
+ clip_end_sec: float
+ clip_start_frame: int
+ clip_end_frame: int
+ source_clip_uid: str
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.video
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance."""
+ return Settings().paths.ego4d_features.joinpath(f"{self.clip_uid}.pt")
+
+
+class Ego4DNLQInstance(Ego4DInstance):
+ """The dataclass for an Ego4D Natural Language Queries instance."""
+
+ annotations: list[Ego4DNLAnnotation]
+
+
+class Ego4DMomentsInstance(Ego4DInstance):
+ """The dataclass for an Ego4D Moments Queries instance."""
+
+ annotations: Optional[list[Ego4DMomentsAnnotation]]
+
+
+class Ego4DResponseTrack(BaseModel):
+ """Records information about where an object was seen in the video."""
+
+ frame_number: int
+ x: float
+ y: float
+ width: float
+ height: float
+ rotation: float
+ original_width: float
+ original_height: float
+ video_frame_number: int
+
+
+class Ego4DVisualCrop(BaseModel):
+ """Dataclass that models an object crop in a video frame."""
+
+ frame_number: int
+ x: float
+ y: float
+ width: float
+ height: float
+ rotation: float
+ original_width: float
+ original_height: float
+ video_frame_number: int
+
+
+class Ego4DVQQueryData(BaseModel):
+ """Dataclass for a visual query annotation.
+
+ All these arguments are considered Optional because we found some instances that do not have
+ all these values.
+ """
+
+ is_valid: bool
+ errors: list[str]
+ warnings: list[str]
+ query_frame: Optional[int]
+ query_video_frame: Optional[int]
+ response_track: Optional[list[Ego4DResponseTrack]]
+ object_title: Optional[str]
+ visual_crop: Optional[Ego4DVisualCrop]
+
+
+class Ego4DVQAnnotations(BaseModel):
+ """Ego4D visual query annotation for a given example."""
+
+ query_sets: dict[str, Ego4DVQQueryData]
+ warnings: list[str]
+
+
+class Ego4DVQInstance(Ego4DInstance):
+ """Ego4D list of visual query annotations."""
+
+ annotations: list[Ego4DVQAnnotations]
+ annotation_complete: bool
+
+
+def load_ego4d_annotations(path: Path) -> list[dict[str, Any]]:
+ """Loads the raw Ego4D annotations from the raw JSON file.
+
+ More information about the data format can be found: https://ego4d-data.org/docs/data/annotations-schemas/
+ """
+ with open(path) as in_file:
+ data = json.load(in_file)
+
+ clips_data = []
+
+ for video in data["videos"]:
+ for clip in video["clips"]:
+ new_clip = clip.copy()
+
+ new_clip["video_uid"] = video["video_uid"]
+ clips_data.append(new_clip)
+
+ return clips_data
diff --git a/src/emma_datasets/datamodels/datasets/epic_kitchens.py b/src/emma_datasets/datamodels/datasets/epic_kitchens.py
new file mode 100644
index 0000000..03a2676
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/epic_kitchens.py
@@ -0,0 +1,94 @@
+import ast
+from datetime import datetime
+from pathlib import Path
+from typing import Any, Optional, Union
+
+from pydantic import validator
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.base_model import BaseInstance, BaseModel
+from emma_datasets.datamodels.constants import DatasetSplit, MediaType
+
+
+settings = Settings()
+
+
+def fix_timestamp_fields(timestamp: Union[str, datetime]) -> datetime:
+ """Convert strings to time fields."""
+ if isinstance(timestamp, str):
+ return datetime.strptime(timestamp, "%H:%M:%S.%f")
+ return timestamp
+
+
+def fix_lists(list_object: Union[str, list[Any]]) -> list[Any]:
+ """Convert list strings to python lists."""
+ if isinstance(list_object, str):
+ return ast.literal_eval(list_object)
+ return list_object
+
+
+class EpicKitchensNarrationMetadata(BaseModel):
+ """Metadata for a single subgoal from EpicKitchens."""
+
+ narration_id: str
+ participant_id: str
+ video_id: str
+ # narration_timestamp: datetime
+ start_timestamp: datetime
+ stop_timestamp: datetime
+ start_frame: int
+ stop_frame: int
+ narration: str
+ verb: str
+ verb_class: int
+ noun: str
+ noun_class: int
+ all_nouns: list[str]
+ all_noun_classes: list[int]
+ dataset_split: Optional[DatasetSplit]
+
+ # _fix_narrration_timestamp = validator("narration_timestamp", pre=True, allow_reuse=True)(
+ # fix_timestamp_fields
+ # )
+ _fix_start_timestamp = validator("start_timestamp", pre=True, allow_reuse=True)(
+ fix_timestamp_fields
+ )
+ _fix_stop_timestamp = validator("stop_timestamp", pre=True, allow_reuse=True)(
+ fix_timestamp_fields
+ )
+
+ _fix_all_nouns = validator("all_nouns", pre=True, allow_reuse=True)(fix_lists)
+ _fix_all_noun_classes = validator("all_noun_classes", pre=True, allow_reuse=True)(fix_lists)
+
+
+class EpicKitchensInstance(BaseInstance):
+ """The dataclass for an EpicKitchen instance."""
+
+ narration_id: str
+ participant_id: str
+ video_id: str
+ narration_timestamp: str
+ start_timestamp: str
+ stop_timestamp: str
+ start_frame: Optional[str]
+ stop_frame: Optional[str]
+ narration: Optional[str]
+ verb: Optional[str]
+ verb_class: Optional[str]
+ noun: Optional[str]
+ noun_class: Optional[str]
+ all_nouns: Optional[list[str]]
+ all_noun_classes: Optional[list[int]]
+
+ _fix_all_nouns = validator("all_nouns", pre=True, allow_reuse=True)(fix_lists)
+ _fix_all_noun_classes = validator("all_noun_classes", pre=True, allow_reuse=True)(fix_lists)
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.video
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance."""
+ return Settings().paths.epic_kitchens_features.joinpath(f"{self.narration_id}.pt")
diff --git a/src/emma_datasets/datamodels/datasets/gqa.py b/src/emma_datasets/datamodels/datasets/gqa.py
new file mode 100644
index 0000000..c62d2fd
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/gqa.py
@@ -0,0 +1,53 @@
+from typing import Optional
+
+from pydantic import BaseModel
+
+from emma_datasets.datamodels.constants import DatasetSplit
+
+
+class GqaImageMetadata(BaseModel, frozen=True):
+ """Image metadata from GQA.
+
+ These are extracted from the scene graph JSON files.
+
+ Note:
+ - `dataset_split` is not given within the raw metadata for COCO, but should be provided to
+ make life easier later on.
+ - `id` is a string and not an integer to remain compatible with other datasets.
+ """
+
+ id: str
+ height: int
+ width: int
+ file_name: str
+ dataset_split: Optional[DatasetSplit]
+
+
+class GqaRelation(BaseModel):
+ """GQA basic relation."""
+
+ name: str
+ object: str
+
+
+class GqaObject(BaseModel):
+ """An object in a GQA scene graph."""
+
+ name: str
+ attributes: Optional[list[str]]
+ x: int
+ y: int
+ w: int
+ h: int
+ relations: Optional[list[GqaRelation]]
+
+
+class GqaSceneGraph(BaseModel):
+ """The structure of a GQA scene graph."""
+
+ image_id: str
+ width: int
+ height: int
+ location: Optional[str]
+ weather: Optional[str]
+ objects: dict[str, GqaObject] # noqa: WPS110
diff --git a/src/emma_datasets/datamodels/datasets/nlvr.py b/src/emma_datasets/datamodels/datasets/nlvr.py
new file mode 100644
index 0000000..e22bde0
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/nlvr.py
@@ -0,0 +1,64 @@
+from pathlib import Path
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import MediaType
+
+
+settings = Settings()
+
+
+class NlvrInstance(BaseInstance):
+ """The dataclass for an NLVR^2 instance."""
+
+ label: str
+ sentence: str
+ synset: str
+ left_url: str
+ right_url: str
+ identifier: str
+
+ @property
+ def image_ids(self) -> list[str]:
+ """Generates the image identifiers from the global NLVR id.
+
+ We assume a consistent naming of the image files associated with each example. Given the
+ identifier `split-set_id-pair_id-sentence-id`, the left and right images are named `split-
+ set_id-pair_id-img0.png` and `split-set_id-pair_id-img1.png` respectively.
+ """
+ split, set_id, pair_id, _ = self.identifier.split("-")
+ return [f"{split}-{set_id}-{pair_id}-img{i}" for i in range(2)]
+
+ @property
+ def left_image_filename(self) -> str:
+ """Returns the filename of the left image."""
+ return f"{self.image_ids[0]}.png"
+
+ @property
+ def right_image_filename(self) -> str:
+ """Returns the filename of the right image."""
+ return f"{self.image_ids[1]}.png"
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.video
+
+ @property
+ def feature_id(self) -> str:
+ """Derives the unique example id which does not include sentence_id."""
+ split, set_id, pair_id, _ = self.identifier.split("-")
+
+ return f"{split}-{set_id}-{pair_id}"
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance.
+
+ In this case we follow the convention reported in the following PR:
+ https://github.com/emma-simbot/perception/pull/151
+
+ Concretely this means the following:
+ (train-9642-3-img0.png, train-9642-3-img1.png) -> train-9642-3.pt
+ """
+ return settings.paths.nlvr_features.joinpath(f"{self.feature_id}.pt")
diff --git a/src/emma_datasets/datamodels/datasets/refcoco.py b/src/emma_datasets/datamodels/datasets/refcoco.py
new file mode 100644
index 0000000..4f72c4b
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/refcoco.py
@@ -0,0 +1,191 @@
+import pickle # noqa: S403
+from collections import defaultdict
+from pathlib import Path
+from typing import Any
+
+from pydantic import BaseModel, HttpUrl, PrivateAttr
+
+from emma_datasets.common import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import DatasetSplit, MediaType
+from emma_datasets.io import read_json
+
+
+settings = Settings()
+
+
+class RefCocoRegion(BaseModel):
+ """RefCOCO region."""
+
+ annotation_id: str
+ image_id: str
+ x: float
+ y: float
+ w: float
+ h: float
+
+
+class RefCocoImageMetadata(BaseModel, frozen=True):
+ """Image metadata for RefCOCO scene."""
+
+ image_id: str
+ width: int
+ height: int
+ url: HttpUrl
+
+
+class RefCocoExpression(BaseModel):
+ """RefCOCO referring expression."""
+
+ sentence: str
+ sentence_id: str
+ annotation_id: str
+
+
+def read_refcoco_referring_expressions(
+ referring_expressions_path: Path,
+) -> dict[DatasetSplit, list[RefCocoExpression]]:
+ """Read the RefCOCO referring expressions and group them per split."""
+ with open(referring_expressions_path, "rb") as in_file:
+ annotations = pickle.load(in_file) # noqa: S301
+
+ referring_expressions = defaultdict(list)
+
+ for instance in annotations:
+ # Get the split of the instance, because all referring expressions are stored in a single file
+ if instance["split"] == "val":
+ instance["split"] = "valid"
+ split = DatasetSplit[instance["split"]]
+ # Each instance is associated with multiple referring expressions
+ for sentence in instance["sentences"]:
+ referring_expressions[split].append(
+ RefCocoExpression(
+ sentence=sentence["raw"],
+ sentence_id=str(sentence["sent_id"]),
+ annotation_id=str(instance["ann_id"]),
+ )
+ )
+ return referring_expressions
+
+
+def read_refcoco_image_metadata(annotation_path: Path) -> dict[str, RefCocoImageMetadata]:
+ """Read the metadata for the RefCOCO images.
+
+ Return metadata as a dictionary with image ids as the keys.
+ """
+ data = read_json(annotation_path)["images"]
+
+ image_metadata = {}
+ for image in data:
+ image_metadata[str(image["id"])] = RefCocoImageMetadata(
+ image_id=str(image["id"]),
+ width=image["width"],
+ height=image["height"],
+ url=image["coco_url"],
+ )
+ return image_metadata
+
+
+def read_refcoco_region_annotations(annotation_path: Path) -> dict[str, RefCocoRegion]:
+ """Read the annotations for the regions associated with referring expressions.
+
+ The bbox cooridinates are [x,y,w,h] where xy are the cooridinates of the bottom left corner.
+ Return metadata as a dictionary with annotation ids as the keys.
+ """
+ data = read_json(annotation_path)["annotations"]
+ regions = {}
+ for datum in data:
+ regions[str(datum["id"])] = RefCocoRegion(
+ annotation_id=str(datum["id"]),
+ image_id=str(datum["image_id"]),
+ x=datum["bbox"][0],
+ y=datum["bbox"][1],
+ w=datum["bbox"][2],
+ h=datum["bbox"][3],
+ )
+
+ return regions
+
+
+def get_refcoco_paths(refcoco_base_dir: Path) -> tuple[Path, Path]:
+ """Get the paths to referring expressions and image annotations."""
+ referring_expressions_path = refcoco_base_dir.joinpath("refs(umd).p")
+ image_annotations_path = refcoco_base_dir.joinpath("instances.json")
+ return referring_expressions_path, image_annotations_path
+
+
+def merge_refcoco_annotations(
+ referring_expressions: list[RefCocoExpression],
+ regions_metadata: dict[str, RefCocoRegion],
+ image_metadata: dict[str, RefCocoImageMetadata],
+ dataset_split: DatasetSplit,
+) -> list[dict[str, Any]]:
+ """Merge the referring expressions, region and image annotations."""
+ annotations = []
+ for referring_expression in referring_expressions:
+ annotation_id = referring_expression.annotation_id
+ region = regions_metadata.get(annotation_id)
+ if not region:
+ continue
+
+ image_id = regions_metadata[annotation_id].image_id
+ image = image_metadata.get(image_id)
+ if not image_id:
+ continue
+ instance = {
+ "referring_expression": referring_expression,
+ "region": region,
+ "image_metadata": image,
+ "split": dataset_split,
+ }
+ annotations.append(instance)
+
+ return annotations
+
+
+def load_refcoco_annotations(refcoco_base_dir: Path) -> dict[DatasetSplit, Any]:
+ """Load the RefCOCOg (UMD) annotations."""
+ referring_expressions_path, image_annotations_path = get_refcoco_paths(refcoco_base_dir)
+ referring_expressions = read_refcoco_referring_expressions(referring_expressions_path)
+ regions_metadata = read_refcoco_region_annotations(image_annotations_path)
+ image_metadata = read_refcoco_image_metadata(image_annotations_path)
+
+ # Merge the annotations per split
+ annotations = {}
+ for split, split_referring_expressions in referring_expressions.items():
+ annotations[split] = merge_refcoco_annotations(
+ split_referring_expressions, regions_metadata, image_metadata, split
+ )
+
+ return annotations
+
+
+class RefCocoInstance(BaseInstance):
+ """RefCOCO instance."""
+
+ image_metadata: RefCocoImageMetadata
+ region: RefCocoRegion
+ referring_expression: RefCocoExpression
+ _features_path: Path = PrivateAttr()
+ split: DatasetSplit
+
+ def __init__(self, **data: Any) -> None:
+ super().__init__(**data)
+
+ if self.split == DatasetSplit.train:
+ base_dir = settings.paths.refcoco_features
+ else:
+ base_dir = settings.paths.coco_features
+ self._features_path = base_dir.joinpath( # noqa: WPS601
+ f"{self.image_metadata.image_id.zfill(12)}.pt" # noqa: WPS432
+ )
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.image
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance."""
+ return self._features_path
diff --git a/src/emma_datasets/datamodels/datasets/simbot.py b/src/emma_datasets/datamodels/datasets/simbot.py
new file mode 100644
index 0000000..bc9915c
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/simbot.py
@@ -0,0 +1,443 @@
+import json
+import logging
+import random
+from pathlib import Path
+from typing import Any, Literal, Optional
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.constants import DatasetSplit
+from emma_datasets.datamodels.datasets import SimBotInstructionInstance
+from emma_datasets.datamodels.datasets.alfred import AlfredMetadata
+from emma_datasets.datamodels.datasets.utils.simbot_utils.ambiguous_data import (
+ ClarificationFilter,
+ VisionAugmentationFilter,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.high_level_key_processor import (
+ DecodedKey,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ InventoryObjectfromTrajectory,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.paraphrasers import (
+ InstructionParaphraser,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.preprocessing import (
+ SyntheticIntructionsPreprocessor,
+ TrajectoryInstructionProcessor,
+ create_instruction_dict,
+)
+from emma_datasets.db import DatasetDb
+from emma_datasets.io.paths import get_all_file_paths
+
+
+settings = Settings()
+random.seed(42) # noqa: WPS432
+logging.basicConfig()
+logger = logging.getLogger(__name__)
+logger.setLevel(logging.INFO)
+
+
+def load_simbot_mission_data(filepath: Path) -> list[dict[Any, Any]]:
+ """Loads and reformats the SimBot annotations for creating SimBot missions."""
+ with open(filepath) as fp:
+ data = json.load(fp)
+
+ restructured_data = []
+
+ for mission_id, mission_annotations in data.items():
+ data = {
+ "mission_id": mission_id,
+ }
+
+ data.update(mission_annotations)
+
+ restructured_data.append(data)
+
+ return restructured_data
+
+
+def load_simbot_trajectory_instruction_data(
+ trajectory_json_path: Path,
+ skip_goto_rooms: bool = True,
+ use_synthetic_action_sampler: bool = False,
+ num_additional_synthetic_instructions: int = -1,
+) -> list[dict[Any, Any]]:
+ """Loads the SimBot annotations for creating SimBot trajectories."""
+ trajectory_instruction_data = []
+ with open(trajectory_json_path) as fp:
+ data = json.load(fp)
+
+ human_instruction_processor = TrajectoryInstructionProcessor(
+ skip_goto_rooms=skip_goto_rooms,
+ cdf_augmentation=False,
+ )
+
+ synthetic_instruction_processor = SyntheticIntructionsPreprocessor(
+ skip_goto_rooms=skip_goto_rooms,
+ use_synthetic_action_sampler=use_synthetic_action_sampler,
+ num_additional_synthetic_instructions=num_additional_synthetic_instructions,
+ )
+
+ inventory_object_processor = InventoryObjectfromTrajectory()
+ for mission_id, mission_annotations in data.items():
+ actions = inventory_object_processor(mission_annotations["actions"])
+
+ instruction_idx = 0
+ # Human annotations
+ instruction_dicts = human_instruction_processor.run(
+ human_annotations=mission_annotations["human_annotations"],
+ mission_id=mission_id,
+ actions=actions,
+ instruction_idx=instruction_idx,
+ )
+ trajectory_instruction_data.extend(instruction_dicts)
+ instruction_idx += len(instruction_dicts)
+
+ # Synthetic annotations
+ instruction_dicts = synthetic_instruction_processor.run(
+ synthetic_annotations=mission_annotations["synthetic_annotations"],
+ mission_id=mission_id,
+ actions=actions,
+ instruction_idx=instruction_idx,
+ )
+ trajectory_instruction_data.extend(instruction_dicts)
+ return trajectory_instruction_data
+
+
+def load_synthetic_trajectory_instruction_data(trajectory_json_path: Path) -> list[dict[Any, Any]]:
+ """Loads the annotations for creating synthetic (CDF) trajectories."""
+ trajectory_instruction_data = []
+ with open(trajectory_json_path) as fp:
+ data = json.load(fp)
+
+ trajectory_instruction_processor = TrajectoryInstructionProcessor(
+ skip_goto_rooms=False,
+ cdf_augmentation=True,
+ )
+ inventory_object_processor = InventoryObjectfromTrajectory()
+
+ for mission_id, mission_annotations in data.items():
+ # T.20230412__action--pickup_target-object--Apple_from-receptacle--FridgeUpper_02_from-receptacle-is-container-citxf_add_gotoFalse
+ cdf_highlevel_key = mission_id.split("__")[1].split("_add")[0]
+ decoded_key = DecodedKey.from_raw_string(cdf_highlevel_key)
+ initial_inventory = None
+ if "pickup" not in decoded_key.action:
+ initial_inventory = decoded_key.target_object
+
+ actions = inventory_object_processor(mission_annotations["actions"], initial_inventory)
+
+ instruction_idx = 0
+ instruction_dicts = trajectory_instruction_processor.run(
+ human_annotations=mission_annotations["human_annotations"],
+ mission_id=mission_id,
+ actions=actions,
+ instruction_idx=instruction_idx,
+ cdf_highlevel_key=cdf_highlevel_key,
+ )
+ trajectory_instruction_data.extend(instruction_dicts)
+ instruction_idx += len(instruction_dicts)
+ return trajectory_instruction_data
+
+
+def load_simbot_data(
+ simbot_trajectory_json_path: Optional[Path] = None,
+ synthetic_trajectory_json_path: Optional[Path] = None,
+ augmentation_images_json_path: Optional[Path] = None,
+ annotation_images_json_path: Optional[Path] = None,
+ num_additional_synthetic_instructions: int = -1,
+ skip_goto_rooms: bool = True,
+ use_synthetic_action_sampler: bool = False,
+) -> list[dict[Any, Any]]:
+ """Loads and reformats the SimBot annotations for creating Simbot instructions."""
+ instruction_data = []
+
+ # SimBot human + synthetic trajectory data
+ if simbot_trajectory_json_path is not None and simbot_trajectory_json_path.exists():
+ logger.info("Loading SimBot trajectory data")
+ instruction_data.extend(
+ load_simbot_trajectory_instruction_data(
+ trajectory_json_path=simbot_trajectory_json_path,
+ skip_goto_rooms=skip_goto_rooms,
+ use_synthetic_action_sampler=use_synthetic_action_sampler,
+ num_additional_synthetic_instructions=num_additional_synthetic_instructions,
+ )
+ )
+
+ # Synthetically generated trajectory data
+ if synthetic_trajectory_json_path is not None and synthetic_trajectory_json_path.exists():
+ logger.info("Loading synthetic CDF trajectory data")
+ instruction_data.extend(
+ load_synthetic_trajectory_instruction_data(
+ trajectory_json_path=synthetic_trajectory_json_path,
+ )
+ )
+
+ # Augmentation data
+ if augmentation_images_json_path is not None and augmentation_images_json_path.exists():
+ logger.info("Loading vision augmentation data")
+ instruction_data.extend(
+ load_simbot_augmentation_instruction_data(
+ augmentation_images_json_path=augmentation_images_json_path,
+ paraphrase_when_creating_instruction=True,
+ )
+ )
+
+ # Additional manual annotations data
+ if annotation_images_json_path is not None and annotation_images_json_path.exists():
+ logger.info("Loading manual annotation data")
+ instruction_data.extend(
+ load_simbot_augmentation_instruction_data(
+ augmentation_images_json_path=annotation_images_json_path,
+ paraphrase_when_creating_instruction=False,
+ )
+ )
+
+ return instruction_data
+
+
+def load_simbot_augmentation_instruction_data(
+ augmentation_images_json_path: Path, paraphrase_when_creating_instruction: bool = True
+) -> list[dict[Any, Any]]:
+ """Load the augmentation data."""
+ ambiguity_filter = VisionAugmentationFilter()
+ with open(augmentation_images_json_path) as fp:
+ data = json.load(fp)
+ paraphraser = InstructionParaphraser()
+ instruction_data = []
+ for _, mission_metadata in data.items():
+ if paraphrase_when_creating_instruction:
+ instruction_instance = SimBotInstructionInstance(**mission_metadata)
+ instruction_instance.vision_augmentation = True
+ ambiguous = ambiguity_filter(instruction_instance)
+ if ambiguous:
+ continue
+ (
+ instruction,
+ inventory_object_id,
+ ) = paraphraser.from_instruction_instance(instruction_instance)
+ mission_metadata["instruction"]["instruction"] = instruction
+ if inventory_object_id is not None:
+ mission_metadata["actions"][0]["inventory_object_id"] = inventory_object_id
+ mission_metadata["vision_augmentation"] = True
+ instruction_dict = create_instruction_dict(**mission_metadata)
+ instruction_data.append(instruction_dict)
+
+ return instruction_data
+
+
+def load_simbot_annotations(
+ base_dir: Path,
+ annotation_type: Literal["missions", "instructions"] = "missions",
+ train_num_additional_synthetic_instructions: int = 20000,
+ valid_num_additional_synthetic_instructions: int = -1,
+) -> dict[DatasetSplit, Any]:
+ """Loads all the SimBot mission annotation files."""
+ if annotation_type == "missions":
+ source_per_split = {
+ DatasetSplit.train: load_simbot_mission_data(base_dir.joinpath("train.json")),
+ DatasetSplit.valid: load_simbot_mission_data(base_dir.joinpath("valid.json")),
+ }
+ else:
+ source_per_split = {
+ DatasetSplit.train: load_simbot_data(
+ simbot_trajectory_json_path=base_dir.joinpath("train.json"),
+ synthetic_trajectory_json_path=base_dir.joinpath("train_trajectories.json"),
+ annotation_images_json_path=base_dir.joinpath(
+ "train_annotation_instructions_v4.2.json"
+ ),
+ augmentation_images_json_path=base_dir.joinpath(
+ "train_augmentation_images_new_classes_v6.2.json"
+ ),
+ num_additional_synthetic_instructions=train_num_additional_synthetic_instructions,
+ ),
+ DatasetSplit.valid: load_simbot_data(
+ simbot_trajectory_json_path=base_dir.joinpath("valid.json"),
+ synthetic_trajectory_json_path=base_dir.joinpath("valid_trajectories.json"),
+ annotation_images_json_path=base_dir.joinpath(
+ "valid_annotation_instructions_v4.2.json"
+ ),
+ augmentation_images_json_path=base_dir.joinpath(
+ "valid_augmentation_images_new_classes_v6.2.json"
+ ),
+ num_additional_synthetic_instructions=valid_num_additional_synthetic_instructions,
+ ),
+ }
+
+ return source_per_split
+
+
+def unwrap_instructions(db_path: Path) -> list[dict[Any, Any]]:
+ """Unwrap simbot instructions to action-level instances."""
+ unwrapped_instances = []
+ db = DatasetDb(db_path)
+ for _, _, sample in db:
+ instruction_instance = SimBotInstructionInstance.parse_raw(sample)
+ if instruction_instance.ambiguous:
+ continue
+ for action_index, action in enumerate(instruction_instance.actions):
+ instruction = instruction_instance.instruction.copy(
+ update={"actions": instruction_instance.instruction.actions[: action_index + 1]}
+ )
+
+ instruction_dict = {
+ "mission_id": instruction_instance.mission_id,
+ "annotation_id": f"{instruction_instance.annotation_id}_{action.id}",
+ "instruction_id": instruction_instance.instruction_id,
+ "instruction": instruction,
+ "actions": instruction_instance.actions[: action_index + 1],
+ "synthetic": instruction_instance.synthetic,
+ "vision_augmentation": instruction_instance.vision_augmentation,
+ "cdf_augmentation": instruction_instance.cdf_augmentation,
+ "cdf_highlevel_key": instruction_instance.cdf_highlevel_key,
+ }
+ unwrapped_instances.append(instruction_dict)
+ return unwrapped_instances
+
+
+def load_simbot_action_annotations(
+ base_dir: Path,
+ db_file_name: str,
+) -> dict[DatasetSplit, Any]:
+ """Loads all the SimBot actions."""
+ train_db = base_dir.joinpath(f"{db_file_name}_{DatasetSplit.train.name}.db")
+ valid_db = base_dir.joinpath(f"{db_file_name}_{DatasetSplit.valid.name}.db")
+ source_per_split = {
+ DatasetSplit.train: unwrap_instructions(train_db),
+ DatasetSplit.valid: unwrap_instructions(valid_db),
+ }
+
+ return source_per_split
+
+
+def filter_clarifications(db_path: Path) -> list[dict[Any, Any]]: # noqa: WPS231
+ """Filter simbot clarifications."""
+ filtered_instances = []
+ db = DatasetDb(db_path)
+ qa_filter = ClarificationFilter()
+ paraphraser = InstructionParaphraser()
+
+ for _, _, sample in db:
+ instruction_instance = SimBotInstructionInstance.parse_raw(sample)
+ if instruction_instance.synthetic:
+ # Do not use synthetic trajectory data like "pour it in the coffee maker"
+ # We should not be using instructions with pronouns for NLU because the model needs to
+ # learn to predict the missing inventory
+ if not instruction_instance.vision_augmentation:
+ continue
+ # Do not use manual annotations that require inventory but do not have it
+ action_requires_inventory = paraphraser.is_inventory_required(
+ instruction_instance.actions[0].type.lower()
+ )
+ is_inventory_required_but_missing = (
+ not instruction_instance.paraphrasable
+ and action_requires_inventory
+ and instruction_instance.actions[0].inventory_object_id is None
+ )
+ if is_inventory_required_but_missing:
+ continue
+
+ filtered_instances.append(instruction_instance.dict())
+ continue
+
+ if qa_filter.skip_instruction(instruction_instance.instruction.instruction):
+ continue
+ # Filter the clarifications
+ new_question_answers = qa_filter(instruction_instance)
+ if new_question_answers is None:
+ new_instruction = instruction_instance.instruction.copy(
+ update={"question_answers": new_question_answers}
+ )
+ new_instruction_instance = instruction_instance.copy(
+ update={"instruction": new_instruction}
+ )
+ filtered_instances.append(new_instruction_instance.dict())
+ else:
+ for qa_pair in new_question_answers:
+ new_instruction = instruction_instance.instruction.copy(
+ update={"question_answers": [qa_pair]}
+ )
+ new_instruction_instance = instruction_instance.copy(
+ update={"instruction": new_instruction}
+ )
+ filtered_instances.append(new_instruction_instance.dict())
+ return filtered_instances
+
+
+def load_simbot_clarification_annotations(
+ base_dir: Path,
+ db_file_name: str,
+) -> dict[DatasetSplit, Any]:
+ """Loads all the SimBot clarifications."""
+ train_db = base_dir.joinpath(f"{db_file_name}_{DatasetSplit.train.name}.db")
+ valid_db = base_dir.joinpath(f"{db_file_name}_{DatasetSplit.valid.name}.db")
+ source_per_split = {
+ DatasetSplit.train: filter_clarifications(train_db),
+ DatasetSplit.valid: filter_clarifications(valid_db),
+ }
+ return source_per_split
+
+
+def generate_planner_data_from_mission_file(filepath: Path) -> list[dict[Any, Any]]:
+ """Loads and reformats the SimBot annotations for creating SimBot planner data."""
+ with open(filepath) as fp:
+ data = json.load(fp)
+
+ restructured_data = []
+
+ for mission_id, mission_annotations in data.items():
+ human_annotations = mission_annotations["human_annotations"]
+ task_description = mission_annotations["CDF"]["task_description"]
+
+ for h_annotation in human_annotations:
+ restructured_data.append(
+ {
+ "mission_id": mission_id,
+ "task_description": task_description,
+ "instructions": [
+ instruction["instruction"] for instruction in h_annotation["instructions"]
+ ],
+ }
+ )
+
+ return restructured_data
+
+
+def generate_planner_data_from_alfred(alfred_path: Path) -> list[dict[Any, Any]]:
+ """Loads and reformats the SimBot annotations for creating Simbot planner data from ALFRED."""
+ all_file_paths = get_all_file_paths(alfred_path.iterdir())
+ restructured_data = []
+
+ for file_path in all_file_paths:
+ with open(file_path) as in_file:
+ metadata_str = json.load(in_file)
+ metadata = AlfredMetadata.parse_obj(metadata_str)
+
+ for ann in metadata.turk_annotations["anns"]:
+ restructured_data.append(
+ {
+ "mission_id": metadata.task_id,
+ "task_description": ann.task_desc,
+ "instructions": ann.high_descs,
+ }
+ )
+
+ return restructured_data
+
+
+def load_simbot_planner_annotations(
+ simbot_base_dir: Path, alfred_data_dir: Path
+) -> dict[DatasetSplit, Any]:
+ """Generates raw data for the high-level planner to be used for SimBot."""
+ train_data = generate_planner_data_from_mission_file(
+ simbot_base_dir.joinpath("train.json")
+ ) + generate_planner_data_from_alfred(alfred_data_dir.joinpath("train"))
+
+ valid_data = (
+ generate_planner_data_from_mission_file(simbot_base_dir.joinpath("valid.json"))
+ + generate_planner_data_from_alfred(alfred_data_dir.joinpath("valid_seen"))
+ + generate_planner_data_from_alfred(alfred_data_dir.joinpath("valid_unseen"))
+ )
+
+ source_per_split = {DatasetSplit.train: train_data, DatasetSplit.valid: valid_data}
+
+ return source_per_split
diff --git a/src/emma_datasets/datamodels/datasets/teach.py b/src/emma_datasets/datamodels/datasets/teach.py
new file mode 100644
index 0000000..0492555
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/teach.py
@@ -0,0 +1,299 @@
+from functools import lru_cache
+from pathlib import Path
+from typing import Any, Literal, Optional, cast
+
+from pydantic import BaseModel, Field, PrivateAttr
+
+from emma_datasets.common import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import MediaType
+from emma_datasets.io import read_json
+
+
+settings = Settings()
+
+TEACH_FRAME_SUFFIX = "jpeg"
+TEACH_FRAME_NAME_TEMPLATE = "{agent_name}.frame.{time_start}.{suffix}"
+
+
+@lru_cache(maxsize=1)
+def get_all_action_names() -> set[str]:
+ """Get a list of all possible action names that are possible for TEACh."""
+ default_definitions_path = settings.paths.constants.joinpath(
+ "teach", "default_definitions.json"
+ )
+ definitions_dict = read_json(default_definitions_path)
+ action_definitions_list: list[dict[str, Any]] = definitions_dict["definitions"]["actions"]
+
+ all_action_names = {action["action_name"] for action in action_definitions_list}
+ return all_action_names
+
+
+@lru_cache(maxsize=1)
+def get_action_idx_to_action_name_map() -> dict[int, str]:
+ """Load the mapping from the constants file and cache the results."""
+ action_idx_to_action_name_path = settings.paths.constants.joinpath(
+ "teach", "action_idx_to_action_name.json"
+ )
+ action_idx_to_action_name: dict[str, str] = read_json(action_idx_to_action_name_path)
+
+ return {
+ int(action_idx): action_name
+ for action_idx, action_name in action_idx_to_action_name.items()
+ }
+
+
+@lru_cache(maxsize=1)
+def get_agent_id_to_name_map() -> dict[int, str]:
+ """Load and process the definitions file and cache the results."""
+ default_definitions_path = settings.paths.constants.joinpath(
+ "teach", "default_definitions.json"
+ )
+
+ definitions_dict = read_json(default_definitions_path)
+ agent_definitions_list: list[dict[str, Any]] = definitions_dict["definitions"]["agents"]
+
+ agent_id_to_name_map: dict[int, str] = {
+ agent["agent_id"]: agent["agent_name"] for agent in agent_definitions_list
+ }
+
+ return agent_id_to_name_map
+
+
+class TeachDriverAction(BaseModel):
+ """Driver Action for TEACh."""
+
+ action_id: int
+ action_idx: int
+ obj_interaction_action: int
+ action_name: str
+ time_start: float
+ oid: Optional[str] = None
+ x: Optional[float]
+ y: Optional[float]
+
+ @property
+ def object_name(self) -> Optional[str]:
+ """Get the object name that the agent is interacting with.
+
+ The `oid` is in the form `CoffeeMachine|-02.94|+00.93|+03.61`, and we only want the first
+ part of it.
+ """
+ if self.oid is None:
+ return None
+
+ return self.oid.split("|")[0]
+
+
+class ExtendedTeachDriverAction(TeachDriverAction):
+ """Extended version of the driver action with utterance."""
+
+ utterance: Optional[str] = None
+
+
+class TeachInteraction(BaseModel):
+ """Model for a single interaction within TEACh."""
+
+ agent_id: int = Field(..., ge=0, le=1)
+ action_id: int
+ action_idx: int
+ time_start: float = Field(..., ge=0)
+ duration: int
+ success: Optional[int] = Field(..., ge=0, le=1)
+ query: Optional[str] = None
+ obj_interaction_action: int
+ utterance: Optional[str] = None
+ corrected_utterance: Optional[str] = None
+ is_corrected: Optional[int] = None
+ pose_delta: Optional[list[float]] = None
+ pose: Optional[list[float]] = None
+ x: Optional[float] = None
+ y: Optional[float] = None
+ start_x: Optional[float] = None
+ start_y: Optional[float] = None
+ end_x: Optional[float] = None
+ end_y: Optional[float] = None
+ oid: Optional[str] = None
+
+ @property
+ def agent_name(self) -> str:
+ """Get the name of the agent."""
+ agent_id_to_name_map = get_agent_id_to_name_map()
+ agent_name = agent_id_to_name_map[self.agent_id].lower()
+ return agent_name
+
+ @property
+ def action_name(self) -> str:
+ """Convert the action idx to the action name."""
+ action_idx_to_name_map = get_action_idx_to_action_name_map()
+ return action_idx_to_name_map[self.action_idx]
+
+ @property
+ def frame_path(self) -> str:
+ """Convert the interaction into the path to the image frame."""
+ return TEACH_FRAME_NAME_TEMPLATE.format(
+ agent_name=self.agent_name, time_start=self.time_start, suffix=TEACH_FRAME_SUFFIX
+ )
+
+ @property
+ def features_path(self) -> str:
+ """Convert the interaction into a path to the features file."""
+ return TEACH_FRAME_NAME_TEMPLATE.format(
+ agent_name=self.agent_name, time_start=self.time_start, suffix="pt"
+ )
+
+ @property
+ def object_name(self) -> Optional[str]:
+ """Get the object name that the agent is interacting with.
+
+ The `oid` is in the form `CoffeeMachine|-02.94|+00.93|+03.61`, and we only want the first
+ part of it.
+ """
+ if self.oid is None:
+ return None
+
+ return self.oid.split("|")[0]
+
+
+class TeachUtterance(BaseModel):
+ """Model for an utterance from the dialogue history.
+
+ This is used as an easy way to validate the inputs for the dialogue history attributes.
+ """
+
+ __root__: list[str] = Field(..., min_items=2, max_items=2)
+
+ @property
+ def speaker(self) -> Literal["Driver", "Commander"]:
+ """Get the speaker for the utterance."""
+ speaker = self.__root__[0]
+
+ if speaker in {"Driver", "Commander"}:
+ return cast(Literal["Driver", "Commander"], speaker)
+
+ raise ValueError("Value for speaker is not either 'Driver' or 'Commander'.")
+
+ @property
+ def utterance(self) -> str:
+ """Get the utterance itself."""
+ return self.__root__[1]
+
+
+class TeachEdhInstance(BaseInstance):
+ """TEACh EDH Instance."""
+
+ game_id: str
+ instance_id: str
+ pred_start_idx: int
+
+ # Dialogue
+ dialog_history: list[TeachUtterance]
+ dialog_history_cleaned: list[TeachUtterance]
+
+ # Images
+ driver_image_history: list[str]
+ driver_images_future: list[str]
+
+ # Interactions
+ interactions: list[TeachInteraction]
+
+ # Actions
+ driver_action_history: list[TeachDriverAction]
+ driver_actions_future: list[TeachDriverAction]
+
+ # Subgoals
+ history_subgoals: list[str]
+ future_subgoals: list[str]
+
+ # State
+ expected_init_goal_conditions_satisfied: int
+ expected_init_goal_conditions_total: int
+
+ init_state_diff: Any
+ final_state_diff: Any
+ state_changes: Any
+
+ _features_path: Path = PrivateAttr()
+ _future_features_path: Path = PrivateAttr()
+
+ def __init__(self, **data: Any) -> None:
+ super().__init__(**data)
+
+ self._features_path = settings.paths.teach_edh_features.joinpath( # noqa: WPS601
+ f"{self.instance_id}.history.pt"
+ )
+ self._future_features_path = settings.paths.teach_edh_features.joinpath( # noqa: WPS601
+ f"{self.instance_id}.future.pt"
+ )
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.video
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance."""
+ return self._features_path
+
+ @property
+ def future_features_path(self) -> Path:
+ """Get the path to the features from future driver actions for this instance."""
+ return self._future_features_path
+
+ @property
+ def extended_driver_action_history(self) -> list[ExtendedTeachDriverAction]:
+ """Get extended driver action history using the cleaned dialog history.
+
+ We need to have a counter of every `Text` action that has happened to be sure to get the
+ correct utterance for the action.
+ """
+ action_history: list[ExtendedTeachDriverAction] = []
+ utterance_counter = 0
+
+ for action in self.driver_action_history:
+ action_dict = action.dict()
+
+ if action.action_id == 100:
+ action_dict["utterance"] = self._driver_dialog_history[utterance_counter]
+ utterance_counter += 1
+
+ action_history.append(ExtendedTeachDriverAction(**action_dict))
+
+ return action_history
+
+ @property
+ def interaction_history(self) -> list[TeachInteraction]:
+ """Get all interactions that happened in the past."""
+ return [
+ interaction
+ for interaction in self.interactions
+ if not self._is_interaction_in_future(interaction)
+ ]
+
+ @property
+ def interactions_future(self) -> list[TeachInteraction]:
+ """Get all interactions which happened 'in the future'."""
+ return [
+ interaction
+ for interaction in self.interactions
+ if not self._is_interaction_in_future(interaction)
+ ]
+
+ def _is_interaction_in_future(self, interaction: TeachInteraction) -> bool:
+ """Returns True if the given interaction is 'in the future'."""
+ return interaction.time_start > self._last_action_time
+
+ @property
+ def _last_action_time(self) -> float:
+ """Get the last time, after which all interactions will be be in the future."""
+ return self.driver_action_history[-1].time_start
+
+ @property
+ def _driver_dialog_history(self) -> list[str]:
+ """Get the dialog history of only the driver."""
+ return [
+ utterance.utterance
+ for utterance in self.dialog_history
+ if utterance.speaker == "Driver"
+ ]
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/__init__.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/ambiguous_data.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/ambiguous_data.py
new file mode 100644
index 0000000..9931c71
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/ambiguous_data.py
@@ -0,0 +1,431 @@
+from copy import deepcopy
+from pathlib import Path
+from typing import Any, Optional
+
+import torch
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.constants.simbot.simbot import get_arena_definitions, get_class_thresholds
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ ClarificationTargetExtractor,
+ get_object_label_from_object_id,
+ get_object_readable_name_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.object_features_processing import (
+ ObjectClassDecoder,
+ compute_bbox_area,
+ compute_bbox_center_coords,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ SimBotAction,
+ SimBotClarificationTypes,
+ SimBotInstructionInstance,
+ SimBotQA,
+)
+
+
+settings = Settings()
+
+
+class AmbiguityProcessor:
+ """Preprocess ambiguous instructions.
+
+ An instruction is considered ambiguous if more than one objects of the object class have been
+ detected in the same frame or across frames.
+ """
+
+ def __init__(self) -> None:
+ self.object_decoder = ObjectClassDecoder()
+ self._class_thresholds = get_class_thresholds()
+ self._default_min_area = 250
+ self._min_center_coord = 110
+ self._max_center_coord = 180
+ self._area_percentage = 0.8
+ self._object_assets_to_names = get_arena_definitions()["asset_to_label"]
+
+ def ambiguous_across_frames(
+ self,
+ frame_index: int,
+ features_path: Path,
+ action: dict[str, Any],
+ target_class_label: str,
+ ) -> bool:
+ """Check if there are multimple instances of the target object across frames."""
+ ambiguous_across_frames = False
+ for other_frame_index, _ in enumerate(action["colorImages"]):
+ if frame_index == other_frame_index:
+ continue
+ candidate_objects = self.object_decoder.get_candidate_object_in_frame(
+ features_path=features_path,
+ frame_index=other_frame_index,
+ target_class_label=target_class_label,
+ )
+ if candidate_objects:
+ ambiguous_across_frames = True
+ break
+ return ambiguous_across_frames
+
+ def ambiguous_in_frame(
+ self,
+ frame_index: int,
+ features_path: Path,
+ target_class_label: str,
+ ) -> bool:
+ """Check if there are multimple instances of the target object in the frame."""
+ candidate_objects = self.object_decoder.get_candidate_object_in_frame(
+ features_path=features_path,
+ frame_index=frame_index,
+ target_class_label=target_class_label,
+ )
+ if len(candidate_objects) > 1:
+ return self.check_no_salient_object(
+ features_path=features_path,
+ frame_index=frame_index,
+ candidate_objects=candidate_objects,
+ target_class_label=target_class_label,
+ )
+ return False
+
+ def not_in_frame(self, frame_index: int, features_path: Path, target_class_label: str) -> bool:
+ """Check if there is no target object in the frame."""
+ candidate_objects = self.object_decoder.get_candidate_object_in_frame(
+ frame_index=frame_index,
+ features_path=features_path,
+ target_class_label=target_class_label,
+ )
+ return len(candidate_objects) == 0 # noqa: WPS507
+
+ def target_same_as_readable_name(self, action: SimBotAction, target_class_label: str) -> bool:
+ """Check if the target and readable names are the same."""
+ _, _, readable_name = self.object_decoder.get_target_object_and_name(action.dict())
+ return target_class_label == readable_name
+
+ def holding_object(self, action: SimBotAction, target_class_label: str) -> bool:
+ """Check if the agent is holding the target object."""
+ if action.inventory_object_id is None:
+ return False
+ holding_object = get_object_label_from_object_id(
+ action.inventory_object_id,
+ self._object_assets_to_names,
+ )
+ if target_class_label == "Slice":
+ return holding_object in {"Apple", "Pie", "Cake", "Bread"}
+ return holding_object == target_class_label
+
+ def check_no_salient_object(
+ self,
+ features_path: Path,
+ frame_index: int,
+ candidate_objects: list[int],
+ target_class_label: str,
+ ) -> bool:
+ """No salient object means that the instruction is still ambiguous."""
+ features = self.object_decoder.load_features(features_path, frame_index=frame_index)
+ if not features:
+ return True
+ # Filter small bboxes based on area
+ candidate_bboxes = self._filter_bboxes_based_on_area(
+ [features["bbox_coords"][idx] for idx in candidate_objects],
+ target_class_label=target_class_label,
+ )
+ if len(candidate_bboxes) == 1:
+ return False
+ # Now try to determine saliency
+ candidate_areas = [compute_bbox_area(bbox) for bbox in candidate_bboxes]
+ candidate_xcenter = [compute_bbox_center_coords(bbox)[0] for bbox in candidate_bboxes]
+ no_salient_bbox = True
+ for index, (area, xcenter) in enumerate(zip(candidate_areas, candidate_xcenter)):
+ # An object is salient if it's centered in the image
+ cond1 = self._min_center_coord <= xcenter <= self._max_center_coord
+ if cond1:
+ # An object is salient if it is relatively large compared to other candidate objects
+ area_comparison = [
+ area >= self._area_percentage * other_area for other_area in candidate_areas
+ ]
+ else:
+ # The area is much bigger than other candidates
+ area_comparison = [
+ area >= 3 * other_area
+ for other_index, other_area in enumerate(candidate_areas)
+ if other_index != index
+ ]
+ cond2 = all(area_comparison)
+ if cond2:
+ return False
+ return no_salient_bbox
+
+ def _filter_bboxes_based_on_area(
+ self,
+ candidate_bboxes: list[torch.Tensor],
+ target_class_label: str,
+ ) -> list[torch.Tensor]:
+ """Return relatively large."""
+ filtered_bboxes = []
+ thresholds = self._class_thresholds.get(target_class_label, None)
+ if thresholds is None:
+ threshold = self._default_min_area
+ else:
+ threshold = min(thresholds[0] * 5, self._default_min_area) # type: ignore[assignment]
+ for bbox in candidate_bboxes:
+ if compute_bbox_area(bbox) > threshold:
+ filtered_bboxes.append(bbox)
+ return filtered_bboxes
+
+
+class AmbiguousGotoProcessor(AmbiguityProcessor):
+ """Preprocess ambiguous low-level Goto-object instructions.
+
+ An instruction is considered ambiguous if more than one objects of the object class have been
+ detected. If multiple objects are present in the same frame, we try to make the instruction
+ unambiguous by using attributes associated with the asset name.
+ """
+
+ def __init__(self) -> None:
+ super().__init__()
+ self.object_decoder = ObjectClassDecoder()
+
+ def __call__(
+ self, instruction_dict: dict[str, Any], mission_id: str, action: dict[str, Any]
+ ) -> list[dict[str, Any]]:
+ """Annotate an instruction."""
+ if action["type"] != "Goto" or "officeRoom" in action["goto"]["object"]:
+ return [instruction_dict]
+ (
+ target_object,
+ target_class_label,
+ target_readable_name,
+ ) = self.object_decoder.get_target_object_and_name(action)
+
+ frame_index = action["goto"]["object"]["colorImageIndex"]
+
+ new_intruction_dict = None
+ action_id = action["id"]
+ features_path = settings.paths.simbot_features.joinpath(
+ f"{mission_id}_action{action_id}.pt"
+ )
+ ambiguous_in_frame = self.ambiguous_in_frame(
+ frame_index=frame_index,
+ features_path=features_path,
+ target_class_label=target_class_label,
+ )
+
+ if ambiguous_in_frame:
+ new_intruction_dict = self._try_to_fix_ambiguous_in_frame(
+ instruction_dict=instruction_dict,
+ target_object=target_object,
+ target_readable_name=target_readable_name,
+ )
+ instruction_dict["ambiguous"] = True
+ instruction_dict["paraphrasable"] = True
+
+ if new_intruction_dict is not None:
+ return [instruction_dict, new_intruction_dict]
+
+ return [instruction_dict]
+
+ def _try_to_fix_ambiguous_in_frame(
+ self, instruction_dict: dict[str, Any], target_object: str, target_readable_name: str
+ ) -> Optional[dict[str, Any]]:
+ """Use attributes from the target object asset name to make the instruction unambiguous."""
+ if target_object != target_readable_name:
+ return None
+
+ new_instruction_dict = deepcopy(instruction_dict)
+ new_instruction_dict["instruction"][
+ "instruction"
+ ] = f"go to the {target_readable_name.lower()}"
+ new_instruction_dict["ambiguous"] = False
+ new_instruction_dict[
+ "annotation_id"
+ ] = f"{new_instruction_dict['annotation_id']}_one_match"
+ return new_instruction_dict
+
+
+class ClarificationFilter:
+ """Filter clarification questions.
+
+ Keep only:
+ 1. disambiguation questions when there is ambiguity in the front frame.
+ 2. location questions when the target object is not in the front frame.
+ """
+
+ def __init__(self) -> None:
+ self.ambiguity_processor = AmbiguityProcessor()
+ self.clarification_target_extractor = ClarificationTargetExtractor()
+ self._skip_instruction_word_list = [
+ "locate",
+ "find",
+ "search",
+ "look for",
+ "trace",
+ "seek",
+ ]
+ self._disambiguation_keyword_list = ["blue", "red", "green", "with"]
+ self._assets_to_labels = get_arena_definitions()["asset_to_label"]
+
+ def __call__(
+ self, instruction_instance: SimBotInstructionInstance
+ ) -> Optional[list[SimBotQA]]:
+ """Filter the questions."""
+ question_answers = instruction_instance.instruction.necessary_question_answers
+ if not question_answers:
+ return None
+ new_question_answers = []
+ for qa_pair in question_answers:
+ keep_qa_pair = self._keep_qa_pair(
+ qa_pair=qa_pair,
+ features_path=instruction_instance.features_path[0],
+ action=instruction_instance.actions[0],
+ instruction=instruction_instance.instruction.instruction,
+ )
+ if keep_qa_pair:
+ new_question_answers.append(qa_pair)
+
+ if not new_question_answers:
+ return None
+ return new_question_answers
+
+ def skip_instruction(self, instruction: str) -> bool:
+ """Skip human instructions that can be confused with Search instructions."""
+ instruction = instruction.lower()
+ for skip_word in self._skip_instruction_word_list:
+ if skip_word in instruction:
+ return True
+
+ return False
+
+ def _keep_qa_pair(
+ self,
+ qa_pair: SimBotQA,
+ action: SimBotAction,
+ instruction: str,
+ features_path: Path,
+ ) -> bool:
+ keep_qa_pair = False
+ # Fist, check the question type
+ if not self._keeping_question_type(qa_pair):
+ return keep_qa_pair
+
+ # Convert the question target to an object detector label
+ target_object = self.clarification_target_extractor.normalize_target(
+ qa_pair.question_target, instruction
+ )
+ if target_object is None:
+ return True
+ # Second, check if the agent is holding the target object
+ holding_clarification_target = self.ambiguity_processor.holding_object(
+ action, target_class_label=target_object
+ )
+ if holding_clarification_target:
+ return keep_qa_pair
+
+ # Finally, check conditions based on the question type
+ if qa_pair.question_type == SimBotClarificationTypes.disambiguation:
+ keep_qa_pair = self._filter_disambiguation_questions(
+ features_path=features_path,
+ action=action,
+ instruction=instruction,
+ target_object=target_object,
+ )
+ elif qa_pair.question_type == SimBotClarificationTypes.location:
+ keep_qa_pair = self._filter_location_questions(
+ features_path=features_path,
+ action=action,
+ instruction=instruction,
+ target_object=target_object,
+ )
+
+ if qa_pair.question_target != "desk":
+ qa_pair.question_target = target_object.lower()
+ return keep_qa_pair
+
+ def _keeping_question_type(self, qa_pair: SimBotQA) -> bool:
+ return qa_pair.question_type in {
+ SimBotClarificationTypes.location,
+ SimBotClarificationTypes.disambiguation,
+ }
+
+ def _first_target_is_unique(self, action: SimBotAction, features_path: Path) -> bool:
+ """Skip instances when there is one instance matching the target."""
+ target_object_type = action.get_action_data["object"]["id"]
+ target_object = get_object_label_from_object_id(target_object_type, self._assets_to_labels)
+ ambiguous_target = self.ambiguity_processor.ambiguous_in_frame(
+ frame_index=action.get_action_data["object"]["colorImageIndex"],
+ features_path=features_path,
+ target_class_label=target_object,
+ )
+ return not ambiguous_target
+
+ def _check_instruction_keywords(self, instruction: str) -> bool:
+ """Check for keywords that make the instruction probably not ambiguous."""
+ for keyword in self._disambiguation_keyword_list:
+ if keyword in instruction:
+ return True
+ return False
+
+ def _filter_disambiguation_questions(
+ self, features_path: Path, action: SimBotAction, instruction: str, target_object: str
+ ) -> bool:
+ """Filter disambiguation questions."""
+ keyword_exists = self._check_instruction_keywords(instruction)
+ if keyword_exists:
+ return False
+ if self._first_target_is_unique(action, features_path):
+ return False
+ return self.ambiguity_processor.ambiguous_in_frame(
+ frame_index=action.get_action_data["object"]["colorImageIndex"],
+ features_path=features_path,
+ target_class_label=target_object,
+ )
+
+ def _filter_location_questions(
+ self, features_path: Path, action: SimBotAction, instruction: str, target_object: str
+ ) -> bool:
+ """Filter location questions."""
+ target_same_as_readable_name = self.ambiguity_processor.target_same_as_readable_name(
+ action=action,
+ target_class_label=target_object,
+ )
+ target_not_in_frame = self.ambiguity_processor.not_in_frame(
+ frame_index=0,
+ features_path=features_path,
+ target_class_label=target_object,
+ )
+ return target_same_as_readable_name and target_not_in_frame
+
+
+class VisionAugmentationFilter:
+ """Filter vision augmentation instances.
+
+ Remove ambiguous instructions.
+ """
+
+ def __init__(self) -> None:
+ self.ambiguity_processor = AmbiguityProcessor()
+ arena_definitions = get_arena_definitions()
+ self._assets_to_labels = arena_definitions["asset_to_label"]
+ self._special_names = arena_definitions["special_asset_to_readable_name"]
+
+ def __call__(
+ self,
+ instruction_instance: SimBotInstructionInstance,
+ ) -> bool:
+ """Filter the vision augmentation data."""
+ action = instruction_instance.actions[0]
+ if action.type == "Search":
+ search_object_metadata = action.search.get("selected_object", None) # type: ignore[attr-defined]
+ if search_object_metadata is None:
+ return False
+ target_object_id = search_object_metadata["id"]
+ else:
+ target_object_id = action.get_action_data["object"]["id"]
+ # Get the readable name of the object
+ target_object = get_object_readable_name_from_object_id(
+ target_object_id, self._assets_to_labels, self._special_names
+ )
+
+ return self.ambiguity_processor.ambiguous_in_frame(
+ features_path=instruction_instance.features_path[0],
+ frame_index=action.get_action_data["object"]["colorImageIndex"],
+ target_class_label=target_object,
+ )
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/data_augmentations.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/data_augmentations.py
new file mode 100644
index 0000000..89c7d87
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/data_augmentations.py
@@ -0,0 +1,56 @@
+import random
+from typing import Any, Optional
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.constants.simbot.simbot import get_low_level_action_templates
+
+
+settings = Settings()
+
+
+class SyntheticLowLevelActionSampler:
+ """Create synthetic examples of low level actions."""
+
+ def __init__(self) -> None:
+ self._low_level_action_templates = get_low_level_action_templates()
+ self._low_level_actions = list(self._low_level_action_templates.keys())
+
+ def __call__(
+ self,
+ mission_id: str,
+ annotation_id: str,
+ instruction_idx: int,
+ original_action: Optional[dict[str, Any]] = None,
+ ) -> dict[str, Any]:
+ """Sample a low level action and an instruction template."""
+ if original_action is None:
+ raise AssertionError("Need the original actions")
+ low_level_action = random.choice(self._low_level_actions)
+ low_level_action_template = random.choice(
+ self._low_level_action_templates[low_level_action]["templates"]
+ )
+ action_type = self._low_level_action_templates[low_level_action]["type"]
+ action_id = original_action["id"]
+ color_images = original_action["colorImages"]
+ payload = {"direction": self._low_level_action_templates[low_level_action]["direction"]}
+
+ synthetic_instruction = {
+ "instruction": low_level_action_template,
+ "actions": [action_id],
+ }
+ synthetic_action = {
+ "id": action_id,
+ "type": action_type,
+ action_type.lower(): payload,
+ "colorImages": color_images,
+ "final": True,
+ }
+ instruction_dict = {
+ "instruction": synthetic_instruction,
+ "actions": [synthetic_action],
+ "mission_id": mission_id,
+ "annotation_id": annotation_id,
+ "instruction_id": str(instruction_idx),
+ "synthetic": True,
+ }
+ return instruction_dict
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/high_level_key_processor.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/high_level_key_processor.py
new file mode 100644
index 0000000..8bb7ef2
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/high_level_key_processor.py
@@ -0,0 +1,297 @@
+import random
+import re
+from typing import Any, Optional
+
+from pydantic import BaseModel, Field, validator
+
+from emma_datasets.constants.simbot.high_level_templates import OBJECT_META_TEMPLATE
+from emma_datasets.constants.simbot.simbot import get_arena_definitions, get_object_synonym
+
+
+def get_previous_key(deconstructed_highlevel_key: str) -> str:
+ """Get the previous decoded key after deconstructing a high level key.
+
+ Used to populate the DecodedKey basemodel.
+ """
+ if "_" in deconstructed_highlevel_key:
+ return deconstructed_highlevel_key.split("_")[-1:][0]
+ return deconstructed_highlevel_key
+
+
+def parse_deconstructed_highlevel_key_parts( # noqa: WPS231
+ decoded_key_values: dict[str, Any], part: str, parts: list[str], part_idx: int
+) -> dict[str, Any]:
+ """Parse a part of the deconstructed highlevel key.
+
+ Used to populate the DecodedKey basemodel.
+ """
+ # If the part does not contain any dashes then this is a key on its own
+ # Initialize it to true
+ if "_" not in part and part_idx != len(parts) - 1:
+ decoded_key_values[part] = True
+
+ # If the part does contain dashes then it contains a value for the previous key and the name of the current key
+ elif 1 <= part_idx < len(parts) - 1:
+ split_part_by_value = part.split("_")
+ decoded_current_key = split_part_by_value[-1]
+ decoded_previous_key_value = "_".join(split_part_by_value[:-1])
+
+ previous_key = get_previous_key(parts[part_idx - 1])
+
+ decoded_key_values[previous_key] = decoded_previous_key_value
+ decoded_key_values[decoded_current_key] = True
+
+ elif part_idx == len(parts) - 1:
+ if "_" not in part:
+ if "-" in part:
+ decoded_key_values[part] = True
+ else:
+ previous_key = get_previous_key(parts[part_idx - 1])
+ decoded_key_values[previous_key] = part
+ else:
+ previous_key = get_previous_key(parts[part_idx - 1])
+ # If the last part in the highlevel key has also a decode key include it
+ if "-" in part:
+ split_part_by_value = part.split("_")
+ decoded_current_key = split_part_by_value[-1]
+ decoded_key_values[previous_key] = "_".join(split_part_by_value[:-1])
+ decoded_key_values[decoded_current_key] = True
+ # Else the last part should be the value of the previous key
+ else:
+ decoded_key_values[previous_key] = part
+ return decoded_key_values
+
+
+class DecodedKey(BaseModel):
+ """Decoded key base model."""
+
+ raw_high_level_key: str
+
+ action: str
+
+ interaction_object: Optional[str] = Field(default=None, alias="interaction-object")
+ target_object: Optional[str] = Field(default=None, alias="target-object")
+ target_object_color: Optional[str] = Field(default=None, alias="target-object-color")
+ target_object_is_ambiguous: Optional[bool] = Field(
+ default=None, alias="target-object-is-ambiguous"
+ )
+
+ stacked_object: Optional[str] = Field(default=None, alias="stacked-object")
+ stacked_object_color: Optional[str] = Field(default=None, alias="stacked-object-color")
+
+ from_receptacle: Optional[str] = Field(default=None, alias="from-receptacle")
+ from_receptacle_color: Optional[str] = Field(default=None, alias="from-receptacle-color")
+ from_receptacle_is_container: Optional[bool] = Field(
+ default=None, alias="from-receptacle-is-container"
+ )
+ # This is populated if from_receptacle is provided and from_receptacle_is_container == True
+ from_container: Optional[str] = Field(default=None, alias="from-container")
+
+ to_receptacle: Optional[str] = Field(default=None, alias="to-receptacle")
+ to_receptacle_color: Optional[str] = Field(default=None, alias="to-receptacle-color")
+ to_receptacle_is_container: Optional[bool] = Field(
+ default=None, alias="to-receptacle-is-container"
+ )
+
+ # This is populated if to_receptacle is provided and to_receptacle_is_container == True
+ to_container: Optional[str] = Field(default=None, alias="to-container")
+
+ converted_object: Optional[str] = Field(default=None, alias="converted-object")
+ converted_object_color: Optional[str] = Field(default=None, alias="converted-object-color")
+
+ @validator("interaction_object", "target_object", "converted_object", "stacked_object")
+ @classmethod
+ def validate_objects_in_key(cls, field_value: str) -> str:
+ """Verify that the object fields are defined in the arena."""
+ arena_definitions = get_arena_definitions()
+ assets_to_labels = arena_definitions["asset_to_label"]
+ if field_value not in assets_to_labels:
+ raise AssertionError(
+ f"Expecting objects to be within the arena definitions, but found {field_value}"
+ )
+ return field_value
+
+ @classmethod
+ def get_field_names(cls, alias: bool = False) -> list[str]:
+ """Get the field names in a list of strings."""
+ return list(
+ cls.schema(by_alias=alias).get("properties").keys() # type:ignore[union-attr]
+ )
+
+ @classmethod
+ def from_raw_string(cls, highlevel_key: str) -> "DecodedKey":
+ """Parse a raw highlevel key."""
+ decoded_key_values: dict[str, Any] = {"raw_high_level_key": highlevel_key}
+
+ highlevel_key = "-".join(highlevel_key.split("-")[:-1])
+
+ if "target-object-is-ambiguous" in highlevel_key:
+ decoded_key_values["target-object-is-ambiguous"] = True
+ highlevel_key = highlevel_key.replace("target-object-is-ambiguous", "")
+ highlevel_key = highlevel_key.replace("__", "_")
+
+ parts = highlevel_key.split("--")
+ for part_idx, part in enumerate(parts):
+ decoded_key_values = parse_deconstructed_highlevel_key_parts(
+ decoded_key_values=decoded_key_values,
+ part=part,
+ parts=parts,
+ part_idx=part_idx,
+ )
+
+ can_replace_from_reptacle_from_container = (
+ "from-receptacle" in decoded_key_values
+ and decoded_key_values["from-receptacle"] is not None
+ and "from-receptacle-is-container" in decoded_key_values
+ and decoded_key_values["from-receptacle-is-container"]
+ )
+ if can_replace_from_reptacle_from_container:
+ decoded_key_values["from-container"] = decoded_key_values["from-receptacle"]
+ decoded_key_values["from-receptacle"] = None
+
+ can_replace_to_reptacle_to_container = (
+ "to-receptacle" in decoded_key_values
+ and decoded_key_values["to-receptacle"] is not None
+ and "to-receptacle-is-container" in decoded_key_values
+ and decoded_key_values["to-receptacle-is-container"]
+ )
+ if can_replace_to_reptacle_to_container:
+ decoded_key_values["to-container"] = decoded_key_values["to-receptacle"]
+ decoded_key_values["to-receptacle"] = None
+ return cls(**decoded_key_values)
+
+ def field_has_object_id(self, field: str) -> bool:
+ """Check whether a field contains an object id that should be mapped to a synonym."""
+ return field in {
+ "interaction_object",
+ "target_object",
+ "from_receptacle",
+ "to_receptacle",
+ "converted_object",
+ "to_container",
+ "from_container",
+ "stacked_object",
+ }
+
+ def get_interacted_objects(self) -> list[str]:
+ """Retun the list of objects the agent interacted with during the session."""
+ objects_in_key = [
+ self.interaction_object,
+ self.target_object,
+ self.from_receptacle,
+ self.to_receptacle,
+ self.from_container,
+ self.to_container,
+ self.converted_object,
+ ]
+ interacted_objects = []
+ for object_in_key in objects_in_key:
+ if object_in_key is not None:
+ interacted_objects.append(object_in_key)
+ return interacted_objects
+
+
+class HighLevelKey(BaseModel):
+ """High level key base model."""
+
+ decoded_key: DecodedKey
+ high_level_description: str
+ paraphrases: list[str]
+
+
+class HighLevelKeyProcessor:
+ """Generate descriptions and paraphrases for a given high level key."""
+
+ def __init__(
+ self,
+ prefix_inclusion_probability: float = 0.2,
+ paraphrases_per_template: int = 1,
+ ):
+ self.prefix_inclusion_probability = prefix_inclusion_probability
+ self.paraphrases_per_template = paraphrases_per_template
+ self.decoded_key_fields = DecodedKey.get_field_names(alias=False)
+
+ self._prefixes = [
+ "i would like to",
+ "i need to",
+ "i need you to",
+ "i am telling you to",
+ "you should",
+ "we need to",
+ "let's",
+ "can you",
+ "could you",
+ "okay",
+ "okay now",
+ "now",
+ "please",
+ ]
+
+ def __call__(self, highlevel_key: str) -> HighLevelKey:
+ """Generate description, paraphrases and plans from a given high-levle key."""
+ decoded_key = DecodedKey.from_raw_string(highlevel_key=highlevel_key)
+
+ template_metadata = OBJECT_META_TEMPLATE[decoded_key.action]
+
+ if decoded_key.action == "interact":
+ secondary_key = decoded_key.interaction_object
+ if secondary_key == "YesterdayMachine_01" and decoded_key.target_object == "Carrot_01":
+ secondary_key = "YesterdayMachine_01_from_Carrot"
+
+ template_metadata = template_metadata[secondary_key] # type: ignore[index]
+
+ for decoded_key_field in self.decoded_key_fields:
+ decoded_key_value = getattr(decoded_key, decoded_key_field)
+ should_get_object_synonym = (
+ decoded_key.field_has_object_id(decoded_key_field)
+ and decoded_key_value is not None
+ )
+ if should_get_object_synonym:
+ template_metadata[decoded_key_field] = get_object_synonym(decoded_key_value) # type: ignore[index]
+ else:
+ template_metadata[decoded_key_field] = decoded_key_value # type: ignore[index]
+
+ formatted_paraphrases = self.get_paraphrases(template_metadata, decoded_key=decoded_key) # type: ignore[arg-type]
+ return HighLevelKey(
+ decoded_key=decoded_key,
+ paraphrases=formatted_paraphrases,
+ high_level_description="",
+ )
+
+ def get_paraphrases( # noqa: WPS231
+ self, template_metadata: dict[str, Any], decoded_key: DecodedKey
+ ) -> list[str]:
+ """Get the instruction paraphrases for a highlevel key."""
+ paraphrases = template_metadata["paraphrases"]
+
+ is_ambiguous = decoded_key.target_object_is_ambiguous
+
+ formatted_paraphrases = []
+ for paraphrase in paraphrases:
+ formatting_fields = re.findall(r"\{(.*?)\}", paraphrase)
+ formatting_dict = {}
+ for field in formatting_fields:
+ formatting_value = template_metadata.get(field, None)
+
+ if formatting_value is not None and isinstance(formatting_value, list):
+ formatting_dict[field] = random.choice(formatting_value)
+ else:
+ formatting_dict[field] = formatting_value
+
+ # If any field that needs formatting in the paraphrased template is None, skip the paraphrasing template
+ if any(formatting_value is None for formatting_value in formatting_dict.values()):
+ continue
+
+ # Disambiguate only by color
+ if is_ambiguous and formatting_dict.get("target_object_color", None) is None:
+ continue
+
+ formatted_paraphrase = paraphrase.format(**formatting_dict).lower()
+ formatted_paraphrases.append(self._append_prefix(formatted_paraphrase))
+ return formatted_paraphrases
+
+ def _append_prefix(self, input_instruction: str) -> str:
+ if random.random() < self.prefix_inclusion_probability:
+ random_prefix = random.choice(self._prefixes)
+ input_instruction = f"{random_prefix} {input_instruction}"
+ return input_instruction
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/instruction_processing.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/instruction_processing.py
new file mode 100644
index 0000000..2fca5f4
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/instruction_processing.py
@@ -0,0 +1,271 @@
+import re
+from typing import Any, Optional
+
+import spacy
+
+from emma_datasets.constants.simbot.simbot import get_arena_definitions
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ SimBotClarificationTypes,
+)
+
+
+def get_object_asset_from_object_id(object_id: str, object_assets_to_names: dict[str, str]) -> str:
+ """Map the object id to its object asset.
+
+ Example:
+ (object_asset, object_name) = (V_Monitor_Laser_1000, V_Monitor_Laser)
+ """
+ object_assets = object_assets_to_names.keys()
+ # Case1: Object id in action matches exactly with object assets
+ if object_id in object_assets:
+ return object_id
+
+ # Case2: The object id contains a substring that matches with the object assests
+ # Example: Desk_01_1000
+ # Because the ids can have additional tags we need to remove these tags
+ # and check if they asset after removing the tags match an object asset
+ object_id_components = object_id.split("_")
+
+ for idx in range(len(object_id_components), 0, -1):
+ # tries to match the longest sub-string first
+ object_name_candidate = "_".join(object_id_components[:idx])
+ if object_name_candidate in object_assets:
+ return object_name_candidate
+ return object_id
+
+
+def get_object_label_from_object_id(object_id: str, object_assets_to_names: dict[str, str]) -> str:
+ """Map the object id for a given action to its name.
+
+ The name corresponds to the object detection label. Example: (object_id, object_name) =
+ (V_Monitor_Laser_1000, Computer)
+ """
+ # Case1: Object asset in action matches exactly with object assets
+ object_name_candidate = object_assets_to_names.get(object_id, None)
+ if object_name_candidate is not None:
+ return object_name_candidate
+
+ # Case2: The object asset in action contains a substring that matches with the object assests
+ # Example: Desk_01_1000
+ # Because the assets can have additional tags we need to remove these tags
+ # and check if they asset after removing the tags match an object label
+ object_asset_components = object_id.split("_")
+
+ for idx in range(len(object_asset_components), 0, -1):
+ # tries to match the longest sub-string first
+ object_name_candidate = "_".join(object_asset_components[:idx])
+ object_name_candidate = object_assets_to_names.get(object_name_candidate, None)
+ if object_name_candidate is not None:
+ return object_name_candidate
+
+ return object_id
+
+
+def get_object_readable_name_from_object_id(
+ object_id: str, object_assets_to_names: dict[str, str], special_name_cases: dict[str, str]
+) -> str:
+ """Map the object asset for a given action to its readable name.
+
+ Example:
+ (object_asset, object_name) = (V_Monitor_Laser_1000, Laser Monitor)
+ """
+ object_asset = get_object_asset_from_object_id(object_id, object_assets_to_names)
+ readable_name = special_name_cases.get(object_asset, None)
+ if readable_name is None:
+ return object_assets_to_names.get(object_asset, object_asset)
+ return readable_name
+
+
+class ClarificationTargetExtractor:
+ """Extract the target noun phrase for the clarfication question.
+
+ Spelling correction did not work for some cases, for which we fix it manually.
+ """
+
+ def __init__(self, spacy_model: str = "en_core_web_sm") -> None:
+ self.nlp = spacy.load(spacy_model)
+
+ self.nlp.add_pipe("merge_noun_chunks")
+ self._prefer_naive = {"look"} # The verb 'look' is sometimes confused as a noun
+ self._skipped_nouns = {"can", "sink", "floppy"} # Cannot identify certain words as nouns
+ # Rule-based approach to get the target word from its position.
+ # This fails for compound words, for which we use spacy noun chunks.
+ self.target_index = {
+ SimBotClarificationTypes.description: 3,
+ SimBotClarificationTypes.disambiguation: 1,
+ SimBotClarificationTypes.location: 3,
+ }
+ # This is a manual fix for mapping common target names to object detector labels
+ self._normalized_name_map = {
+ "changer": "color changer",
+ "swapper": "color changer",
+ "swapper machine": "color changer",
+ "panel": "control panel",
+ "mschine": "machine",
+ "refrigeratorand": "fridge",
+ "control": "control panel",
+ "ray": "freeze ray",
+ "maker": "coffee maker",
+ "refrigerator": "fridge",
+ "tip": "laser tip",
+ "pot": "coffee pot",
+ "floppy": "floppy disk",
+ "cartridge": "printer cartridge",
+ "catridge": "printer cartridge",
+ "cartrige": "printer cartridge",
+ "desk": "table",
+ "jelly": "jar",
+ "monitor": "computer",
+ "extinguisher": "fire extinguisher",
+ "figure": "action figure",
+ "coffeemaker": "coffee maker",
+ "unmaker": "coffee unmaker",
+ "toast": "bread",
+ "loaf": "bread",
+ "pc": "computer",
+ "terminal": "computer",
+ "freeze ray controller": "computer",
+ "bean": "coffee beans",
+ "cereal": "cereal box",
+ "driver": "screwdriver",
+ "disk": "floppy disk",
+ "disc": "floppy disk",
+ "faucet": "sink",
+ "tap": "sink",
+ "platform": "wall shelf",
+ "cupboard": "drawer",
+ "jug": "coffee pot",
+ "soda": "can",
+ "pipe": "sink",
+ "sign": "warning sign",
+ "countertop": "counter top",
+ "oven": "microwave",
+ "saw": "handsaw",
+ "hammmer": "hammer",
+ "candy": "candy bar",
+ }
+
+ self._nomalize_types = {
+ "machine": {
+ "time": "time machine",
+ "coffee": "coffee maker",
+ "laser": "laser",
+ "freeze ray": "freeze ray",
+ "color": "color changer",
+ "print": "printer",
+ },
+ "slice": {
+ "apple": "apple",
+ "cake": "cake",
+ "pie": "pie",
+ "bread": "bread",
+ "toast": "bread",
+ },
+ "button": {
+ "red": "button",
+ "blue": "button",
+ "green": "button",
+ },
+ "target": {
+ "freeze ray": "wall shelf",
+ "laser": "wall shelf",
+ },
+ "container": {"milk": "milk"},
+ }
+ self._normalize_synonyms = {
+ "machine": {"machine", "station"},
+ "target": {"target", "shelf"},
+ "slice": {"slice"},
+ "button": {"button"},
+ "container": {"container"},
+ }
+ self._object_classes = get_arena_definitions()["asset_to_label"].values()
+
+ def __call__(
+ self,
+ question: str,
+ question_type: SimBotClarificationTypes,
+ ) -> Optional[str]:
+ """Preprocess the clarification target."""
+ tokens = question.split()
+ target_index = min(self.target_index[question_type], len(tokens) - 1)
+ naive_target = self.get_naive_target(tokens, target_index=target_index)
+ target = self.get_target(question, target_index=target_index)
+ if target is None or naive_target in self._prefer_naive:
+ target = naive_target
+
+ return target
+
+ def normalize_target(self, target: Optional[str], instruction: str) -> Optional[str]:
+ """Convert the target to an object detection label."""
+ if target is None:
+ return target
+ # First, use a list of manual common mappings
+ normalized_target = self._normalized_name_map.get(target, target)
+ # Second, for a number of categories
+ for object_type in self._nomalize_types:
+ normalized_target = self._normalized_names(normalized_target, instruction, object_type)
+
+ normalized_target = normalized_target.title()
+ return normalized_target
+
+ def get_naive_target(self, question_tokens: list[str], target_index: int) -> str:
+ """Get the target based on the word position."""
+ naive_target = question_tokens[target_index]
+ return re.sub(r"[^\w\s]", "", naive_target)
+
+ def get_target(self, question: str, target_index: int) -> Optional[str]: # noqa: WPS231
+ """Apply spell correction and find a noun phrase."""
+ doc = self.nlp(question.lower())
+ target = None
+ for index, token in enumerate(doc):
+ if index > target_index and token.is_stop:
+ continue
+ if token.tag_ in {"NNP", "NN"}:
+ target = token.text.replace("which ", "")
+ target = target.replace("the ", "")
+ elif index == target_index and token.text in self._skipped_nouns:
+ target = token.text
+ if target is not None:
+ break
+
+ return target
+
+ def _normalized_names(self, normalized_target: str, instruction: str, object_type: str) -> str:
+ if normalized_target in self._normalize_synonyms[object_type]:
+ normalized_types = self._nomalize_types[object_type]
+ for keyword, normalized_name in normalized_types.items():
+ if keyword in instruction:
+ return normalized_name
+ return normalized_target
+
+
+class InventoryObjectfromTrajectory:
+ """Add the inventory object to the actions."""
+
+ def __init__(self) -> None:
+ self._object_assets_to_names = get_arena_definitions()["asset_to_label"]
+
+ def __call__(
+ self, actions: list[dict[str, Any]], initial_inventory: Optional[str] = None
+ ) -> list[dict[str, Any]]:
+ """Add the inventory object to actions."""
+ inventory_object = initial_inventory
+ for action in actions:
+ action["inventory_object_id"] = inventory_object
+ # Update the object that will be held after the current action
+ if action["type"] == "Pickup":
+ inventory_object = action["pickup"]["object"]["id"]
+ elif action["type"] == "Place":
+ inventory_object = None
+ elif self._action_deletes_inventory(action["type"], inventory_object):
+ inventory_object = None
+ return actions
+
+ def _action_deletes_inventory(self, action_type: str, inventory_object: Optional[str]) -> bool:
+ pour_coffee_beans = (
+ action_type == "Pour"
+ and inventory_object is not None
+ and inventory_object.startswith("CoffeeBeans")
+ )
+ return pour_coffee_beans
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/masks.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/masks.py
new file mode 100644
index 0000000..18ef5c1
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/masks.py
@@ -0,0 +1,73 @@
+from typing import Union
+
+import numpy as np
+import torch
+from numpy import typing
+
+
+def decompress_simbot_mask(
+ compressed_mask: list[list[int]],
+ image_width: int = 300,
+ image_height: int = 300,
+ return_tensor: bool = False,
+) -> Union[torch.Tensor, typing.NDArray[np.float64]]:
+ """Decompress a compressed mask array.
+
+ Adopted from
+ https://us-east-1.console.aws.amazon.com/codesuite/codecommit/repositories/AlexaSimbotMLToolbox/browse/refs/heads/main/--/AlexaSimbotToolbox/arena_wrapper/util/__init__.py?region=us-east-1
+ """
+ mask = np.zeros((image_width, image_height))
+ for start_idx, run_len in compressed_mask:
+ for idx in range(start_idx, start_idx + run_len):
+ mask[idx // image_width, idx % image_height] = 1
+ if return_tensor:
+ return torch.tensor(mask)
+ return mask
+
+
+def compress_simbot_mask(
+ segmentation_mask: Union[typing.NDArray[np.float64], list[list[int]]]
+) -> list[list[int]]:
+ """Compress a binary 2D array mask for the simbot arena.
+
+ Adopted from
+ https://us-east-1.console.aws.amazon.com/codesuite/codecommit/repositories/AlexaSimbotMLToolbox/browse/refs/heads/main/--/AlexaSimbotToolbox/arena_wrapper/util/__init__.py?region=us-east-1
+ """
+ # list of lists of run lengths for 1s, which are assumed to be less frequent.
+ run_len_compressed: list[list[int]] = []
+ idx = 0
+ curr_run = False
+ run_len = 0
+ for x_idx, _ in enumerate(segmentation_mask):
+ for y_idx, _ in enumerate(segmentation_mask[x_idx]):
+ (curr_run, run_len, run_len_compressed) = get_compressed_mask_values(
+ seg_xy=segmentation_mask[x_idx][y_idx],
+ idx=idx,
+ curr_run=curr_run,
+ run_len=run_len,
+ run_len_compressed=run_len_compressed,
+ )
+ idx += 1
+ if curr_run:
+ run_len_compressed[-1][1] = run_len
+ return run_len_compressed
+
+
+def get_compressed_mask_values(
+ seg_xy: int,
+ idx: int,
+ curr_run: bool,
+ run_len: int,
+ run_len_compressed: list[list[int]],
+) -> tuple[bool, int, list[list[int]]]:
+ """Get values for the compressed version of the mask."""
+ if seg_xy == 1 and not curr_run:
+ curr_run = True
+ run_len_compressed.append([idx, None]) # type: ignore[list-item]
+ if seg_xy == 0 and curr_run:
+ curr_run = False
+ run_len_compressed[-1][1] = run_len
+ run_len = 0
+ if curr_run:
+ run_len += 1
+ return (curr_run, run_len, run_len_compressed)
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/object_features_processing.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/object_features_processing.py
new file mode 100644
index 0000000..6d01738
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/object_features_processing.py
@@ -0,0 +1,158 @@
+from pathlib import Path
+from typing import Any, Optional, Union
+
+import torch
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_label_from_object_id,
+ get_object_readable_name_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.masks import compress_simbot_mask
+from emma_datasets.io import read_json
+
+
+settings = Settings()
+
+
+class ObjectClassDecoder:
+ """Handle the detected objects for a given frame."""
+
+ def __init__(self) -> None:
+ arena_definitions = read_json(
+ settings.paths.constants.joinpath("simbot/arena_definitions.json")
+ )
+ self.idx_to_label = {
+ idx: label for label, idx in arena_definitions["label_to_idx"].items()
+ }
+ self._object_assets_to_names = arena_definitions["asset_to_label"]
+ self._special_name_cases = arena_definitions["special_asset_to_readable_name"]
+
+ def get_target_object(self, action: dict[str, Any]) -> str:
+ """Get the target object id for an action."""
+ action_type = action["type"].lower()
+ return action[action_type]["object"]["id"]
+
+ def get_target_object_and_name(self, action: dict[str, Any]) -> tuple[str, str, str]:
+ """Get the target object id and name for an action."""
+ target_object = self.get_target_object(action)
+ target_class_label = get_object_label_from_object_id(
+ target_object, self._object_assets_to_names
+ )
+ target_readable_name = get_object_readable_name_from_object_id(
+ target_object, self._object_assets_to_names, self._special_name_cases
+ )
+ return target_object, target_class_label, target_readable_name
+
+ def get_candidate_object_in_frame(
+ self,
+ frame_index: int,
+ target_class_label: str,
+ features_path: Path,
+ ) -> list[int]:
+ """Get a list of object indices matching the target object name."""
+ features = self.load_features(features_path, frame_index)
+ if not features:
+ return []
+ candidate_objects = self._get_candidate_objects_from_features(
+ features=features, target_class_label=target_class_label
+ )
+ if target_class_label == "Shelf":
+ candidate_objects.extend(
+ self._get_candidate_objects_from_features(
+ features=features, target_class_label="Wall Shelf"
+ )
+ )
+ elif target_class_label in "Cabinet":
+ candidate_objects.extend(
+ self._get_candidate_objects_from_features(
+ features=features, target_class_label="Counter"
+ )
+ )
+ elif target_class_label == "Box":
+ candidate_objects.extend(
+ self._get_candidate_objects_from_features(
+ features=features, target_class_label="Cereal Box"
+ )
+ )
+ candidate_objects.extend(
+ self._get_candidate_objects_from_features(
+ features=features, target_class_label="Boxes"
+ )
+ )
+ return candidate_objects
+
+ def get_target_object_mask(
+ self,
+ frame_index: int,
+ target_class_label: str,
+ features_path: Path,
+ ) -> Optional[list[list[int]]]:
+ """Get the mask of an object that matches the target object name."""
+ # Load the features from the Goto action
+ features = self.load_features(features_path, frame_index)
+ if not features:
+ return None
+ candidate_objects = self._get_candidate_objects_from_features(
+ features=features, target_class_label=target_class_label
+ )
+
+ if not candidate_objects:
+ return None
+ # Keep the bounding box for one matching object
+ (x_min, y_min, x_max, y_max) = features["bbox_coords"][candidate_objects[0]].tolist()
+ # Convert bbox to mask
+ mask = torch.zeros((features["width"], features["height"]))
+ # populate the bbox region in the mask with ones
+ mask[int(y_min) : int(y_max) + 1, int(x_min) : int(x_max) + 1] = 1 # noqa: WPS221
+ compressed_mask = compress_simbot_mask(mask.tolist())
+ return compressed_mask
+
+ def load_features(self, features_path: Path, frame_index: int) -> Optional[dict[str, Any]]:
+ """Get the mask of an object that matches the target object name."""
+ # Load the features from the Goto action
+ if not features_path.exists():
+ return None
+ return self._load_frame_features(features_path=features_path, frame_index=frame_index)
+
+ def _load_frame_features(self, features_path: Path, frame_index: int) -> dict[str, Any]:
+ features = torch.load(features_path)["frames"][frame_index]["features"]
+ return features
+
+ def _get_frame_class_indices(self, features: dict[str, Any]) -> list[int]:
+ """Get the class indices for the predicted boxes."""
+ class_indices = torch.argmax(features["bbox_probas"], dim=1).tolist()
+ return class_indices
+
+ def _get_frame_classes(self, features: dict[str, Any]) -> list[str]:
+ """Get the class names for the predicted boxes."""
+ class_indices = self._get_frame_class_indices(features)
+ classes = [self.idx_to_label[class_idx] for class_idx in class_indices]
+ return classes
+
+ def _get_candidate_objects_from_features(
+ self,
+ features: dict[str, Any],
+ target_class_label: str,
+ ) -> list[int]:
+ class_indices = self._get_frame_class_indices(features=features)
+ # Get the indices of the objects that match the target_class_label
+ candidate_objects = [
+ idx
+ for idx, class_idx in enumerate(class_indices)
+ if self.idx_to_label[class_idx] == target_class_label
+ ]
+ return candidate_objects
+
+
+def compute_bbox_center_coords(bbox: Union[list[int], torch.Tensor]) -> tuple[float, float]:
+ """Compute the centre of the bounding box."""
+ bbox_list = bbox if isinstance(bbox, list) else bbox.tolist()
+ (x_min, y_min, x_max, y_max) = bbox_list
+ return (x_min + (x_max - x_min) / 2, y_min + (y_max - y_min) / 2)
+
+
+def compute_bbox_area(bbox: Union[list[int], torch.Tensor]) -> float:
+ """Compute the area of the bounding box."""
+ bbox_list = bbox if isinstance(bbox, list) else bbox.tolist()
+ return (bbox_list[3] - bbox_list[1]) * (bbox_list[2] - bbox_list[0])
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/paraphrasers.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/paraphrasers.py
new file mode 100644
index 0000000..3e3a4ba
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/paraphrasers.py
@@ -0,0 +1,879 @@
+import random
+from copy import deepcopy
+from typing import Optional
+
+from emma_datasets.constants.simbot.simbot import (
+ get_arena_definitions,
+ get_objects_asset_synonyms,
+ get_pickable_objects_ids,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ get_object_asset_from_object_id,
+ get_object_readable_name_from_object_id,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ ParaphrasableActions,
+ SimBotInstructionInstance,
+ SimBotObjectAttributes,
+)
+
+
+class InventoryObjectGenerator:
+ """Generate an object that could be in the agent inventory for each instruction."""
+
+ def __init__(self) -> None:
+ pickable_objects = get_pickable_objects_ids()
+ # Note that pickup is missing in purpose from inventory_choices
+ self.inventory_choices = {
+ "goto": pickable_objects,
+ "toggle": pickable_objects,
+ "open": pickable_objects,
+ "close": pickable_objects,
+ "place": pickable_objects,
+ "scan": pickable_objects,
+ "break": ["Hammer"],
+ "pour": [
+ "CoffeeMug_Yellow",
+ "CoffeeMug_Boss",
+ "CoffeePot_01",
+ "Bowl_01",
+ "MilkCarton_01",
+ "CoffeeBeans_01",
+ "Cereal_Box_01",
+ ],
+ "clean": ["FoodPlate_01"],
+ "fill": ["CoffeeMug_Yellow", "CoffeeMug_Boss", "CoffeePot_01", "Bowl_01"],
+ "search": pickable_objects,
+ }
+
+ def __call__(self, action_type: str) -> Optional[str]:
+ """Get a random object."""
+ action_inventory_choices = self.inventory_choices.get(action_type.lower(), None)
+ if action_inventory_choices is None or not action_inventory_choices:
+ return None
+ return random.choice(action_inventory_choices)
+
+
+class InstructionParaphraser:
+ """Paraphrase an instruction."""
+
+ def __init__(self) -> None:
+ object_synonyms = get_objects_asset_synonyms()
+ self.paraphraser_map = {
+ "goto": GotoParaphraser(object_synonyms),
+ "toggle": ToggleParaphraser(object_synonyms),
+ "open": OpenParaphraser(object_synonyms),
+ "close": CloseParaphraser(object_synonyms),
+ "pickup": PickupParaphraser(object_synonyms),
+ "place": PlaceParaphraser(object_synonyms),
+ "break": BreakParaphraser(object_synonyms),
+ "scan": ScanParaphraser(object_synonyms),
+ "pour": PourParaphraser(object_synonyms),
+ "clean": CleanParaphraser(object_synonyms),
+ "fill": FillParaphraser(object_synonyms),
+ "search": SearchParaphraser(object_synonyms),
+ }
+ self._inventory_object_generator = InventoryObjectGenerator()
+
+ def __call__(
+ self,
+ action_type: str,
+ object_id: str,
+ object_attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Paraphrase."""
+ paraphraser = self.paraphraser_map.get(action_type, None)
+ if paraphraser is None:
+ raise AssertionError(f"Action {action_type} cannot be paraphrased")
+ if paraphraser.requires_inventory and inventory_object_id is None:
+ inventory_object_id = self._inventory_object_generator(action_type=action_type)
+ instruction = paraphraser(object_id, object_attributes, inventory_object_id)
+ return instruction
+
+ def from_instruction_instance(
+ self, instruction_instance: SimBotInstructionInstance
+ ) -> tuple[str, Optional[str]]:
+ """Paraphrase an instruction from a SimbotInstructionInstance."""
+ cond1 = len(instruction_instance.actions) == 1
+ action = instruction_instance.actions[0]
+ action_type = action.type.lower()
+ action_data = action.get_action_data
+ cond2 = action_type in ParaphrasableActions
+ inventory_object_id = None
+ if cond1 and cond2:
+ # For instruction instances that have multiple objects e.g, search we pick one at random
+ if isinstance(action_data["object"]["attributes"], list):
+ object_candidates = len(action_data["object"]["attributes"])
+ object_candidate_index = random.randint(0, object_candidates - 1)
+ object_attributes = SimBotObjectAttributes(
+ **action_data["object"]["attributes"][object_candidate_index]
+ )
+ object_id = action_data["object"]["id"][object_candidate_index]
+ else:
+ object_attributes = SimBotObjectAttributes(**action_data["object"]["attributes"])
+ object_id = action_data["object"]["id"]
+
+ inventory_object_id = self.sample_inventory_object(action_type=action_type)
+ paraphraser = self.paraphraser_map.get(action_type, None)
+ if paraphraser is None:
+ raise AssertionError(f"Action {action_type} cannot be paraphrased")
+ instruction = paraphraser(object_id, object_attributes, inventory_object_id)
+ else:
+ instruction = instruction_instance.instruction.instruction
+ return instruction, inventory_object_id
+
+ def sample_inventory_object(self, action_type: str) -> Optional[str]:
+ """Sample an inventory object."""
+ paraphraser = self.paraphraser_map.get(action_type, None)
+ if paraphraser is None:
+ return None
+ # If the action type does not require an inventory object, set it with probability 0.5
+ if paraphraser.requires_inventory or random.random() < 1 / 2:
+ return self._inventory_object_generator(action_type=action_type)
+ return None
+
+ def is_inventory_required(self, action_type: str) -> bool:
+ """Is the inventory required for the action?"""
+ paraphraser = self.paraphraser_map.get(action_type, None)
+ if paraphraser is None:
+ return False
+ return paraphraser.requires_inventory
+
+
+class BaseParaphraser:
+ """Base class for a paraphraser."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]], action_type: str) -> None:
+ self.object_synonyms = object_synonyms
+ self._action_type = action_type
+ self._instruction_options: list[str]
+ # Additional instruction options that cannot be combined with a prefix
+ self._no_prefix_instruction_options: list[str] = []
+ self._available_templates: dict[str, list[str]]
+ arena_definitions = get_arena_definitions()
+ self._assets_to_labels = arena_definitions["asset_to_label"]
+ self._special_name_cases = arena_definitions["special_asset_to_readable_name"]
+ self._full_templates = [
+ # By convention the full instruction will be provided in `verb` entry.
+ "{verb}",
+ ]
+ self._verb_templates = [
+ "{verb} the {object}.",
+ ]
+
+ self._verb_color_templates = [
+ "{verb} the {color} {object}.",
+ ]
+
+ self._verb_location_templates = [
+ "{verb} the {location} {object}.",
+ "{verb} the {object} on your {location}.",
+ ]
+ self._verb_color_location_templates = [
+ "{verb} the {color} {location} {object}.",
+ "{verb} the {location} {color} {object}.",
+ "{verb} the {object} on your {location}.",
+ ]
+ self._prefix_options = [
+ # "I would like to",
+ # "I need to",
+ # "I need you to",
+ # "I am telling you to",
+ # "you should",
+ # "we need to",
+ # "let's",
+ # "can you",
+ # "could you",
+ # "okay",
+ # "okay now",
+ "robot",
+ "now",
+ # "please",
+ ]
+ self.requires_inventory = False
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Paraphrase."""
+ raise NotImplementedError
+
+ def _get_instruction(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ available_types: list[str],
+ ) -> str:
+ selected_type = random.choice(available_types)
+ selected_template = random.choice(self._available_templates[selected_type])
+
+ object_name = self._sample_target_object_synonym(
+ object_id=object_id, template_type=selected_type
+ )
+ instruction_options = deepcopy(self._instruction_options)
+ if self._no_prefix_instruction_options:
+ instruction_options.extend(self._no_prefix_instruction_options)
+
+ verb = random.choice(instruction_options)
+ template_values = {
+ "verb": verb,
+ "object": object_name,
+ "color": attributes.color,
+ "location": attributes.location,
+ }
+ instruction = selected_template.format(**template_values)
+
+ # Allow a prefix if the selected verb is not part of the self._no_prefix_instruction_options
+ if len(instruction_options) == len(self._instruction_options):
+ allowed_prefix = True
+ else:
+ allowed_prefix = verb not in self._no_prefix_instruction_options
+ if allowed_prefix:
+ # Add the prefix "go", e.g. "Go get the bowl"
+ if self._action_type != "goto" and random.random() < 1 / 2:
+ instruction = self._add_prefix(instruction, "go")
+
+ # Add a random prefix, e.g. "I need you to go get the bowl"
+ if random.random() < 0.05: # noqa: WPS432, WPS459
+ instruction = self._add_prefix(instruction, random.choice(self._prefix_options))
+ return instruction.lower()
+
+ def _add_prefix(self, instruction: str, prefix: str) -> str:
+ return f"{prefix} {instruction}".lower()
+
+ def _add_suffix(self, instruction: str, suffix: str) -> str:
+ if instruction.endswith("."):
+ instruction = instruction[:-1]
+ return f"{instruction} {suffix}".lower()
+
+ def _sample_target_object_synonym(self, object_id: str, template_type: str) -> str:
+ object_name = get_object_readable_name_from_object_id(
+ object_id=object_id,
+ object_assets_to_names=self._assets_to_labels,
+ special_name_cases=self._special_name_cases,
+ )
+
+ object_asset = get_object_asset_from_object_id(object_id, self._assets_to_labels)
+ object_class = self._assets_to_labels[object_asset]
+
+ # If it's not a `special case` object then the object class and the object readable name should be the same.
+ # Therefore you can always sample a synonym.
+ if object_name == object_class:
+ object_name = random.choice(self.object_synonyms[object_asset])
+ # If the template is not a verb_template we can use any synonym
+ elif self._available_templates[template_type] != self._verb_templates:
+ object_name = random.choice(self.object_synonyms[object_asset])
+ return object_name
+
+
+class GotoParaphraser(BaseParaphraser):
+ """This is called in training only!"""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="goto")
+
+ self._instruction_options = [
+ "go to",
+ "go back to",
+ "go towards",
+ "move to",
+ "move closer to",
+ "navigate to",
+ "get closer to",
+ "move towards",
+ "head to",
+ "head towards",
+ "approach",
+ ]
+
+ self._available_templates = {
+ "goto": self._verb_templates,
+ "goto_color": self._verb_color_templates,
+ "goto_location": self._verb_location_templates,
+ "goto_color_location": self._verb_color_location_templates,
+ }
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a goto instruction."""
+ available_types = ["goto"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("goto_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("goto_location")
+
+ if object_color is not None and object_location is not None:
+ available_types.append("goto_color_location")
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
+
+
+class ToggleParaphraser(BaseParaphraser):
+ """Paraphrase toggle instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="toggle")
+ self._instruction_options = [
+ "toggle",
+ "start",
+ "activate",
+ "fire",
+ "turn on",
+ "switch on",
+ "turn off",
+ "switch off",
+ "power up",
+ "shut down",
+ "power off",
+ ]
+
+ self._available_templates = {
+ "toggle": self._verb_templates,
+ "toggle_color": self._verb_color_templates,
+ "toggle_location": self._verb_location_templates,
+ }
+
+ self._replace_sink_to_water_proba = 0.2
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a toggle instruction."""
+ available_types = ["toggle"]
+ replace_sink = (
+ object_id == "KitchenCounterSink_01"
+ and random.random() < self._replace_sink_to_water_proba
+ )
+ if replace_sink:
+ object_id = "Water"
+
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("toggle_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("toggle_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
+
+
+class OpenParaphraser(BaseParaphraser):
+ """Paraphrase open instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="open")
+ self._instruction_options = ["open"]
+
+ self._available_templates = {
+ "open": self._verb_templates,
+ "open_color": self._verb_color_templates,
+ "open_location": self._verb_location_templates,
+ }
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a open instruction."""
+ available_types = ["open"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("open_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("open_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
+
+
+class CloseParaphraser(BaseParaphraser):
+ """Paraphrase close instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="close")
+ self._instruction_options = ["close", "shut"]
+
+ self._available_templates = {
+ "close": self._verb_templates,
+ "close_color": self._verb_color_templates,
+ "close_location": self._verb_location_templates,
+ }
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a close instruction."""
+ available_types = ["close"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("close_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("close_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
+
+
+class PickupParaphraser(BaseParaphraser):
+ """Paraphrase pickup instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="pickup")
+ self._instruction_options = [
+ "collect",
+ "fetch",
+ "get",
+ "grab",
+ "pick up",
+ "take",
+ ]
+
+ self._available_templates = {
+ "pickup": self._verb_templates,
+ "pickup_color": self._verb_color_templates,
+ "pickup_location": self._verb_location_templates,
+ }
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a pickup instruction."""
+ available_types = ["pickup"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("pickup_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("pickup_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
+
+
+class PlaceParaphraser(BaseParaphraser):
+ """Paraphrase place instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="place")
+ self._instruction_options = [
+ "leave the {pickable_object} in",
+ "leave the {pickable_object} on",
+ "place the {pickable_object} on",
+ "place the {pickable_object} in",
+ "put the {pickable_object} in",
+ "put the {pickable_object} on",
+ "put down the {pickable_object} on",
+ "put the {pickable_object} down on",
+ "insert the {pickable_object} in",
+ "set the {pickable_object} at",
+ "set the {pickable_object} on",
+ "deliver the {pickable_object} to",
+ "deliver the {pickable_object} in",
+ "deliver the {pickable_object} on",
+ "deliver it to",
+ "deliver it in",
+ "deliver it on",
+ "deliver to",
+ ]
+ self._put_down_classes = [
+ "Counter Top",
+ "Color Changer",
+ "Counter",
+ "Desk",
+ "Everything's A Carrot Machine",
+ "Embiggenator",
+ "Gravity Pad",
+ "Laser Shelf",
+ "Freeze Ray Shelf",
+ "Packing Box",
+ "Table",
+ "Cabinet",
+ "Drawer",
+ "Fridge",
+ "Freezer",
+ ]
+ self._put_down_templates = [
+ "leave the {pickable_object}.",
+ "leave down the {pickable_object}.",
+ "place the {pickable_object}.",
+ "put down the {pickable_object}.",
+ "put the {pickable_object} down.",
+ "set down the {pickable_object}.",
+ "set the {pickable_object} down.",
+ ]
+ self._available_templates = {
+ "place": self._verb_templates,
+ "place_color": self._verb_color_templates,
+ "place_location": self._verb_location_templates,
+ }
+
+ self.requires_inventory = True
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a place instruction."""
+ object_name = get_object_readable_name_from_object_id(
+ object_id=object_id,
+ object_assets_to_names=self._assets_to_labels,
+ special_name_cases=self._special_name_cases,
+ )
+ if random.random() < 0.1 and object_name in self._put_down_classes: # noqa: WPS459
+ instruction = random.choice(self._put_down_templates)
+ else:
+ available_types = ["place"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("place_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("place_location")
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+
+ if inventory_object_id is None:
+ raise AssertionError("PlaceParaphraser requires inventory.")
+ pickable_object = random.choice(self.object_synonyms[inventory_object_id]).lower()
+ instruction = instruction.format(pickable_object=pickable_object)
+ return instruction
+
+
+class BreakParaphraser(BaseParaphraser):
+ """Paraphrase break instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="break")
+ self._instruction_options = [
+ "break",
+ "break into pieces",
+ "break to pieces",
+ "crash",
+ "crack",
+ "shatter",
+ "smash",
+ ]
+ augmented_prefix_options = [f"{opt} use the hammer to" for opt in self._prefix_options]
+ self._prefix_options.extend(augmented_prefix_options)
+ self._suffix_option = "with the hammer."
+
+ self._available_templates = {
+ "break": self._verb_templates,
+ "break_color": self._verb_color_templates,
+ "break_location": self._verb_location_templates,
+ }
+ self.requires_inventory = True
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a break instruction."""
+ available_types = ["break"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("break_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("break_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ proba = random.random()
+ if proba < (1 / 3) and "hammer" not in instruction:
+ instruction = self._add_suffix(instruction, self._suffix_option)
+ return instruction
+
+
+class CleanParaphraser(BaseParaphraser):
+ """Paraphrase clean instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="clean")
+ self._instruction_options = [
+ "clean",
+ "cleanse",
+ "rinse",
+ "soak",
+ "sponge",
+ "wash",
+ "wipe",
+ ]
+ self._suffix_option = "in the sink."
+
+ self._available_templates = {
+ "clean": self._verb_templates,
+ }
+ self.requires_inventory = True
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a clean instruction."""
+ if inventory_object_id is None:
+ raise AssertionError("CleanParaphraser requires inventory.")
+
+ readable_name = get_object_readable_name_from_object_id(
+ object_id=inventory_object_id,
+ object_assets_to_names=self._assets_to_labels,
+ special_name_cases=self._special_name_cases,
+ )
+
+ instruction = self._get_instruction(
+ object_id=inventory_object_id,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ ),
+ available_types=["clean"],
+ )
+
+ if random.random() < (1 / 2):
+ instruction = self._add_suffix(instruction, self._suffix_option)
+ return instruction
+
+
+class PourParaphraser(BaseParaphraser):
+ """Paraphrase pour instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="pour")
+ self._instruction_options = [
+ "pour {pourable_object} {preposition}",
+ "pour the {pourable_object} {preposition}",
+ "pour some {pourable_object} {preposition}",
+ "put {pourable_object} {preposition}",
+ "put the {pourable_object} {preposition}",
+ "put some {pourable_object} {preposition}",
+ "pour {pourable_object} from the {inventory_object} {preposition}",
+ "pour the {pourable_object} from the {inventory_object} {preposition}",
+ "pour some {pourable_object} from the {inventory_object} {preposition}",
+ "put {pourable_object} from the {inventory_object} {preposition}",
+ "put the {pourable_object} from the {inventory_object} {preposition}",
+ "put some {pourable_object} from the {inventory_object} {preposition}",
+ "fill",
+ "fill up",
+ ]
+
+ self._available_templates = {
+ "pour": self._verb_templates,
+ "pour_color": self._verb_color_templates,
+ "pour_location": self._verb_location_templates,
+ }
+ self.requires_inventory = True
+ self._pourable_inventory_mapping = {
+ "Bowl_01": ["water", "milk", "cereal"],
+ "Cereal_Box_01": ["cereal", "cereal", "cereal box"],
+ "CoffeeMug_Boss": ["water", "coffee"],
+ "CoffeeMug_Yellow": ["water", "coffee"],
+ "CoffeePot_01": ["water", "coffee"],
+ "CoffeeBeans_01": ["coffee beans", "beans"],
+ "MilkCarton_01": ["milk"],
+ }
+ self._prepositions = ["in", "into"]
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a pour instruction."""
+ available_types = ["pour"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("pour_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("pour_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ if inventory_object_id is None:
+ raise AssertionError("PourParaphraser requires inventory.")
+
+ pourable_object = random.choice(self._pourable_inventory_mapping[inventory_object_id])
+
+ instruction_extra_slots = {
+ "pourable_object": pourable_object,
+ "inventory_object": random.choice(self.object_synonyms[inventory_object_id]),
+ "preposition": random.choice(self._prepositions),
+ }
+ instruction = instruction.format(**instruction_extra_slots)
+ if "fill " in instruction:
+ instruction = self._add_suffix(instruction, f"with {pourable_object}")
+ return instruction
+
+
+class ScanParaphraser(BaseParaphraser):
+ """Paraphrase scan instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="scan")
+ self._instruction_options = ["scan", "examine", "survey", "study", "eye", "inspect"]
+
+ self._available_templates = {
+ "scan": self._verb_templates,
+ "scan_color": self._verb_color_templates,
+ "scan_location": self._verb_location_templates,
+ }
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a scan instruction."""
+ available_types = ["scan"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("scan_color")
+
+ object_location = attributes.location
+ if object_location is not None:
+ available_types.append("scan_location")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
+
+
+class FillParaphraser(BaseParaphraser):
+ """Paraphrase fill instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="fill")
+ self._instruction_options = ["fill", "fill up"]
+ self._suffix_options = [
+ "with water",
+ "with water from the sink",
+ "in the sink",
+ ]
+
+ self._available_templates = {
+ "fill": self._verb_templates,
+ }
+ self.requires_inventory = True
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a fill instruction."""
+ if inventory_object_id is None:
+ raise AssertionError("FillParaphraser requires inventory.")
+
+ readable_name = get_object_readable_name_from_object_id(
+ object_id=inventory_object_id,
+ object_assets_to_names=self._assets_to_labels,
+ special_name_cases=self._special_name_cases,
+ )
+
+ instruction = self._get_instruction(
+ object_id=inventory_object_id,
+ attributes=SimBotObjectAttributes(
+ readable_name=readable_name,
+ ),
+ available_types=["fill"],
+ )
+ if random.random() < (1 / 2):
+ instruction = self._add_suffix(instruction, random.choice(self._suffix_options))
+ return instruction
+
+
+class SearchParaphraser(BaseParaphraser):
+ """Paraphrase search instructions."""
+
+ def __init__(self, object_synonyms: dict[str, list[str]]) -> None:
+ super().__init__(object_synonyms=object_synonyms, action_type="search")
+ self._instruction_options = [
+ "find",
+ "locate",
+ "search for",
+ "look for",
+ "seek",
+ "trace",
+ "investigate the room for",
+ "explore the room for",
+ ]
+ self._no_prefix_instruction_options = [
+ "where is",
+ "do you see",
+ ]
+
+ self._available_templates = {
+ "search": self._verb_templates,
+ "search_color": self._verb_color_templates,
+ }
+
+ def __call__(
+ self,
+ object_id: str,
+ attributes: SimBotObjectAttributes,
+ inventory_object_id: Optional[str] = None,
+ ) -> str:
+ """Get a search instruction."""
+ available_types = ["search"]
+ object_color = attributes.color
+ if object_color is not None:
+ available_types.append("search_color")
+
+ instruction = self._get_instruction(
+ object_id=object_id, attributes=attributes, available_types=available_types
+ )
+ return instruction
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/preprocessing.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/preprocessing.py
new file mode 100644
index 0000000..ca5b973
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/preprocessing.py
@@ -0,0 +1,272 @@
+from copy import deepcopy
+from typing import Any, Optional
+
+from emma_datasets.datamodels.datasets.utils.simbot_utils.ambiguous_data import (
+ AmbiguousGotoProcessor,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.data_augmentations import (
+ SyntheticLowLevelActionSampler,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.instruction_processing import (
+ ClarificationTargetExtractor,
+)
+from emma_datasets.datamodels.datasets.utils.simbot_utils.simbot_datamodels import (
+ SimBotClarificationTypes,
+)
+
+
+def get_question_type(question: str) -> SimBotClarificationTypes:
+ """Get the type for a given question."""
+ question = question.lower()
+ question_types = {qtype.value: qtype for qtype in SimBotClarificationTypes}
+ if question.startswith("which"):
+ if question.split()[1] == "direction":
+ qtype = "which direction"
+ else:
+ qtype = "which+instruction_noun"
+ else:
+ qtype = " ".join(question.split()[:2])
+ return question_types.get(qtype, SimBotClarificationTypes.other)
+
+
+def get_question_target(
+ clarification_target_extractor: ClarificationTargetExtractor,
+ question: str,
+ question_type: SimBotClarificationTypes,
+) -> Optional[str]:
+ """Get the type for a given question."""
+ if question_type == SimBotClarificationTypes.other:
+ return None
+ if question_type == SimBotClarificationTypes.direction:
+ return None
+ return clarification_target_extractor(question, question_type)
+
+
+def prepare_instruction_question_answers(
+ clarification_target_extractor: ClarificationTargetExtractor, instruction: dict[str, Any]
+) -> dict[str, Any]:
+ """Add question types and targets."""
+ if "question_answers" not in instruction:
+ return instruction
+ for question_answer in instruction["question_answers"]:
+ question_answer["question_type"] = get_question_type(question=question_answer["question"])
+ question_answer["question_target"] = get_question_target(
+ clarification_target_extractor,
+ question=question_answer["question"],
+ question_type=question_answer["question_type"],
+ )
+ return instruction
+
+
+def create_instruction_dict(
+ instruction: dict[str, Any],
+ actions: list[dict[str, Any]],
+ mission_id: str,
+ annotation_id: str,
+ instruction_id: str,
+ clarification_extractor: Optional[ClarificationTargetExtractor] = None,
+ synthetic: bool = False,
+ ambiguous: bool = False,
+ paraphrasable: bool = False,
+ vision_augmentation: bool = False,
+ cdf_augmentation: bool = False,
+ cdf_highlevel_key: Optional[str] = None,
+ **kwargs: Any,
+) -> dict[str, Any]:
+ """Create an instruction dict."""
+ action_start_id = instruction["actions"][0]
+ action_end_id = instruction["actions"][-1]
+ instruction_actions = deepcopy(actions[action_start_id : action_end_id + 1])
+
+ # add the final label for the last action within an instruction
+ instruction_actions[-1]["final"] = True
+
+ if clarification_extractor is not None:
+ instruction = prepare_instruction_question_answers(clarification_extractor, instruction)
+
+ instruction_dict = {
+ "instruction": instruction,
+ "actions": instruction_actions,
+ "mission_id": mission_id,
+ "annotation_id": annotation_id,
+ "instruction_id": instruction_id,
+ "synthetic": synthetic,
+ "ambiguous": ambiguous,
+ "paraphrasable": paraphrasable,
+ "vision_augmentation": vision_augmentation,
+ "cdf_augmentation": cdf_augmentation,
+ "cdf_highlevel_key": cdf_highlevel_key,
+ }
+ return instruction_dict
+
+
+def instruction_has_spatial_info(instruction_dict: dict[str, Any]) -> bool:
+ """Check if an instruction dict has spatial information.
+
+ This check is done both in the raw instruction text and the question answer. It is used to
+ filter out look around actions from human instructions.
+ """
+ question_answers = instruction_dict.get("question_answers", [])
+ qa_concatenations = [f"{qa['question']} {qa['answer']}" for qa in question_answers]
+
+ concat_string = " ".join([instruction_dict["instruction"]] + qa_concatenations)
+
+ has_spatial_info = (
+ "left" in concat_string
+ or "right" in concat_string
+ or "behind" in concat_string
+ or "front" in concat_string
+ )
+ return has_spatial_info
+
+
+def get_action_types_for_instruction(
+ instruction_dict: dict[str, Any], actions: list[dict[str, Any]]
+) -> list[str]:
+ """Get the action types for an instruction."""
+ action_start_id = instruction_dict["actions"][0]
+ action_end_id = instruction_dict["actions"][-1]
+ return [action["type"] for action in actions[action_start_id : action_end_id + 1]]
+
+
+def instruction_is_goto_room(
+ instruction_dict: dict[str, Any], actions: list[dict[str, Any]]
+) -> bool:
+ """Determine whether the instruction is a goto room instruction."""
+ action_types = get_action_types_for_instruction(instruction_dict, actions)
+ instruction_actions = instruction_dict["actions"]
+ return all(
+ [
+ len(action_types) == 1,
+ action_types[0].lower() == "goto"
+ and "officeRoom" in actions[instruction_actions[0]]["goto"]["object"].keys(),
+ ]
+ )
+
+
+def instruction_is_look(instruction_dict: dict[str, Any], actions: list[dict[str, Any]]) -> bool:
+ """Determine whether the instruction is a look instruction."""
+ action_types = get_action_types_for_instruction(instruction_dict, actions)
+ return all([len(action_types) == 1, action_types[0].lower() == "look"])
+
+
+class TrajectoryInstructionProcessor:
+ """Preprocess the instruction instances for the human annotations."""
+
+ def __init__(self, skip_goto_rooms: bool = True, cdf_augmentation: bool = False) -> None:
+ self._clarification_target_extractor = ClarificationTargetExtractor()
+ self.skip_goto_rooms = skip_goto_rooms
+ self.cdf_augmentation = cdf_augmentation
+
+ def run( # noqa: WPS231
+ self,
+ human_annotations: list[dict[str, Any]],
+ mission_id: str,
+ actions: list[dict[str, Any]],
+ instruction_idx: int,
+ cdf_highlevel_key: Optional[str] = None,
+ ) -> list[dict[str, Any]]:
+ """Run the preprocesing."""
+ instruction_data = []
+ for human_idx, human_annotation in enumerate(human_annotations):
+ for instruction in human_annotation["instructions"]:
+ if self.skip_goto_rooms and instruction_is_goto_room(instruction, actions):
+ continue
+
+ action_types = get_action_types_for_instruction(instruction, actions)
+
+ # Ignore look around actions if they are the first action in an instruction
+ if action_types[0] == "Look":
+ # Ignore look around actions that have spatial information
+ if instruction_has_spatial_info(instruction):
+ continue # noqa: WPS220
+ instruction["actions"] = instruction["actions"][1:]
+
+ if "Look" in action_types[1:]:
+ continue
+
+ instruction_dict = create_instruction_dict(
+ instruction=instruction,
+ actions=actions,
+ mission_id=mission_id,
+ annotation_id=str(human_idx),
+ instruction_id=str(instruction_idx),
+ clarification_extractor=self._clarification_target_extractor,
+ synthetic=False,
+ cdf_augmentation=self.cdf_augmentation,
+ cdf_highlevel_key=cdf_highlevel_key,
+ )
+ instruction_data.append(instruction_dict)
+ instruction_idx += 1
+ return instruction_data
+
+
+class SyntheticIntructionsPreprocessor:
+ """Preprocess the instruction instances for the human annotations."""
+
+ def __init__(
+ self,
+ skip_goto_rooms: bool = True,
+ use_synthetic_action_sampler: bool = False,
+ num_additional_synthetic_instructions: int = -1,
+ ) -> None:
+ self.skip_goto_rooms = skip_goto_rooms
+ self.use_synthetic_action_sampler = use_synthetic_action_sampler
+ self.num_additionalinstructions = num_additional_synthetic_instructions
+ self._synthetic_action_sampler = SyntheticLowLevelActionSampler()
+ self._ambiguous_goto_processor = AmbiguousGotoProcessor()
+ self.total_sampled_actions = 0
+
+ def run( # noqa: WPS231
+ self,
+ synthetic_annotations: list[dict[str, Any]],
+ mission_id: str,
+ actions: list[dict[str, Any]],
+ instruction_idx: int,
+ ) -> list[dict[str, Any]]:
+ """Run the preprocesing."""
+ instruction_data = []
+
+ for annot_idx, synthetic_annotation in enumerate(synthetic_annotations):
+ for instruction in synthetic_annotation["instructions"]:
+ if self.skip_goto_rooms and instruction_is_goto_room(instruction, actions):
+ continue
+
+ if instruction_is_look(instruction, actions):
+ continue
+
+ instruction_dict = create_instruction_dict(
+ instruction=instruction,
+ actions=actions,
+ mission_id=mission_id,
+ annotation_id=f"synthetic_{annot_idx}",
+ instruction_id=str(instruction_idx),
+ synthetic=True,
+ )
+
+ instruction_data.extend(
+ self._ambiguous_goto_processor(
+ instruction_dict=instruction_dict,
+ mission_id=mission_id,
+ action=actions[instruction["actions"][0]],
+ )
+ )
+ instruction_idx += 1
+
+ add_synthetic_instructions = (
+ self.num_additionalinstructions == -1
+ or self.total_sampled_actions < self.num_additionalinstructions
+ )
+ if self.use_synthetic_action_sampler and add_synthetic_instructions:
+ instruction_dict = self._synthetic_action_sampler(
+ mission_id=mission_id,
+ annotation_id=f"synthetic_{annot_idx}",
+ instruction_idx=instruction_idx,
+ original_action=actions[instruction["actions"][0]],
+ )
+
+ instruction_data.append(instruction_dict)
+ instruction_idx += 1
+
+ self.total_sampled_actions += 1
+ return instruction_data
diff --git a/src/emma_datasets/datamodels/datasets/utils/simbot_utils/simbot_datamodels.py b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/simbot_datamodels.py
new file mode 100644
index 0000000..16e7d2f
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/simbot_utils/simbot_datamodels.py
@@ -0,0 +1,257 @@
+from enum import Enum
+from pathlib import Path
+from typing import Any, Literal, Optional, Union
+
+from pydantic import BaseModel, Field, root_validator
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import MediaType
+
+
+settings = Settings()
+
+ParaphrasableActions = {
+ "goto",
+ "toggle",
+ "open",
+ "close",
+ "pickup",
+ "place",
+ "search",
+ "pour",
+ "fill",
+ "clean",
+ "scan",
+ "break",
+}
+
+
+class SimBotClarificationTypes(Enum):
+ """SimBot question clarification types.
+
+ The 4 defined question types correspond to the synthetic clarification questions in the
+ annotations.
+ https://us-east-1.console.aws.amazon.com/codesuite/codecommit/repositories/AlexaSimbotMLToolbox/browse/refs/heads/main/--/AlexaSimbotToolbox/data/trajectory-data?region=us-east-1
+ https://app.slack.com/client/T02SWBF7J7M/C03UQQM3HN0
+ """
+
+ location = "where is"
+ description = "what does"
+ disambiguation = "which+instruction_noun"
+ direction = "which direction"
+ other = "other"
+
+
+class SimBotQA(BaseModel):
+ """Class that contains the SimBot question answer annotations for a given step."""
+
+ question: str
+ answer: str
+ question_necessary: bool
+ question_type: Optional[SimBotClarificationTypes] = None
+ question_target: Optional[str] = None
+
+
+class SimBotAction(BaseModel):
+ """SimBot action API data structure."""
+
+ class Config:
+ """Custom configuration to allows additional fields."""
+
+ extra: str = "allow"
+ allow_population_by_field_name = True
+
+ id: int
+ type: str
+ color_images: list[str] = Field(..., alias="colorImages")
+ inventory_object_id: Optional[str] = None
+ final: Optional[bool] = False
+
+ @root_validator(pre=True)
+ @classmethod
+ def check_action_data(cls, data_dict: dict[str, Any]) -> dict[str, Any]:
+ """Validates the current action data structure.
+
+ It makes sure that it contains a field corresponding to the action type.
+ """
+ if data_dict["type"].lower() not in data_dict:
+ raise ValueError(f"Action data should have a field for `{data_dict['type']}`")
+
+ return data_dict
+
+ @property
+ def get_action_data(self) -> dict[str, Any]:
+ """Extracts the field corresponding to the current action data."""
+ return getattr(self, self.type.lower())
+
+
+class SimBotInstruction(BaseModel):
+ """SimBot instruction language annotations."""
+
+ instruction: str
+ actions: list[int]
+ question_answers: Optional[list[SimBotQA]]
+
+ @property
+ def necessary_question_answers(self) -> list[SimBotQA]:
+ """Get the necessary question-answers."""
+ necessary_question_answers: list[SimBotQA] = []
+ if not self.question_answers:
+ return necessary_question_answers
+ for qa_pair in self.question_answers:
+ if qa_pair.question_necessary:
+ necessary_question_answers.append(qa_pair)
+ return necessary_question_answers
+
+
+class SimBotAnnotation(BaseModel):
+ """Represents a sequence of pairs (actions, instruction)."""
+
+ instructions: list[SimBotInstruction]
+
+
+class SimBotMissionInstance(BaseInstance):
+ """A SimBot instance for the mission dataset."""
+
+ mission_id: str
+ human_annotations: list[SimBotAnnotation]
+ synethetic_annotations: Optional[list[SimBotAnnotation]]
+ actions: list[SimBotAction]
+
+ @property
+ def modality(self) -> MediaType:
+ """Returns the modality for the given instance.
+
+ SimBot has multicam views because of the look-around action which returns 4 images.
+ """
+ return MediaType.multicam
+
+ @property
+ def features_path(self) -> Path:
+ """Returns the path to the features for the current mission."""
+ return settings.paths.simbot_features.joinpath(f"{self.mission_id}.pt")
+
+
+class SimBotInstructionInstance(BaseInstance):
+ """A SimBot instance for the mission dataset."""
+
+ mission_id: str
+ annotation_id: str
+ instruction_id: str
+ instruction: SimBotInstruction
+ actions: list[SimBotAction]
+ synthetic: bool = False
+ ambiguous: bool = False
+ vision_augmentation: bool = False
+ cdf_augmentation: bool = False
+ cdf_highlevel_key: Optional[str] = None
+
+ class Config:
+ """Custom configuration to allows additional fields."""
+
+ extra: str = "allow"
+
+ @property
+ def modality(self) -> MediaType:
+ """Returns the modality for the given instance.
+
+ SimBot has multicam views because of the look-around action which returns 4 images.
+ """
+ return MediaType.multicam
+
+ @property
+ def features_path(self) -> list[Path]:
+ """Returns the path to the features for the current instruction.
+
+ Instances comming from vision augmentations have only a single action. Because images can
+ belong to multiple instances, to avoid duplicates the feature path is directly the path to
+ the image.
+ """
+ # The instance comes from the vision data augmentations
+ if self.vision_augmentation:
+ template = "{feature_path}.pt"
+ color_image = self.actions[0].color_images[0]
+ feature_path = Path(color_image).stem
+ return [
+ settings.paths.simbot_features.joinpath(template.format(feature_path=feature_path))
+ ]
+
+ # The instance comes from the cdf augmentations
+ elif self.cdf_augmentation:
+ template = "{feature_path}.pt"
+ color_images = [action.color_images[0] for action in self.actions]
+ feature_paths = [Path(color_image).stem for color_image in color_images]
+ return [
+ settings.paths.simbot_features.joinpath(template.format(feature_path=feature_path))
+ for feature_path in feature_paths
+ ]
+
+ # The instance comes from the simbot annotations
+ template = "{mission_id}_action{action_id}.pt"
+ return [
+ settings.paths.simbot_features.joinpath(
+ template.format(mission_id=self.mission_id, action_id=action.id)
+ )
+ for action in self.actions
+ ]
+
+ @property
+ def paraphrasable(self) -> bool:
+ """Check if the instance allows for paraphrasing."""
+ # All instances comming from CDF augmentations are paraphrasable
+ if self.cdf_augmentation:
+ return True
+
+ cond1 = len(self.actions) == 1 # number of actions
+ cond2 = self.actions[0].type.lower() in ParaphrasableActions # action type
+ cond3 = self.synthetic # synthetic and not Goto room
+ # Synthetic goto room instructions are not paraphrasable
+ action_metadata = self.actions[0].get_action_data.get("object", None)
+ if cond3 and action_metadata is not None and "id" not in action_metadata:
+ cond3 = False
+ return cond1 and cond2 and cond3
+
+
+class SimBotObjectAttributes(BaseModel):
+ """Base model for attributes of objects."""
+
+ readable_name: str
+ color: Optional[str] = None
+ location: Optional[Literal["left", "middle", "right"]] = None
+ distance: Optional[float] = None
+
+
+class AugmentationInstruction(BaseModel):
+ """Basemodel for an augmentation instruction."""
+
+ action_type: str
+ object_id: Union[str, list[str]]
+ bbox: Union[list[int], list[list[int]], None] # one, multiple, or no bounding boxes at all
+ image_name: str
+ attributes: Union[SimBotObjectAttributes, list[SimBotObjectAttributes]]
+ annotation_id: int
+ image_index: int = 0
+ room_name: Optional[str] = None
+ augmentation_metadata: Optional[dict[str, Any]] = None
+
+
+class SimBotPlannerInstance(BaseInstance):
+ """Basemodel for the high-level planner dataset."""
+
+ mission_id: str
+ task_description: str
+ instructions: list[str]
+
+ @property
+ def modality(self) -> MediaType:
+ """Returns the modality for the given instance.
+
+ SimBot has multicam views because of the look-around action which returns 4 images.
+ """
+ return MediaType.multicam
+
+ @property
+ def features_path(self) -> list[Path]:
+ """Returns the path to the features for the current instruction."""
+ return []
diff --git a/src/emma_datasets/datamodels/datasets/utils/vqa_v2_utils.py b/src/emma_datasets/datamodels/datasets/utils/vqa_v2_utils.py
new file mode 100644
index 0000000..bec23ee
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/utils/vqa_v2_utils.py
@@ -0,0 +1,208 @@
+"""Normalize VQA-v2 answers.
+
+From the official evaluation code at https://github.com/GT-Vision-
+Lab/VQA/blob/master/PythonEvaluationTools/vqaEvaluation/vqaEval.py.
+"""
+import re
+
+
+contractions = {
+ "aint": "ain't",
+ "arent": "aren't",
+ "cant": "can't",
+ "couldve": "could've",
+ "couldnt": "couldn't",
+ "couldn'tve": "couldn't've",
+ "couldnt've": "couldn't've",
+ "didnt": "didn't",
+ "doesnt": "doesn't",
+ "dont": "don't",
+ "hadnt": "hadn't",
+ "hadnt've": "hadn't've",
+ "hadn'tve": "hadn't've",
+ "hasnt": "hasn't",
+ "havent": "haven't",
+ "hed": "he'd",
+ "hed've": "he'd've",
+ "he'dve": "he'd've",
+ "hes": "he's",
+ "howd": "how'd",
+ "howll": "how'll",
+ "hows": "how's",
+ "Id've": "I'd've",
+ "I'dve": "I'd've",
+ "Im": "I'm",
+ "Ive": "I've",
+ "isnt": "isn't",
+ "itd": "it'd",
+ "itd've": "it'd've",
+ "it'dve": "it'd've",
+ "itll": "it'll",
+ "let's": "let's",
+ "maam": "ma'am",
+ "mightnt": "mightn't",
+ "mightnt've": "mightn't've",
+ "mightn'tve": "mightn't've",
+ "mightve": "might've",
+ "mustnt": "mustn't",
+ "mustve": "must've",
+ "neednt": "needn't",
+ "notve": "not've",
+ "oclock": "o'clock",
+ "oughtnt": "oughtn't",
+ "ow's'at": "'ow's'at",
+ "'ows'at": "'ow's'at",
+ "'ow'sat": "'ow's'at",
+ "shant": "shan't",
+ "shed've": "she'd've",
+ "she'dve": "she'd've",
+ "she's": "she's",
+ "shouldve": "should've",
+ "shouldnt": "shouldn't",
+ "shouldnt've": "shouldn't've",
+ "shouldn'tve": "shouldn't've",
+ "somebody'd": "somebodyd",
+ "somebodyd've": "somebody'd've",
+ "somebody'dve": "somebody'd've",
+ "somebodyll": "somebody'll",
+ "somebodys": "somebody's",
+ "someoned": "someone'd",
+ "someoned've": "someone'd've",
+ "someone'dve": "someone'd've",
+ "someonell": "someone'll",
+ "someones": "someone's",
+ "somethingd": "something'd",
+ "somethingd've": "something'd've",
+ "something'dve": "something'd've",
+ "somethingll": "something'll",
+ "thats": "that's",
+ "thered": "there'd",
+ "thered've": "there'd've",
+ "there'dve": "there'd've",
+ "therere": "there're",
+ "theres": "there's",
+ "theyd": "they'd",
+ "theyd've": "they'd've",
+ "they'dve": "they'd've",
+ "theyll": "they'll",
+ "theyre": "they're",
+ "theyve": "they've",
+ "twas": "'twas",
+ "wasnt": "wasn't",
+ "wed've": "we'd've",
+ "we'dve": "we'd've",
+ "weve": "we've",
+ "werent": "weren't",
+ "whatll": "what'll",
+ "whatre": "what're",
+ "whats": "what's",
+ "whatve": "what've",
+ "whens": "when's",
+ "whered": "where'd",
+ "wheres": "where's",
+ "whereve": "where've",
+ "whod": "who'd",
+ "whod've": "who'd've",
+ "who'dve": "who'd've",
+ "wholl": "who'll",
+ "whos": "who's",
+ "whove": "who've",
+ "whyll": "why'll",
+ "whyre": "why're",
+ "whys": "why's",
+ "wont": "won't",
+ "wouldve": "would've",
+ "wouldnt": "wouldn't",
+ "wouldnt've": "wouldn't've",
+ "wouldn'tve": "wouldn't've",
+ "yall": "y'all",
+ "yall'll": "y'all'll",
+ "y'allll": "y'all'll",
+ "yall'd've": "y'all'd've",
+ "y'alld've": "y'all'd've",
+ "y'all'dve": "y'all'd've",
+ "youd": "you'd",
+ "youd've": "you'd've",
+ "you'dve": "you'd've",
+ "youll": "you'll",
+ "youre": "you're",
+ "youve": "you've",
+}
+digit_map = {
+ "none": "0",
+ "zero": "0",
+ "one": "1",
+ "two": "2",
+ "three": "3",
+ "four": "4",
+ "five": "5",
+ "six": "6",
+ "seven": "7",
+ "eight": "8",
+ "nine": "9",
+ "ten": "10",
+}
+articles = ["a", "an", "the"]
+
+
+period_strip = re.compile(r"(?!<=\d)(\.)(?!\d)")
+comma_strip = re.compile(r"(\d)(\,)(\d)")
+punctuations = [
+ ";",
+ "/",
+ "[",
+ "]",
+ '"',
+ "{",
+ "}",
+ "(",
+ ")",
+ "=",
+ "+",
+ "\\",
+ "_",
+ "-",
+ ">",
+ "<",
+ "@",
+ "`",
+ ",",
+ "?",
+ "!",
+]
+
+
+def normalize_answer(answer: str) -> str:
+ """Normalize a VQA answer."""
+ answer = answer.replace("\n", " ")
+ answer = answer.replace("\t", " ")
+ answer = answer.strip()
+ answer = process_digit_article(process_punctuation(answer))
+ return answer
+
+
+def process_punctuation(in_text: str) -> str:
+ """Process the answer punctuation."""
+ out_text = in_text
+ for punct in punctuations:
+ punct_cond1 = f"{punct} " in in_text or f" {punct}" in in_text
+ punct_cond2 = re.search(comma_strip, in_text) is not None
+ if punct_cond1 or punct_cond2:
+ out_text = out_text.replace(punct, "")
+ else:
+ out_text = out_text.replace(punct, " ")
+ out_text = period_strip.sub("", out_text, re.UNICODE)
+ return out_text
+
+
+def process_digit_article(in_text: str) -> str:
+ """Preprocess digits and articles."""
+ out_text = []
+ for word in in_text.lower().split():
+ word = digit_map.setdefault(word, word)
+ if word not in articles:
+ out_text.append(word)
+
+ for word_id, word in enumerate(out_text): # noqa: WPS440
+ out_text[word_id] = contractions.get(word, word)
+ return " ".join(out_text)
diff --git a/src/emma_datasets/datamodels/datasets/visual_genome.py b/src/emma_datasets/datamodels/datasets/visual_genome.py
new file mode 100644
index 0000000..91f5260
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/visual_genome.py
@@ -0,0 +1,36 @@
+from typing import Optional
+
+from pydantic import BaseModel, HttpUrl
+
+from emma_datasets.datamodels.constants import DatasetSplit
+
+
+class VgImageMetadata(BaseModel, frozen=True):
+ """Image metadata for Visual Genome scene."""
+
+ image_id: str
+ width: int
+ height: int
+ coco_id: Optional[str]
+ flickr_id: Optional[str]
+ url: HttpUrl
+ dataset_split: Optional[DatasetSplit]
+
+
+class VgRegion(BaseModel):
+ """Visual Genome region."""
+
+ region_id: str
+ width: int
+ height: int
+ image_id: str
+ phrase: str
+ y: int
+ x: int
+
+
+class VgImageRegions(BaseModel):
+ """Regions for Visual Genome Image."""
+
+ id: str
+ regions: list[VgRegion]
diff --git a/src/emma_datasets/datamodels/datasets/vqa_v2.py b/src/emma_datasets/datamodels/datasets/vqa_v2.py
new file mode 100644
index 0000000..bcacbb6
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/vqa_v2.py
@@ -0,0 +1,229 @@
+from collections import Counter
+from pathlib import Path
+from typing import Any, Literal, Optional
+
+from pydantic import BaseModel, PrivateAttr
+
+from emma_datasets.common import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import DatasetSplit, MediaType
+from emma_datasets.datamodels.datasets.utils.vqa_v2_utils import normalize_answer
+from emma_datasets.io import read_json
+
+
+settings = Settings()
+
+VQAv2AnnotationsType = list[dict[str, Any]]
+
+
+class VQAv2AnnotationPaths(BaseModel):
+ """VQA-v2 annotation paths for a dataset split."""
+
+ split: DatasetSplit
+ questions_path: Path
+ answers_path: Optional[Path]
+
+
+def get_vqa_v2_annotation_paths(vqa_v2_instances_base_dir: Path) -> list[VQAv2AnnotationPaths]:
+ """Get annotation paths for all VQA-v2 splits."""
+ vqa_v2_dir_paths = [
+ VQAv2AnnotationPaths(
+ split=DatasetSplit.train,
+ questions_path=vqa_v2_instances_base_dir.joinpath(
+ "v2_OpenEnded_mscoco_train2014_questions.json"
+ ),
+ answers_path=vqa_v2_instances_base_dir.joinpath(
+ "v2_mscoco_train2014_annotations.json"
+ ),
+ ),
+ VQAv2AnnotationPaths(
+ split=DatasetSplit.valid,
+ questions_path=vqa_v2_instances_base_dir.joinpath(
+ "v2_OpenEnded_mscoco_val2014_questions.json"
+ ),
+ answers_path=vqa_v2_instances_base_dir.joinpath("v2_mscoco_val2014_annotations.json"),
+ ),
+ VQAv2AnnotationPaths(
+ split=DatasetSplit.test_dev,
+ questions_path=vqa_v2_instances_base_dir.joinpath(
+ "v2_OpenEnded_mscoco_test-dev2015_questions.json"
+ ),
+ answers_path=None,
+ ),
+ VQAv2AnnotationPaths(
+ split=DatasetSplit.test,
+ questions_path=vqa_v2_instances_base_dir.joinpath(
+ "v2_OpenEnded_mscoco_test2015_questions.json"
+ ),
+ answers_path=None,
+ ),
+ ]
+ return vqa_v2_dir_paths
+
+
+def read_vqa_v2_json(
+ annotation_path: Path, annotation_type: Literal["questions", "annotations"]
+) -> dict[str, Any]:
+ """Load the VQA-v2 annotations as a dictionary with question ids as keys."""
+ annotation_list = read_json(annotation_path)[annotation_type]
+ annotations = {str(instance["question_id"]): instance for instance in annotation_list}
+ return annotations
+
+
+class VQAv2Target(BaseModel):
+ """VQA-v2 answers including the answer id and score."""
+
+ answer: str
+ target_id: Optional[int]
+ score: Optional[float]
+
+
+def vqa_v2_score(count: int) -> float:
+ """VQA-v2 includes 10 answers for each question.
+
+ Scores are assigned as follows:
+ - 0.3 if the answer appears once
+ - 0.6 if the answer appears twice
+ - 0.9 if the answer appears three times
+ - 1.0 if the answer appears more than three times
+ """
+ return min(1.0, round(0.3 * count, 1)) # noqa: WPS432
+
+
+def prepare_training_targets(answers: list[str], ans2label: dict[str, int]) -> list[VQAv2Target]:
+ """Compute answer VQA scores for answers in the predifined candidates."""
+ targets = []
+ for answer, count in Counter(answers).items():
+ label = ans2label.get(answer, -1)
+ if label > 0:
+ targets.append(
+ VQAv2Target(
+ target_id=label,
+ score=vqa_v2_score(count),
+ answer=answer,
+ )
+ )
+ return targets
+
+
+def merge_vqa_v2_annotations(
+ questions: dict[str, Any], all_answers: dict[str, Any]
+) -> dict[str, Any]:
+ """Merge question and answer annotations for VQA-v2."""
+ ans2label_path = settings.paths.constants.joinpath("vqa_v2_ans2label.json")
+ ans2label = read_json(ans2label_path)
+ for question_id in questions.keys():
+ answers = all_answers.get(question_id, None)
+ if answers is None:
+ raise AssertionError(f"Annotations for question {question_id} not found!")
+ questions[question_id]["answer_type"] = answers.get("answer_type", None)
+ questions[question_id]["question_type"] = answers.get("question_type", None)
+ # Keep only the answers, discard the answer condfindence and id
+ questions[question_id]["answers"] = [
+ normalize_answer(answer["answer"]) for answer in answers["answers"]
+ ]
+ # All VQA-v2 instances should have 10 answers
+ if len(questions[question_id]["answers"]) != 10:
+ raise AssertionError(
+ f"Found {len(questions[question_id]['answers'])} answers instead of 10!"
+ )
+
+ questions[question_id]["training_targets"] = prepare_training_targets(
+ questions[question_id]["answers"], ans2label
+ )
+
+ return questions
+
+
+def load_vqa_v2_annotations(
+ questions_path: Path,
+ answers_path: Optional[Path],
+) -> VQAv2AnnotationsType:
+ """Load question and answer annotations for VQA-v2.
+
+ Question and answer annotations are saved in separate files, but they can be merged based on
+ their unique question id.
+ """
+ questions = read_vqa_v2_json(questions_path, "questions")
+
+ if answers_path is not None:
+ answers = read_vqa_v2_json(answers_path, "annotations")
+ questions = merge_vqa_v2_annotations(questions=questions, all_answers=answers)
+
+ return list(questions.values())
+
+
+def resplit_vqa_v2_annotations(
+ vqa_v2_instances_base_dir: Path,
+ train_annotations: VQAv2AnnotationsType,
+ valid_annotations: VQAv2AnnotationsType,
+) -> tuple[VQAv2AnnotationsType, VQAv2AnnotationsType]:
+ """Resplit train and valiadtion data to use more data for training.
+
+ It is common practice to train on both training and validation VQA-v2 data to boost
+ performance. Following UNITER (
+ https://github.com/ChenRocks/UNITER),
+ we keep 26K samples for
+ validation and add the rest to the training set.
+ """
+ valid_ids_path = vqa_v2_instances_base_dir.joinpath("vqa_v2_valid_resplit.json")
+ if not valid_ids_path.exists():
+ raise AssertionError(
+ f"{valid_ids_path} does not exist. Download the validation ids from s3."
+ )
+ vqa_valid_question_ids = read_json(valid_ids_path)["question_ids"]
+ new_valid_annotations = []
+ for annotation in valid_annotations:
+ question_id = annotation["question_id"]
+ if isinstance(question_id, int):
+ question_id = str(question_id)
+ if question_id in vqa_valid_question_ids:
+ new_valid_annotations.append(annotation)
+ else:
+ train_annotations.append(annotation)
+
+ return train_annotations, new_valid_annotations
+
+
+def load_vqa_visual_genome_annotations(vqa_v2_instances_base_dir: Path) -> VQAv2AnnotationsType:
+ """Load additional visual genome data.
+
+ We use the preprocessed VG-VQA annotations from MCAN (https://github.com/MILVLG/mcan-vqa).
+ """
+ vg_questions_path = vqa_v2_instances_base_dir.joinpath("VG_questions.json")
+ vg_answers_path = vqa_v2_instances_base_dir.joinpath("VG_annotations.json")
+ if not (vg_questions_path.exists() and vg_answers_path.exists()):
+ raise AssertionError("VG annotation paths do not exist.")
+ return load_vqa_v2_annotations(
+ questions_path=vg_questions_path,
+ answers_path=vg_answers_path,
+ )
+
+
+class VQAv2Instance(BaseInstance):
+ """VQA-v2 Instance."""
+
+ image_id: str
+ question_id: str
+ question: str
+ question_type: Optional[str]
+ answers: Optional[list[str]]
+ answer_type: Optional[str]
+ training_targets: Optional[list[VQAv2Target]]
+ _features_path: Path = PrivateAttr()
+
+ def __init__(self, **data: Any) -> None:
+ super().__init__(**data)
+ self._features_path = settings.paths.coco_features.joinpath( # noqa: WPS601
+ f"{self.image_id.zfill(12)}.pt" # noqa: WPS432
+ )
+
+ @property
+ def modality(self) -> MediaType:
+ """Get the modality of the instance."""
+ return MediaType.image
+
+ @property
+ def features_path(self) -> Path:
+ """Get the path to the features for this instance."""
+ return self._features_path
diff --git a/src/emma_datasets/datamodels/datasets/winoground.py b/src/emma_datasets/datamodels/datasets/winoground.py
new file mode 100644
index 0000000..63d7618
--- /dev/null
+++ b/src/emma_datasets/datamodels/datasets/winoground.py
@@ -0,0 +1,32 @@
+from pathlib import Path
+from typing import Union
+
+from PIL.Image import Image
+
+from emma_datasets.common.settings import Settings
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import MediaType
+
+
+class WinogroundInstance(BaseInstance):
+ """A dataclass for the Winoground benchmark."""
+
+ id: str
+ image_0: Image # noqa: WPS114
+ image_1: Image # noqa: WPS114
+ caption_0: str # noqa: WPS114
+ caption_1: str # noqa: WPS114
+ tag: str
+ secondary_tag: str
+ num_main_preds: int
+ collapsed_tag: str
+
+ @property
+ def modality(self) -> MediaType:
+ """Returns the data modality for Winoground."""
+ return MediaType.image
+
+ @property
+ def features_path(self) -> Union[Path, list[Path]]:
+ """Returns the features path for Winoground images."""
+ return Settings().paths.winoground_features.joinpath(f"{self.id}.pt")
diff --git a/src/emma_datasets/datamodels/generics.py b/src/emma_datasets/datamodels/generics.py
new file mode 100644
index 0000000..031dd82
--- /dev/null
+++ b/src/emma_datasets/datamodels/generics.py
@@ -0,0 +1,14 @@
+from typing import Generic, Optional, TypeVar
+
+from pydantic.generics import GenericModel
+
+
+Low = TypeVar("Low")
+High = TypeVar("High")
+
+
+class GenericActionTrajectory(GenericModel, Generic[Low, High]):
+ """Generic Action Trajectory for various datasets."""
+
+ low_level_actions: list[Low]
+ high_level_actions: Optional[list[High]]
diff --git a/src/emma_datasets/datamodels/instance.py b/src/emma_datasets/datamodels/instance.py
new file mode 100644
index 0000000..6bf6b81
--- /dev/null
+++ b/src/emma_datasets/datamodels/instance.py
@@ -0,0 +1,103 @@
+from pathlib import Path
+from typing import Optional, Union
+
+from emma_datasets.datamodels.annotations import (
+ ActionTrajectory,
+ Caption,
+ QuestionAnswerPair,
+ Region,
+ SceneGraph,
+ TaskDescription,
+)
+from emma_datasets.datamodels.base_model import BaseInstance
+from emma_datasets.datamodels.constants import DatasetModalityMap, DatasetName, MediaType
+from emma_datasets.datamodels.dataset_metadata import DatasetMetadata
+
+
+DatasetDict = dict[DatasetName, DatasetMetadata]
+
+
+class MultiSourceInstanceMixin(BaseInstance):
+ """Mixin class exposing functionalities useful for instances based on multiple datasets."""
+
+ dataset: DatasetDict
+ captions: Optional[list[Caption]]
+ qa_pairs: Optional[list[QuestionAnswerPair]]
+ regions: Optional[list[Region]]
+ scene_graph: Optional[SceneGraph]
+ trajectory: Optional[ActionTrajectory]
+ task_description: Optional[list[TaskDescription]]
+
+ @property
+ def modality(self) -> MediaType:
+ """Returns the modality of the instance."""
+ instance_modalities = {
+ DatasetModalityMap[dataset_name] for dataset_name in self.dataset.keys()
+ }
+
+ if len(instance_modalities) > 1:
+ return max(instance_modalities)
+
+ return next(iter(instance_modalities))
+
+ @property
+ def source_paths(self) -> Union[Path, list[Path], None]:
+ """Get source paths for this instance.
+
+ Since an instance can be mapped to more than one dataset, we assume that the source media
+ is going to be identical across them. Therefore, it doesn't matter which dataset's image
+ file we use since they should be identical.
+ """
+ return next(iter(self.dataset.values())).paths
+
+ @property
+ def features_path(self) -> Union[Path, list[Path]]:
+ """Get the path to the features for this instance.
+
+ If the instance is connected to more than one dataset, just get any one feature file.
+ """
+ all_feature_paths = (metadata.features_path for metadata in self.dataset.values())
+ return next(all_feature_paths)
+
+ @property
+ def is_full_trajectory(self) -> bool:
+ """Whether the instance corresponds to a trajectory of multiple subgoals."""
+ if self.modality == MediaType.image:
+ return False
+ return isinstance(self.features_path, list) and len(self.features_path) > 1
+
+
+class Instance(MultiSourceInstanceMixin):
+ """Instance within the dataset."""
+
+ captions: Optional[list[Caption]]
+ qa_pairs: Optional[list[QuestionAnswerPair]]
+ regions: Optional[list[Region]]
+ scene_graph: Optional[SceneGraph]
+ trajectory: Optional[ActionTrajectory]
+ task_description: Optional[list[TaskDescription]]
+
+ @property
+ def language_annotations(self) -> list[str]:
+ """Derives all the language annotations associated with a given instance."""
+ lang_data_iterable = []
+
+ if self.captions is not None:
+ lang_data_iterable.extend([caption.get_language_data() for caption in self.captions])
+
+ if self.qa_pairs is not None:
+ lang_data_iterable.extend([qa_pair.get_language_data() for qa_pair in self.qa_pairs])
+
+ if self.regions is not None:
+ lang_data_iterable.extend([region.get_language_data() for region in self.regions])
+
+ if self.scene_graph is not None:
+ lang_data_iterable.extend(self.scene_graph.get_language_data())
+
+ if self.trajectory is not None:
+ lang_data_iterable.extend(self.trajectory.get_language_data())
+
+ if self.task_description is not None:
+ lang_data_iterable.extend([desc.get_language_data() for desc in self.task_description])
+
+ return lang_data_iterable
diff --git a/src/emma_datasets/db/__init__.py b/src/emma_datasets/db/__init__.py
new file mode 100644
index 0000000..45be1c3
--- /dev/null
+++ b/src/emma_datasets/db/__init__.py
@@ -0,0 +1,2 @@
+from emma_datasets.db.dataset_db import DatasetDb
+from emma_datasets.db.storage import DataStorage, JsonStorage, StorageType, TorchStorage
diff --git a/src/emma_datasets/db/dataset_db.py b/src/emma_datasets/db/dataset_db.py
new file mode 100644
index 0000000..37c9cdb
--- /dev/null
+++ b/src/emma_datasets/db/dataset_db.py
@@ -0,0 +1,261 @@
+import sqlite3
+from collections.abc import Iterable, Iterator
+from pathlib import Path
+from types import TracebackType
+from typing import Any, Optional, Union
+
+from emma_datasets.common.logger import get_logger
+from emma_datasets.db.storage import DataStorage, JsonStorage, StorageType, TorchStorage
+
+
+logger = get_logger(__name__)
+
+CREATE_DATA_TABLE = """
+ CREATE TABLE dataset (data_id INTEGER PRIMARY KEY, example_id TEXT, data BLOB);
+"""
+
+INSERT_DATA_TABLE_FORMAT = """
+ INSERT INTO dataset VALUES (?, ?, ?);
+"""
+
+SELECT_INDEX_FORMAT = """
+ SELECT data FROM dataset WHERE data_id = ?;
+"""
+
+SELECT_EXID_FORMAT = """
+ SELECT data FROM dataset WHERE example_id = ?;
+"""
+
+COUNT_INSTANCES = """
+ SELECT COUNT(data_id) from dataset;
+"""
+
+DROP_TABLE = """
+ DROP TABLE IF EXISTS dataset;
+"""
+
+CREATE_ID_INDEX = """
+ CREATE INDEX id_index ON dataset (data_id);
+"""
+
+CREATE_EXID_INDEX = """
+ CREATE INDEX example_id_index ON dataset (example_id);
+"""
+
+DELETE_EXAMPLES = """
+ DELETE FROM dataset WHERE example_id = ?;
+"""
+
+
+class DatasetDb:
+ """A class that mimics the dict interface to access to an SQLite database storing a dataset."""
+
+ def __init__(
+ self,
+ db_dir: Union[str, Path],
+ readonly: bool = True,
+ batch_size: int = 512,
+ storage_type: StorageType = StorageType.json,
+ ) -> None:
+ if isinstance(db_dir, str):
+ db_dir = Path(db_dir)
+
+ self.db_dir = db_dir
+ self.readonly = readonly
+
+ # if we're opening a dataset in read-only mode, we can safely remove this guard
+ self.check_same_thread = not self.readonly
+ if self.readonly and not self.db_dir.exists():
+ raise ValueError(
+ f"You specified a option but the path to the DB doesn't exist!\nDatabase path: {self.db_dir}"
+ )
+ self._batch_size = batch_size
+ self._storage_type = self._get_storage_type(storage_type)
+
+ self._env: sqlite3.Connection
+ self._write_count: int = 0
+ self._cache: list[Any] = []
+
+ def iterkeys(self) -> Iterable[tuple[int, str]]:
+ """Returns an iterator over the keys of the dataset."""
+ self.open()
+
+ yield from (
+ (data_id, example_id)
+ for data_id, example_id in self._env.execute("SELECT data_id, example_id FROM dataset")
+ )
+
+ def open(self) -> None:
+ """Opens the connection to the database, if it's not open already."""
+ if not self._is_open:
+ self._open()
+
+ def close(self) -> None:
+ """Closes the underlying connection with the SQLite database."""
+ if self._is_open:
+ self.flush()
+ self._env.close()
+
+ def flush(self) -> None:
+ """Finalises the serialisation of the cached instances to the database."""
+ if self._write_count > 0:
+ # there are some pending transactions that have to be committed
+ with self._env:
+ self._env.executemany(INSERT_DATA_TABLE_FORMAT, self._cache)
+
+ self._cache.clear()
+ self._write_count = 0
+
+ def update(self, data_id: int, example_id: str) -> None:
+ """Updates the data_id column with a new one for the example."""
+ with self._env:
+ self._env.execute(
+ "UPDATE dataset SET data_id = ? WHERE example_id = ?", (data_id, example_id)
+ )
+
+ def __enter__(self) -> "DatasetDb":
+ """Returns the current database when context manager is initialised."""
+ return self
+
+ def __exit__(
+ self,
+ exc_type: Optional[type[BaseException]],
+ exc_val: Optional[BaseException],
+ exc_tb: Optional[TracebackType],
+ ) -> None:
+ """Closes the connection to the database when exiting the context manager."""
+ self.close()
+
+ def __del__(self) -> None: # noqa: WPS603
+ """Closes the connection to the database when object goes out of scope."""
+ self.close()
+
+ def __iter__(self) -> Iterator[tuple[int, str, Any]]:
+ """Iterator over the instances of the database."""
+ self.open()
+
+ yield from (
+ (data_id, example_id, self._storage_type.decompress(data_buf))
+ for data_id, example_id, data_buf in self._env.execute("SELECT * FROM dataset")
+ )
+
+ def __contains__(self, key: Union[int, tuple[int, str]]) -> bool:
+ """Verifies whether a given key is contained in the dataset."""
+ self.open()
+
+ if isinstance(key, int):
+ # in this case we assume we're using directly an index
+ query_format = SELECT_INDEX_FORMAT
+ else:
+ query_format = SELECT_EXID_FORMAT
+
+ db_result = self._env.execute(query_format, (str(key),))
+
+ return db_result.fetchone() is not None
+
+ def __getitem__(self, key: Union[int, tuple[int, str]]) -> Any:
+ """Returns the object associated with a given key."""
+ self.open()
+
+ if isinstance(key, int):
+ # in this case we assume we're using directly an index
+ query_format = SELECT_INDEX_FORMAT
+ else:
+ query_format = SELECT_EXID_FORMAT
+
+ db_result = self._env.execute(query_format, (str(key),))
+
+ db_item = None
+ for res in db_result:
+ db_item = res[0]
+
+ if db_item is None:
+ raise KeyError(f"No record for key: '{key}'")
+
+ return self._storage_type.decompress(db_item)
+
+ def __len__(self) -> int:
+ """Returns the number of instances in the database."""
+ self.open()
+
+ self.flush()
+ res_it = self._env.execute(COUNT_INSTANCES)
+
+ res = next(res_it)
+
+ return res[0] if res is not None else 0
+
+ def __delitem__(self, key: tuple[int, str]) -> None: # noqa: WPS603
+ """Removes an instance from the database having a specific key."""
+ self.open()
+
+ # there are some pending transactions that have to be committed
+ with self._env:
+ self._env.execute(DELETE_EXAMPLES, (key,))
+
+ def __setitem__(self, key: tuple[int, str], db_value: Any) -> None:
+ """Inserts a new instance in the database using the specified (key, value)."""
+ self.open()
+
+ if self.readonly:
+ raise ValueError("readonly text DB")
+
+ data_id, example_id = key
+
+ data = self._storage_type.compress(db_value)
+
+ self._write_count += 1
+ self._cache.append((data_id, example_id, data))
+
+ if self._write_count > 1 and self._write_count % self._batch_size == 0:
+ self.flush()
+
+ def _get_storage_type(self, storage_type: StorageType) -> DataStorage:
+ """Returns the data storage used to serialise the instances of this dataset."""
+ if storage_type == StorageType.json:
+ return JsonStorage()
+
+ if storage_type == StorageType.torch:
+ return TorchStorage()
+
+ raise NotImplementedError(f"Invalid data storage type: {storage_type}")
+
+ def _create_tables(self) -> None:
+ """Generates the underlying database tables, if they don't exist."""
+ with self._env:
+ self._env.execute(DROP_TABLE)
+
+ with self._env:
+ self._env.execute(CREATE_DATA_TABLE)
+
+ def _create_indexes(self) -> None:
+ """Creates database indexes on the data_id and example_id columns."""
+ with self._env:
+ self._env.execute(CREATE_ID_INDEX)
+
+ with self._env:
+ self._env.execute(CREATE_EXID_INDEX)
+
+ @property
+ def _is_open(self) -> bool:
+ """Checks whether the connection with the database is open."""
+ try:
+ self._env.cursor()
+ return True
+ except Exception:
+ return False
+
+ def _open(self) -> None:
+ """Opens the connection to the underlying SQLite database."""
+ self._env = sqlite3.connect(self.db_dir, check_same_thread=self.check_same_thread)
+
+ if self.readonly:
+ # training
+ self._write_count = 0
+ self._cache = []
+ else:
+ # prepro
+ self._write_count = 0
+ self._cache = []
+ self._create_tables()
+ self._create_indexes()
diff --git a/src/emma_datasets/db/storage.py b/src/emma_datasets/db/storage.py
new file mode 100644
index 0000000..257921a
--- /dev/null
+++ b/src/emma_datasets/db/storage.py
@@ -0,0 +1,101 @@
+import io
+from abc import ABC, abstractmethod
+from enum import Enum
+from lzma import compress, decompress
+from typing import Any
+
+import orjson
+from pydantic import BaseModel
+
+from emma_datasets.common.logger import get_logger
+
+
+logger = get_logger(__name__)
+
+try:
+ import torch # noqa: WPS433
+except ImportError:
+ logger.warning(
+ "Unable to import `torch`. You will NOT be able to use the `TorchDataStorage` class. "
+ + "Consider installing it if you want to use it!"
+ )
+
+
+class StorageType(Enum):
+ """Different serialisation formats for objects in SQLite database."""
+
+ torch = "torch"
+ json = "json"
+
+
+class DataStorage(ABC):
+ """Abstract class for converting data object to bytes for the SQLite database.
+
+ Data are by default stored as BLOB type in the database.
+ """
+
+ storage_type: StorageType
+
+ @abstractmethod
+ def decompress(self, data_buf: bytes) -> Any:
+ """Given a byte representation of an object, returns the original object representation."""
+ raise NotImplementedError
+
+ @abstractmethod
+ def compress(self, data: Any) -> bytes:
+ """Given an object representation, returns a compressed byte representation."""
+ raise NotImplementedError
+
+
+class JsonStorage(DataStorage):
+ """Uses orjson serialisation to convert Python object to bytes."""
+
+ storage_type: StorageType = StorageType.json
+
+ def decompress(self, data_buf: bytes) -> Any:
+ """Decompress using LZMA and then loads the underlying bytes using orjson."""
+ return orjson.loads(decompress(data_buf))
+
+ def compress(self, data: Any) -> bytes:
+ """Uses orjson + LZMA compression to generate a byte representation of the object.
+
+ If the JSON data has already been compressed into bytes, then it will bypass the
+ compression and return it quick.
+ """
+ if isinstance(data, bytes):
+ return data
+
+ return compress(
+ orjson.dumps(
+ data,
+ default=self._serialize_custom_types,
+ option=orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY,
+ )
+ )
+
+ def _serialize_custom_types(self, custom_obj: Any) -> Any:
+ if isinstance(custom_obj, BaseModel):
+ return custom_obj.json(by_alias=True)
+
+ raise TypeError
+
+
+class TorchStorage(DataStorage):
+ """Data storage that uses the PyTorch Pickle format for serialising Python objects."""
+
+ storage_type: StorageType = StorageType.torch
+
+ def decompress(self, data_buf: bytes) -> Any:
+ """Loads an object from a pytorch-pickle representation."""
+ buffer = io.BytesIO(data_buf)
+
+ return torch.load(buffer)
+
+ def compress(self, data: Any) -> bytes:
+ """Given an object, returns its byte representation using pytorch-pickle."""
+ buffer = io.BytesIO()
+
+ torch.save(data, buffer)
+ buffer.seek(0)
+
+ return buffer.read()
diff --git a/src/emma_datasets/io/__init__.py b/src/emma_datasets/io/__init__.py
new file mode 100644
index 0000000..47b05e5
--- /dev/null
+++ b/src/emma_datasets/io/__init__.py
@@ -0,0 +1,6 @@
+from emma_datasets.io.archive import extract_archive
+from emma_datasets.io.csv import read_csv
+from emma_datasets.io.json import read_json, write_json
+from emma_datasets.io.parquet import read_parquet
+from emma_datasets.io.paths import InputPathType, get_all_file_paths
+from emma_datasets.io.txt import read_txt
diff --git a/src/emma_datasets/io/archive.py b/src/emma_datasets/io/archive.py
new file mode 100644
index 0000000..140743f
--- /dev/null
+++ b/src/emma_datasets/io/archive.py
@@ -0,0 +1,208 @@
+import logging
+import tarfile
+from collections.abc import Iterator
+from pathlib import Path
+from typing import Optional, TypeVar
+from zipfile import ZipFile, ZipInfo
+
+from py7zr import SevenZipFile
+from rich.progress import Progress, TaskID
+
+
+logger = logging.getLogger(__name__)
+
+T = TypeVar("T", tarfile.TarInfo, ZipInfo)
+
+
+class ExtractArchive:
+ """Function to extract files from the archive.
+
+ Grouped all the various methods together under this class because otherwise that makes the file
+ very messy.
+ """
+
+ def __call__(
+ self,
+ path: Path,
+ task_id: TaskID,
+ progress: Progress,
+ output_dir: Optional[Path] = None,
+ move_files_to_output_dir: bool = False,
+ ) -> None:
+ """Extract all files from the provided archive.
+
+ Args:
+ path (Path): Path to the archive file.
+ task_id (TaskID): Task ID for the progress bar.
+ progress (Progress): An instance of a Rich progress bar.
+ output_dir (Path, optional): Output directory for the files extracted. Defaults to the
+ parent of the archive file if not specified.
+ move_files_to_output_dir (bool): Whether to move files to the output
+ directory, therefore removing any folder structure. Defaults to False.
+ """
+ self._verify_path_exists(path)
+
+ output_dir = output_dir if output_dir is not None else path.parent
+ output_dir.mkdir(parents=True, exist_ok=True)
+
+ if path.name.endswith(".zip"):
+ self.extract_from_zip(path, output_dir, task_id, progress, move_files_to_output_dir)
+
+ if path.name.endswith(".tar") or path.name.endswith(".tar.gz"):
+ self.extract_from_tar(path, output_dir, task_id, progress, move_files_to_output_dir)
+
+ if path.name.endswith(".7z"):
+ self.extract_from_7z(path, output_dir, task_id, progress)
+
+ progress.update(task_id, visible=False)
+ progress.console.log(f"Extracted {path.name}")
+
+ def extract_from_zip(
+ self,
+ path: Path,
+ output_dir: Path,
+ task_id: TaskID,
+ progress: Progress,
+ move_files_to_output_dir: bool,
+ ) -> None:
+ """Extract all files from within a zip archive."""
+ with ZipFile(path) as archive_file:
+ progress.update(task_id, visible=True, comment="Getting file list")
+
+ all_files = [
+ zipped_file for zipped_file in archive_file.infolist() if not zipped_file.is_dir()
+ ]
+
+ self._start_progress(progress, task_id, len(all_files))
+
+ archive_file.extractall(
+ output_dir,
+ members=self.members_iterator(
+ all_files,
+ file_name_attr="filename",
+ is_dir_attr="is_dir",
+ output_dir=output_dir,
+ task_id=task_id,
+ progress=progress,
+ move_files_to_output_dir=move_files_to_output_dir,
+ ),
+ )
+
+ def extract_from_tar(
+ self,
+ path: Path,
+ output_dir: Path,
+ task_id: TaskID,
+ progress: Progress,
+ move_files_to_output_dir: bool,
+ ) -> None:
+ """Extract all files from within a tar archive."""
+ with tarfile.open(path) as tar_file:
+ progress.update(task_id, visible=True, comment="Getting file list")
+
+ all_files = tar_file.getmembers()
+
+ self._start_progress(progress, task_id, len(all_files))
+
+ tar_file.extractall(
+ output_dir,
+ members=self.members_iterator(
+ members=all_files,
+ file_name_attr="name",
+ is_dir_attr="isdir",
+ output_dir=output_dir,
+ task_id=task_id,
+ progress=progress,
+ move_files_to_output_dir=move_files_to_output_dir,
+ ),
+ )
+
+ def extract_from_7z( # noqa: WPS114
+ self,
+ path: Path,
+ output_dir: Path,
+ task_id: TaskID,
+ progress: Progress,
+ ) -> None:
+ """Extract all files from within a 7z archive.
+
+ Uses slightly different logic because the functionality is from a package and not core
+ Python. Therefore, the same implementation within `members_iterator()` can't be directly
+ used.
+ """
+ progress.update(task_id, visible=True, comment="Opening file")
+ with SevenZipFile(path) as zip_file:
+ progress.update(task_id, visible=True, comment="Getting file list")
+
+ all_file_info = zip_file.list()
+
+ all_file_info = (
+ file_info for file_info in all_file_info if not file_info.is_directory
+ )
+
+ all_files = []
+
+ progress.update(task_id, visible=True, comment="Filtering file list")
+
+ for file_info in all_file_info:
+ all_files.append(file_info.filename)
+
+ current_task_total = progress.tasks[task_id].total
+ if current_task_total is not None:
+ progress.update(task_id, total=current_task_total + 1)
+
+ progress.start_task(task_id)
+
+ for file_name, binary_file in zip_file.read(targets=all_files).items():
+ progress.update(task_id, comment=f"Extracting {file_name}")
+
+ file_path = Path(file_name)
+ extracted_path = output_dir.joinpath(file_path.parent)
+ extracted_path.mkdir(parents=True, exist_ok=True)
+
+ with open(extracted_path.joinpath(file_path.name), "wb") as output_file:
+ output_file.write(binary_file.getbuffer())
+
+ progress.advance(task_id)
+
+ def members_iterator(
+ self,
+ members: list[T],
+ file_name_attr: str,
+ is_dir_attr: str,
+ output_dir: Path,
+ task_id: TaskID,
+ progress: Progress,
+ move_files_to_output_dir: bool,
+ ) -> Iterator[T]:
+ """Iterate through members of an archive, moving if needed and updating the progress."""
+ for member in members:
+ filename: str = getattr(member, file_name_attr)
+ progress.update(task_id, comment=f"Extracting {filename}")
+
+ yield member
+
+ if move_files_to_output_dir:
+ extracted_path = output_dir.joinpath(filename)
+
+ if not getattr(member, is_dir_attr)() and extracted_path.parent != output_dir:
+ extracted_path.rename(output_dir.joinpath(extracted_path.name))
+
+ progress.advance(task_id)
+
+ def _start_progress(self, progress: Progress, task_id: TaskID, updated_total: int) -> None:
+ progress.start_task(task_id)
+ current_task_total = progress.tasks[task_id].total
+ progress.update(
+ task_id,
+ visible=True,
+ total=current_task_total + updated_total if current_task_total is not None else None,
+ )
+
+ def _verify_path_exists(self, path: Path) -> None:
+ """Verify the file path exists, and warn if it doesn't."""
+ if not path.exists():
+ logger.warning(f"File [u]{path}[/] does not exist.")
+
+
+extract_archive = ExtractArchive().__call__ # noqa: WPS609
diff --git a/src/emma_datasets/io/csv.py b/src/emma_datasets/io/csv.py
new file mode 100644
index 0000000..58e5d98
--- /dev/null
+++ b/src/emma_datasets/io/csv.py
@@ -0,0 +1,17 @@
+import csv
+from pathlib import Path
+from typing import Union
+
+
+def read_csv(path: Union[str, Path]) -> list[dict[str, str]]:
+ """Read a CSV file and return a list of dictionaries.
+
+ Because of how the DictReader works, every cell per row is just a string. If you want to
+ convert it to a python object, you'll need to parse it or use `ast.literal_eval`. That is why
+ the return type annotation is the way it is.
+ """
+ with open(path, encoding="utf-8-sig") as csvfile:
+ reader = csv.DictReader(csvfile)
+ data = list(reader)
+
+ return data
diff --git a/src/emma_datasets/io/json.py b/src/emma_datasets/io/json.py
new file mode 100644
index 0000000..b86778a
--- /dev/null
+++ b/src/emma_datasets/io/json.py
@@ -0,0 +1,28 @@
+from pathlib import Path
+from typing import Any, Optional, Union
+
+import orjson
+
+
+DEFAULT_OPTIONS = orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_APPEND_NEWLINE
+
+
+def read_json(path: Union[str, Path]) -> Any:
+ """Read JSON file and return."""
+ with open(path) as json_file:
+ data = orjson.loads(json_file.read())
+ return data
+
+
+def write_json(path: Union[str, Path], data: Any) -> None:
+ """Write any data to a JSON file."""
+ with open(path, "wb") as save_file:
+ save_file.write(orjson.dumps(data, option=DEFAULT_OPTIONS))
+
+
+def orjson_dumps(v: Any, *, default: Optional[Any]) -> str:
+ """Convert Model to JSON string.
+
+ orjson.dumps returns bytes, to match standard json.dumps we need to decode.
+ """
+ return orjson.dumps(v, default=default, option=DEFAULT_OPTIONS).decode()
diff --git a/src/emma_datasets/io/parquet.py b/src/emma_datasets/io/parquet.py
new file mode 100644
index 0000000..8529146
--- /dev/null
+++ b/src/emma_datasets/io/parquet.py
@@ -0,0 +1,10 @@
+from pathlib import Path
+from typing import Union
+
+import pandas as pd
+
+
+def read_parquet(path: Union[str, Path]) -> pd.DataFrame:
+ """Read a parquet file using pandas."""
+ data = pd.read_parquet(path)
+ return data
diff --git a/src/emma_datasets/io/paths.py b/src/emma_datasets/io/paths.py
new file mode 100644
index 0000000..1cfe93f
--- /dev/null
+++ b/src/emma_datasets/io/paths.py
@@ -0,0 +1,53 @@
+import itertools
+from collections.abc import Iterable, Iterator
+from pathlib import Path
+from typing import Union
+
+
+InputPathType = Union[Iterable[str], Iterable[Path], str, Path]
+AnnotationPaths = Union[
+ Iterable[str],
+ Iterable[Path],
+ str,
+ Path,
+ Iterable[tuple[Path, Path]],
+]
+
+
+def get_paths_from_dir(dir_path: Path) -> Iterator[Path]:
+ """Get paths of all files from a directory."""
+ if not dir_path.is_dir():
+ raise RuntimeError("`dir_path` should point to a directory.")
+
+ paths_from_dir = dir_path.rglob("*.*")
+ files_from_dirs = (file_path for file_path in paths_from_dir if file_path.is_file())
+
+ return files_from_dirs
+
+
+def convert_strings_to_paths(string_paths: Iterable[str]) -> Iterable[Path]:
+ """Convert strings to Path objects."""
+ return [Path(path) for path in string_paths]
+
+
+def _get_all_paths(paths: Iterable[Path]) -> list[Path]:
+ non_dir_paths = (path for path in paths if path.is_file())
+ dir_paths = (path for path in paths if path.is_dir())
+
+ files_from_dirs = (get_paths_from_dir(dir_path) for dir_path in dir_paths)
+
+ return list(itertools.chain(non_dir_paths, *files_from_dirs))
+
+
+def get_all_file_paths(paths: AnnotationPaths) -> list[Path]:
+ """Get all file paths from string paths."""
+ if isinstance(paths, str):
+ paths = convert_strings_to_paths([paths])
+
+ if isinstance(paths, Path):
+ paths = [paths]
+
+ if isinstance(paths, Iterable) and all(isinstance(path, str) for path in paths):
+ paths = convert_strings_to_paths(paths) # type: ignore[arg-type]
+
+ return _get_all_paths(paths) # type: ignore[arg-type]
diff --git a/src/emma_datasets/io/txt.py b/src/emma_datasets/io/txt.py
new file mode 100644
index 0000000..5253fc9
--- /dev/null
+++ b/src/emma_datasets/io/txt.py
@@ -0,0 +1,10 @@
+from pathlib import Path
+from typing import Union
+
+
+def read_txt(path: Union[str, Path]) -> list[str]:
+ """Read a txt file and return a list of strings."""
+ with open(path) as fp:
+ raw_lines = [line.strip() for line in fp.readlines()]
+
+ return raw_lines
diff --git a/src/emma_datasets/parsers/__init__.py b/src/emma_datasets/parsers/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/emma_datasets/parsers/align_multiple_datasets.py b/src/emma_datasets/parsers/align_multiple_datasets.py
new file mode 100644
index 0000000..3234506
--- /dev/null
+++ b/src/emma_datasets/parsers/align_multiple_datasets.py
@@ -0,0 +1,175 @@
+import itertools
+from collections import ChainMap
+from collections.abc import Iterable, Iterator
+
+from rich.progress import Progress
+
+from emma_datasets.datamodels import DatasetMetadata, DatasetName
+from emma_datasets.parsers.dataset_aligner import DatasetAlignerReturn
+
+
+CommonDatasetMapping = dict[str, dict[DatasetName, DatasetMetadata]]
+
+
+class AlignMultipleDatasets:
+ """Align multiple aligned datasets, returning grouped of metadata per instance."""
+
+ def __init__(
+ self,
+ common_dataset: DatasetName,
+ progress: Progress,
+ description: str = "Merging datasets",
+ ) -> None:
+ self.common_dataset = common_dataset
+
+ self.progress = progress
+ self.task_id = progress.add_task(description, start=False, visible=False, comment="")
+
+ def __call__(
+ self, *aligned_metadata_iterable: DatasetAlignerReturn
+ ) -> Iterator[list[DatasetMetadata]]:
+ """Align metadata across the multiple datasets to a signle common dataset.
+
+ Args:
+ aligned_metadata_iterable (Iterable[DatasetAlignerReturn]): Iterable of any aligned
+ datasets which can be aligned to the common dataset.
+
+ Returns:
+ Iterator[list[DatasetMetadata]]: Generator which yield groups of metadata which can
+ form the basis of a new instance.
+ """
+ all_common_dataset_mapping = [
+ self._get_mapping_to_common_dataset(aligned_metadata)
+ for aligned_metadata in aligned_metadata_iterable
+ ]
+
+ aligned_common_ids = self.get_common_aligned_ids(all_common_dataset_mapping)
+ non_aligned_common_ids = self.get_non_aligned_common_ids(
+ all_common_dataset_mapping, aligned_common_ids
+ )
+
+ self.progress.reset(
+ self.task_id,
+ start=True,
+ total=self._calculate_total(all_common_dataset_mapping, aligned_metadata_iterable),
+ visible=True,
+ )
+
+ common_instances = self.get_all_common_instances(
+ all_common_dataset_mapping, aligned_common_ids
+ )
+ non_common_instances = self.get_all_non_common_instances(
+ all_common_dataset_mapping, aligned_common_ids
+ )
+ non_aligned_instances = self.get_all_non_alignable_instances(
+ aligned_metadata_iterable, non_aligned_common_ids
+ )
+
+ return itertools.chain(common_instances, non_common_instances, non_aligned_instances)
+
+ def get_all_common_instances(
+ self, all_common_dataset_mapping: list[CommonDatasetMapping], aligned_ids: set[str]
+ ) -> Iterator[list[DatasetMetadata]]:
+ """Get all scenes which align across all datasets."""
+ for aligned_id in aligned_ids:
+ instance = dict(
+ ChainMap(*(mapping[aligned_id] for mapping in all_common_dataset_mapping))
+ ).values()
+
+ self.progress.advance(self.task_id)
+ yield list(instance)
+
+ def get_all_non_common_instances(
+ self, all_common_dataset_mapping: list[CommonDatasetMapping], aligned_ids: set[str]
+ ) -> Iterator[list[DatasetMetadata]]:
+ """Get all instances which cannot be aligned with the common dataset."""
+ for mapping in all_common_dataset_mapping:
+ non_overlapping_ids = set(mapping.keys()) - aligned_ids
+
+ for non_common_id in non_overlapping_ids:
+ self.progress.advance(self.task_id)
+ yield list(mapping[non_common_id].values())
+
+ def get_all_non_alignable_instances(
+ self, aligned_metadata_iterable: Iterable[DatasetAlignerReturn], non_common_ids: set[str]
+ ) -> Iterator[list[DatasetMetadata]]:
+ """Get all instances which cannot be aligned."""
+ non_aligned_metadata = (metadata.non_aligned for metadata in aligned_metadata_iterable)
+
+ existing_common_dataset_ids = set() | non_common_ids
+
+ for non_aligned in itertools.chain.from_iterable(non_aligned_metadata):
+ if self.common_dataset in non_aligned:
+ metadata_id = non_aligned[self.common_dataset].id # noqa: WPS529
+
+ if metadata_id in existing_common_dataset_ids:
+ continue
+
+ existing_common_dataset_ids.add(metadata_id)
+
+ self.progress.advance(self.task_id)
+ yield list(non_aligned.values())
+
+ def get_common_aligned_ids(
+ self, all_common_dataset_mapping: list[CommonDatasetMapping]
+ ) -> set[str]:
+ """Get IDs of instances from the common dataset which are aligned across all datasets.
+
+ The IDs returned are for the `self.common_dataset`.
+ """
+ return set.intersection(*[set(mapping.keys()) for mapping in all_common_dataset_mapping])
+
+ def get_non_aligned_common_ids(
+ self, all_common_dataset_mapping: list[CommonDatasetMapping], aligned_common_ids: set[str]
+ ) -> set[str]:
+ """Get instance IDs which are aligned to the common dataset but not across all datasets.
+
+ In other words, this returns a set of IDs from the common dataset which ARE aligned to one
+ other dataset, but NOT ALL of the other datasets.
+ """
+ all_non_overlapping_ids = [
+ set(mapping.keys()) - aligned_common_ids for mapping in all_common_dataset_mapping
+ ]
+ return set.union(*all_non_overlapping_ids)
+
+ def _get_mapping_to_common_dataset(
+ self, aligned_metadata: DatasetAlignerReturn
+ ) -> CommonDatasetMapping:
+ """Get the mapping that connects each instance to the common dataset."""
+ return {
+ metadata[self.common_dataset].id: metadata for metadata in aligned_metadata.aligned
+ }
+
+ def _calculate_total(
+ self,
+ all_common_dataset_mapping: list[CommonDatasetMapping],
+ aligned_metadata_iterable: Iterable[DatasetAlignerReturn],
+ ) -> int:
+ """Calculate total number of instances that will be returned."""
+ aligned_common_ids = self.get_common_aligned_ids(all_common_dataset_mapping)
+
+ common_ids_aligned_to_other_dataset = self.get_non_aligned_common_ids(
+ all_common_dataset_mapping, aligned_common_ids
+ )
+
+ common_ids_not_aligned_to_any_dataset = {
+ metadata_dict[self.common_dataset].id
+ for metadata_list in aligned_metadata_iterable
+ for metadata_dict in metadata_list.non_aligned
+ if self.common_dataset in metadata_dict
+ and metadata_dict[self.common_dataset].id not in common_ids_aligned_to_other_dataset
+ }
+
+ other_instances_not_aligned_to_common_dataset = [
+ metadata_dict
+ for metadata_list in aligned_metadata_iterable
+ for metadata_dict in metadata_list.non_aligned
+ if self.common_dataset not in metadata_dict
+ ]
+
+ return (
+ len(aligned_common_ids)
+ + len(common_ids_aligned_to_other_dataset)
+ + len(common_ids_not_aligned_to_any_dataset)
+ + len(other_instances_not_aligned_to_common_dataset)
+ )
diff --git a/src/emma_datasets/parsers/annotation_extractors/__init__.py b/src/emma_datasets/parsers/annotation_extractors/__init__.py
new file mode 100644
index 0000000..837f647
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/__init__.py
@@ -0,0 +1,19 @@
+from emma_datasets.parsers.annotation_extractors.alfred_captions import AlfredCaptionExtractor
+from emma_datasets.parsers.annotation_extractors.alfred_task_descriptions import (
+ AlfredTaskDescriptionExtractor,
+)
+from emma_datasets.parsers.annotation_extractors.alfred_trajectories import (
+ AlfredTrajectoryExtractor,
+)
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+from emma_datasets.parsers.annotation_extractors.coco_caption import CocoCaptionExtractor
+from emma_datasets.parsers.annotation_extractors.conceptual_captions import (
+ ConceptualCaptionsExtractor,
+)
+from emma_datasets.parsers.annotation_extractors.epic_kitchens_captions import (
+ EpicKitchensCaptionExtractor,
+)
+from emma_datasets.parsers.annotation_extractors.gqa_qa_pairs import GqaQaPairExtractor
+from emma_datasets.parsers.annotation_extractors.gqa_scene_graphs import GqaSceneGraphExtractor
+from emma_datasets.parsers.annotation_extractors.vg_regions import VgRegionsExtractor
+from emma_datasets.parsers.annotation_extractors.vqa_v2_qa_pairs import VQAv2QaPairExtractor
diff --git a/src/emma_datasets/parsers/annotation_extractors/alfred_captions.py b/src/emma_datasets/parsers/annotation_extractors/alfred_captions.py
new file mode 100644
index 0000000..ac73e79
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/alfred_captions.py
@@ -0,0 +1,91 @@
+from collections.abc import Iterator
+from typing import Any
+
+from overrides import overrides
+
+from emma_datasets.datamodels import AnnotationType, Caption, DatasetName
+from emma_datasets.datamodels.datasets import AlfredMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class AlfredCaptionExtractor(AnnotationExtractor[Caption]):
+ """Split subgoal descriptions for ALFRED into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.caption
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.alfred
+
+ def read(self, file_path: Any) -> list[dict[str, Any]]:
+ """Read ALFRED metadata file."""
+ return read_json(file_path)
+
+ @overrides(check_signature=False)
+ def convert(self, raw_feature: AlfredMetadata) -> list[tuple[int, list[Caption]]]:
+ """Convert raw feature to caption."""
+ num_subgoals = min(len(ann.high_descs) for ann in raw_feature.turk_annotations["anns"])
+
+ captions = []
+ for high_idx in range(num_subgoals):
+ subgoal_captions = []
+ for ann in raw_feature.turk_annotations["anns"]:
+ subgoal_captions.append(Caption(text=self._prep_caption(ann.high_descs[high_idx])))
+ captions.append((high_idx, subgoal_captions))
+
+ return captions
+
+ def process_single_instance(self, raw_instance: dict[str, Any]) -> None:
+ """Process raw instance and write to file."""
+ structured_instance = AlfredMetadata.parse_obj(raw_instance)
+ self._process_subgoal_instances(structured_instance)
+ self._process_trajectory_instance(structured_instance)
+
+ def _process_subgoal_instances(self, structured_instance: AlfredMetadata) -> None:
+ """Process descriptions for each subgoal and write to file."""
+ captions = self.convert(structured_instance)
+ for high_idx, subgoal_captions in captions:
+ caption_id = f"{structured_instance.task_id}_{high_idx}"
+ self._write(subgoal_captions, caption_id)
+
+ def _process_trajectory_instance(self, structured_instance: AlfredMetadata) -> None:
+ """Merge descrptions for all subgoals and write to file."""
+ captions = self._merge_high_descs(structured_instance)
+ self._write(captions, f"{structured_instance.task_id}")
+
+ def _prep_caption(self, caption: str) -> str:
+ """Make sure captions end with full stop.
+
+ This is so that we can mask full sentences for pretraining.
+ """
+ caption = caption.rstrip()
+ if not caption.endswith("."):
+ caption = f"{caption}."
+ return caption
+
+ def _merge_high_descs(self, raw_feature: AlfredMetadata) -> list[Caption]:
+ """Merge high level descriptions in a single caption."""
+ captions = []
+
+ for ann in raw_feature.turk_annotations["anns"]:
+ ann_captions = [self._prep_caption(caption) for caption in ann.high_descs]
+ captions.append(Caption(text=" ".join(ann_captions)))
+
+ return captions
+
+ def _read(self) -> Iterator[Any]:
+ """Reads all the trajectory metadata from the train and valid_seen data paths.
+
+ For ALFRED we have to override this to make sure that all the single trajectory files are
+ correctly combined in a single list.
+ """
+ raw_data = (
+ self.process_raw_file_return(self.read(file_path)) for file_path in self.file_paths
+ )
+
+ return self.postprocess_raw_data(raw_data)
diff --git a/src/emma_datasets/parsers/annotation_extractors/alfred_task_descriptions.py b/src/emma_datasets/parsers/annotation_extractors/alfred_task_descriptions.py
new file mode 100644
index 0000000..d76955f
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/alfred_task_descriptions.py
@@ -0,0 +1,55 @@
+from collections.abc import Iterator
+from typing import Any
+
+from overrides import overrides
+
+from emma_datasets.datamodels import AnnotationType, DatasetName, TaskDescription
+from emma_datasets.datamodels.datasets import AlfredMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class AlfredTaskDescriptionExtractor(AnnotationExtractor[TaskDescription]):
+ """Split subgoal descriptions for ALFRED into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.task_description
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.alfred
+
+ def read(self, file_path: Any) -> list[dict[str, Any]]:
+ """Read ALFRED metadata file."""
+ return read_json(file_path)
+
+ @overrides(check_signature=False)
+ def convert(self, raw_feature: AlfredMetadata) -> list[TaskDescription]:
+ """Convert raw feature to task description."""
+ task_descriptions = []
+ for ann in raw_feature.turk_annotations["anns"]:
+ task_descriptions.append(TaskDescription(text=ann.task_desc))
+
+ return task_descriptions
+
+ def process_single_instance(self, raw_instance: dict[str, Any]) -> None:
+ """Process raw instance and write to file."""
+ structured_instance = AlfredMetadata.parse_obj(raw_instance)
+ task_descriptions = self.convert(structured_instance)
+ file_id = f"{structured_instance.task_id}"
+ self._write(task_descriptions, file_id)
+
+ def _read(self) -> Iterator[Any]:
+ """Reads all the trajectory metadata from the train and valid_seen data paths.
+
+ For ALFRED we have to override this to make sure that all the single trajectory files are
+ correctly combined in a single list.
+ """
+ raw_data = (
+ self.process_raw_file_return(self.read(file_path)) for file_path in self.file_paths
+ )
+
+ return self.postprocess_raw_data(raw_data)
diff --git a/src/emma_datasets/parsers/annotation_extractors/alfred_trajectories.py b/src/emma_datasets/parsers/annotation_extractors/alfred_trajectories.py
new file mode 100644
index 0000000..f8743ad
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/alfred_trajectories.py
@@ -0,0 +1,135 @@
+import itertools
+from collections.abc import Iterator
+from typing import Any
+
+from overrides import overrides
+
+from emma_datasets.datamodels import ActionTrajectory, AnnotationType, DatasetName
+from emma_datasets.datamodels.datasets import AlfredMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class AlfredTrajectoryExtractor(AnnotationExtractor[ActionTrajectory]):
+ """Split subgoal trajectories for ALFRED into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.action_trajectory
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.alfred
+
+ def read(self, file_path: Any) -> dict[str, Any]:
+ """Read ALFRED Metadata file."""
+ return read_json(file_path)
+
+ @overrides(check_signature=False)
+ def convert(self, raw_feature: AlfredMetadata) -> list[tuple[int, ActionTrajectory]]:
+ """Convert raw feature to a sequence of actions associated with a given subgoal.
+
+ ALFRED uses a planner to generate a trajectory to complete a given high-level goal, and
+ ALFRED has multiple language instructions for each trajectory. Therefore, it's possible
+ that one language instruction can cover multiple subgoals, which can cause errors in how
+ we've parsed and structured them.
+ """
+ trajectories: list[tuple[int, ActionTrajectory]] = []
+
+ all_subgoals = itertools.groupby(raw_feature.plan.low_level_actions, lambda x: x.high_idx)
+ for high_idx, subgoal in all_subgoals:
+ trajectory = ActionTrajectory(
+ low_level_actions=list(subgoal),
+ high_level_actions=[raw_feature.plan.high_level_actions[high_idx]],
+ )
+ trajectories.append((high_idx, trajectory))
+
+ num_language_instructions = min(
+ len(ann.high_descs) for ann in raw_feature.turk_annotations["anns"]
+ )
+ num_high_level_subgoals = len(raw_feature.plan.high_level_actions)
+
+ if num_high_level_subgoals != num_language_instructions:
+ # Merge the last two subgoal actions so that they are aligned
+ for act in trajectories[-1][1].low_level_actions:
+ act.high_idx = num_language_instructions - 1
+
+ new_final_trajectory = ActionTrajectory(
+ # Merge the low level actions from the last two trajectories.
+ low_level_actions=[
+ *trajectories[-2][1].low_level_actions,
+ *trajectories[-1][1].low_level_actions,
+ ],
+ high_level_actions=raw_feature.plan.high_level_actions[-2:],
+ )
+
+ # Delete the last two trrajectories
+ trajectories = trajectories[:-2]
+
+ # and add back the merged ones
+ trajectories.append((num_language_instructions - 1, new_final_trajectory))
+
+ return trajectories
+
+ def process_single_instance(self, raw_instance: dict[str, Any]) -> None:
+ """Process raw instance and write to file."""
+ structured_instance = AlfredMetadata.parse_obj(raw_instance)
+ trajectories = self.convert(structured_instance)
+ self._process_subgoal_instances(
+ task_id=structured_instance.task_id, trajectories=trajectories
+ )
+ self._process_trajectory_instance(
+ task_id=structured_instance.task_id, trajectories=trajectories
+ )
+
+ def _process_subgoal_instances(
+ self,
+ task_id: str,
+ trajectories: list[tuple[int, ActionTrajectory]],
+ ) -> None:
+ """Process subgoals."""
+ for high_idx, trajectory in trajectories:
+ traj_id = f"{task_id}_{high_idx}"
+ self._write(trajectory, traj_id)
+
+ def _process_trajectory_instance(
+ self,
+ task_id: str,
+ trajectories: list[tuple[int, ActionTrajectory]],
+ ) -> None:
+ """Process full trajectory."""
+ full_trajectory = self._merge_trajectories(trajectories)
+ self._write(full_trajectory, f"{task_id}")
+
+ def _merge_trajectories(
+ self, trajectories: list[tuple[int, ActionTrajectory]]
+ ) -> ActionTrajectory:
+ """Merge trajectories for a full task."""
+ high_indices = len(trajectories)
+ traj_dict = dict(trajectories)
+ low_level_actions = itertools.chain(
+ *[traj_dict[high_idx].low_level_actions for high_idx in range(high_indices)]
+ )
+
+ high_level_actions = itertools.chain(
+ *[traj_dict[high_idx].high_level_actions for high_idx in range(high_indices)]
+ )
+
+ return ActionTrajectory(
+ low_level_actions=list(low_level_actions),
+ high_level_actions=list(high_level_actions),
+ )
+
+ def _read(self) -> Iterator[Any]:
+ """Reads all the trajectory metadata from the train and valid_seen data paths.
+
+ For ALFRED we have to override this to make sure that all the single trajectory files are
+ correctly combined in a single list.
+ """
+ raw_data = (
+ self.process_raw_file_return(self.read(file_path)) for file_path in self.file_paths
+ )
+
+ return self.postprocess_raw_data(raw_data)
diff --git a/src/emma_datasets/parsers/annotation_extractors/annotation_extractor.py b/src/emma_datasets/parsers/annotation_extractors/annotation_extractor.py
new file mode 100644
index 0000000..b8e7bf9
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/annotation_extractor.py
@@ -0,0 +1,209 @@
+import itertools
+from abc import ABC, abstractmethod
+from collections.abc import Iterable, Iterator
+from multiprocessing.pool import Pool
+from pathlib import Path
+from typing import Any, Generic, Optional, TypeVar, Union, overload
+
+from pydantic import BaseModel
+from rich.progress import Progress
+
+from emma_datasets.datamodels.constants import AnnotationType, DatasetName
+from emma_datasets.io import get_all_file_paths, read_json, write_json
+
+
+Annotation = TypeVar("Annotation", bound=BaseModel)
+AnnotationPaths = Union[str, list[str], Path, list[Path], list[tuple[Path, Path]]] # noqa: WPS221
+
+
+class AnnotationExtractor(ABC, Generic[Annotation]):
+ """Extract annotations from the raw dataset into multiple files for easier loading.
+
+ For speed, we need to extract all the annotations from every instance of the dataset in
+ advance, as a type of `Annotation` class. We use these `Annotation`s when we are creating the
+ new instances. This way, it allows for easy importing of data that will also be validated,
+ since `Annotation` inherits from Pydantic.
+
+ This class also uses a provided Rich progress bar to provide feedback to the user.
+
+ This is purely an abstract base class. All concrete subclasses must provide implementations of
+ the following methods/properties:
+
+ - `annotation_type` denotes the type of annotation that is being extracted.
+ - `dataset_name` denotes the name of the dataset that is being processed
+ - `convert()` implements the logic to convert the annotations from the raw dataset into the
+ consistent returned class.
+ - `process_single_instance()` which processes the raw instance from the dataset, calling
+ the convert method and then writing the result to a file.
+ """
+
+ def __init__(
+ self,
+ paths: AnnotationPaths,
+ output_dir: Union[str, Path],
+ progress: Progress,
+ ) -> None:
+ self.task_id = progress.add_task(
+ self._progress_bar_description,
+ start=False,
+ visible=False,
+ total=float("inf"),
+ comment="",
+ )
+
+ self._paths = paths
+ self.file_paths: Union[list[Path], list[tuple[Path, Path]]]
+
+ self.output_dir = Path(output_dir)
+
+ progress.update(self.task_id, comment="Waiting for turn...")
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ raise NotImplementedError()
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ raise NotImplementedError()
+
+ @property
+ def file_ext(self) -> str:
+ """The file extension of the raw data files."""
+ return "json"
+
+ @overload
+ def run(self, progress: Progress, pool: Pool) -> None:
+ ... # noqa: WPS428
+
+ @overload
+ def run(self, progress: Progress) -> None:
+ ... # noqa: WPS428
+
+ def run(self, progress: Progress, pool: Optional[Pool] = None) -> None:
+ """Run the splitter.
+
+ Args:
+ progress (Progress): Rich Progress Bar
+ pool (Pool, optional): Pool for multiprocessing. Defaults to None.
+ """
+ self._start_progress(progress)
+
+ progress.update(self.task_id, comment="Getting paths to raw files")
+ self._get_all_file_paths()
+
+ progress.update(self.task_id, comment="Reading all raw data")
+ raw_data = self._read()
+
+ progress.update(self.task_id, comment="Processing data")
+ if pool is not None:
+ for _ in pool.imap_unordered(self.process_single_instance, raw_data):
+ self._advance(progress)
+ else:
+ for raw_input in raw_data:
+ self.process_single_instance(raw_input)
+ self._advance(progress)
+
+ self._end_progress(progress)
+
+ def process_raw_file_return(self, raw_data: Any) -> Any:
+ """Modify what is returned immediately after reading each file.
+
+ See `_read()` method for how this is used.
+ """
+ return raw_data
+
+ def postprocess_raw_data(self, raw_data: Any) -> Iterator[Any]:
+ """Process all the raw data from all files.
+
+ See `_read()` method for how this is used.
+ """
+ return raw_data
+
+ @abstractmethod
+ def convert(self, raw_feature: Any) -> Union[Annotation, Iterable[Annotation]]:
+ """Convert a raw annotation into a Annotation.
+
+ This method converts some raw annotation (likely a class used when constructing the raw
+ dataset metadata in `emma_datasets.datamodels.datasets`) into a consistent `Annotation`
+ form.
+
+ This method must be implemented by subclasses.
+ """
+ raise NotImplementedError()
+
+ @abstractmethod
+ def process_single_instance(self, raw_feature: Any) -> None:
+ """Process raw instance from the loaded data.
+
+ Generally, take raw data, convert it, and then write it to a file.
+
+ See other modules for how this is used.
+ """
+ raise NotImplementedError()
+
+ def read(self, file_path: Path) -> Any:
+ """Read the file using orjson.
+
+ Overwrite if this is not good for your needs.
+ """
+ if not file_path.exists():
+ raise FileNotFoundError(f"File {file_path} does not exist.")
+
+ return read_json(file_path)
+
+ def _read(self) -> Iterator[Any]:
+ """Read all files and return a single Iterator over all of them."""
+ raw_data = itertools.chain.from_iterable(
+ self.process_raw_file_return(self.read(file_path)) # type: ignore[arg-type]
+ for file_path in self.file_paths
+ )
+
+ return self.postprocess_raw_data(raw_data)
+
+ def _write(
+ self,
+ features: Union[Annotation, Iterable[Annotation]],
+ filename: str,
+ ext: str = "json",
+ ) -> None:
+ """Write the data to a JSON file using orjson."""
+ filepath = self.output_dir.joinpath(f"{filename}.{ext}")
+
+ features_dict = (
+ [feature.dict(by_alias=True) for feature in features]
+ if isinstance(features, Iterable) and not isinstance(features, BaseModel)
+ else features.dict(by_alias=True)
+ )
+
+ write_json(filepath, features_dict)
+
+ @property
+ def _progress_bar_description(self) -> str:
+ """Get the task description for the progress bar."""
+ return (
+ f"[b]{self.annotation_type.value}[/] annotations from [u]{self.dataset_name.value}[/]"
+ )
+
+ def _start_progress(self, progress: Progress) -> None:
+ """Start the task on the progress bar."""
+ progress.reset(self.task_id, start=True, visible=True)
+
+ def _advance(self, progress: Progress) -> None:
+ """Update the progress bar."""
+ progress.advance(self.task_id)
+
+ def _end_progress(self, progress: Progress) -> None:
+ """Stop the progress bar and make sure to freeze the finished bar."""
+ completed = int(progress._tasks[self.task_id].completed) # noqa: WPS437
+ progress.update(
+ self.task_id, visible=True, total=completed, completed=completed, comment="Done!"
+ )
+ progress.stop_task(self.task_id)
+
+ def _get_all_file_paths(self) -> None:
+ """Get all the file paths for the dataset and store in state."""
+ self.file_paths = [
+ path for path in get_all_file_paths(self._paths) if path.suffix.endswith(self.file_ext)
+ ]
diff --git a/src/emma_datasets/parsers/annotation_extractors/coco_caption.py b/src/emma_datasets/parsers/annotation_extractors/coco_caption.py
new file mode 100644
index 0000000..a0830c1
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/coco_caption.py
@@ -0,0 +1,49 @@
+import itertools
+from collections.abc import Iterator
+from typing import Any
+
+from pydantic import parse_obj_as
+
+from emma_datasets.datamodels import AnnotationType, Caption, DatasetName
+from emma_datasets.datamodels.datasets import CocoCaption
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class CocoCaptionExtractor(AnnotationExtractor[Caption]):
+ """Split COCO captions into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.caption
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.coco
+
+ def process_raw_file_return(self, raw_data: Any) -> Any:
+ """Only get the captions from the raw file."""
+ return raw_data["annotations"]
+
+ def postprocess_raw_data(self, raw_data: Any) -> Any:
+ """Group the captions by image ID."""
+ sorted_raw_data = sorted(raw_data, key=lambda k: k["image_id"])
+ grouped_captions_generator = itertools.groupby(
+ sorted_raw_data, key=lambda k: k["image_id"]
+ )
+ return (
+ (image_id, list(grouped_captions))
+ for image_id, grouped_captions in grouped_captions_generator
+ )
+
+ def convert(self, raw_feature: list[CocoCaption]) -> Iterator[Caption]:
+ """Convert objects to the common Caption."""
+ return (Caption(text=instance.caption) for instance in raw_feature)
+
+ def process_single_instance(self, raw_instance: Any) -> None:
+ """Process raw instance and write to file."""
+ image_id, grouped_captions = raw_instance
+ structured_raw = parse_obj_as(list[CocoCaption], grouped_captions)
+ features = self.convert(structured_raw)
+ self._write(features, image_id)
diff --git a/src/emma_datasets/parsers/annotation_extractors/conceptual_captions.py b/src/emma_datasets/parsers/annotation_extractors/conceptual_captions.py
new file mode 100644
index 0000000..0b4406a
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/conceptual_captions.py
@@ -0,0 +1,82 @@
+from pathlib import Path
+from typing import Any
+
+from overrides import overrides
+from pydantic import parse_obj_as
+
+from emma_datasets.datamodels import AnnotationType, Caption, DatasetName
+from emma_datasets.io import get_all_file_paths, read_parquet
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class ConceptualCaptionsExtractor(AnnotationExtractor[Caption]):
+ """Split Conceptual Captions into multiple files.
+
+ Conceptual captions is downloaded using img2dataset
+ https://github.com/emma-simbot/img2dataset.
+ For each train/val split the dataset is split into multiple shards. Each shard has a separate
+ .parquet file that contains all the annotations for each example in the shard.
+ """
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.caption
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.conceptual_captions
+
+ @property
+ def file_ext(self) -> str:
+ """The file extension of the raw data files."""
+ return "parquet"
+
+ def read(self, file_path: Path) -> Any:
+ """Read the json file.
+
+ Due to sharding for train and validation we also need to obtain the shard id and the split.
+ For example, for file_path 'storage/datasets/cc3m/train/00159/001590146.jpg' the shard_id
+ is 00159 and the split is train. These are then used to store the data in the output_dir
+ keeping the sharding to avoid overflowing the file system.
+ """
+ data = read_parquet(file_path)
+ shard_id = file_path.stem
+ split = file_path.parents[0].name
+
+ data = data.assign(split=split)
+ data = data.assign(shard_id=shard_id)
+ return data
+
+ def convert(self, raw_instance: Any) -> list[Caption]:
+ """Convert objects to the common Caption."""
+ caption = raw_instance["caption"]
+ caption_instance = parse_obj_as(list[Caption], [{"text": caption}])
+
+ return caption_instance
+
+ def process_single_instance(self, raw_instances: Any) -> None:
+ """Process raw instance and write to file."""
+ shard_out_dir = self.output_dir.joinpath(raw_instances.split[0], raw_instances.shard_id[0])
+ shard_out_dir.mkdir(parents=True, exist_ok=True)
+ for _, raw_instance in raw_instances.iterrows():
+ caption_instance = self.convert(raw_instance)
+
+ shard_out_file_path = Path(
+ raw_instances.split[0], raw_instances.shard_id[0], raw_instance.key
+ )
+ self._write(caption_instance, str(shard_out_file_path))
+
+ @overrides(check_signature=False)
+ def _read(self) -> list[dict[str, Any]]:
+ """Read all files and return a single Iterator over all of them."""
+ return [
+ self.process_raw_file_return(self.read(file_path)) for file_path in self.file_paths # type: ignore[arg-type]
+ ]
+
+ def _get_all_file_paths(self) -> None:
+ """Get all the file paths for the dataset and store in state."""
+ self.file_paths = [
+ path for path in get_all_file_paths(self._paths) if path.suffix.endswith(self.file_ext)
+ ]
diff --git a/src/emma_datasets/parsers/annotation_extractors/epic_kitchens_captions.py b/src/emma_datasets/parsers/annotation_extractors/epic_kitchens_captions.py
new file mode 100644
index 0000000..570c057
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/epic_kitchens_captions.py
@@ -0,0 +1,39 @@
+from typing import Any
+
+from emma_datasets.datamodels import AnnotationType, Caption, DatasetName
+from emma_datasets.datamodels.datasets import EpicKitchensNarrationMetadata
+from emma_datasets.io import read_csv
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class EpicKitchensCaptionExtractor(AnnotationExtractor[Caption]):
+ """Split captions for EpicKitchens into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.caption
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.epic_kitchens
+
+ @property
+ def file_ext(self) -> str:
+ """The file extension of the raw data files."""
+ return "csv"
+
+ def read(self, file_path: Any) -> list[dict[str, Any]]:
+ """Read Epic Kitchen CSV file."""
+ return read_csv(file_path)
+
+ def convert(self, raw_feature: EpicKitchensNarrationMetadata) -> list[Caption]:
+ """Convert raw feature to caption."""
+ return [Caption(text=raw_feature.narration)]
+
+ def process_single_instance(self, raw_instance: dict[str, Any]) -> None:
+ """Process raw instance and write to file."""
+ structured_instance = EpicKitchensNarrationMetadata.parse_obj(raw_instance)
+ caption = self.convert(structured_instance)
+ self._write(caption, structured_instance.narration_id)
diff --git a/src/emma_datasets/parsers/annotation_extractors/gqa_qa_pairs.py b/src/emma_datasets/parsers/annotation_extractors/gqa_qa_pairs.py
new file mode 100644
index 0000000..7d4c0ba
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/gqa_qa_pairs.py
@@ -0,0 +1,52 @@
+import itertools
+from collections.abc import Iterator
+from typing import Any
+
+from emma_datasets.datamodels import AnnotationType, DatasetName, QuestionAnswerPair
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+RawInstanceType = tuple[str, list[dict[str, Any]]]
+
+
+class GqaQaPairExtractor(AnnotationExtractor[QuestionAnswerPair]):
+ """Split QA pairs from GQA into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.qa_pair
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.gqa
+
+ def process_raw_file_return(self, raw_data: Any) -> Iterator[dict[str, Any]]:
+ """Add image ID to each question data dictionary."""
+ for question_id, question_data in raw_data.items():
+ question_data["id"] = question_id
+ yield question_data
+
+ def postprocess_raw_data(self, raw_data: Any) -> Iterator[RawInstanceType]:
+ """Group all pairs by image ID."""
+ sorted_raw_data = sorted(raw_data, key=lambda qa: qa["imageId"])
+ grouped_qa_pairs_generator = itertools.groupby(
+ sorted_raw_data, key=lambda qa: qa["imageId"]
+ )
+ return (
+ (image_id, list(grouped_qa_pairs))
+ for image_id, grouped_qa_pairs in grouped_qa_pairs_generator
+ )
+
+ def convert(self, raw_feature: list[dict[str, Any]]) -> Iterator[QuestionAnswerPair]:
+ """Convert raw instance into QA pairs."""
+ return (
+ QuestionAnswerPair(id=qa["id"], question=qa["question"], answer=qa["answer"])
+ for qa in raw_feature
+ )
+
+ def process_single_instance(self, raw_instance: RawInstanceType) -> None:
+ """Process single instance into multiple QA pairs."""
+ image_id, raw_qa_pairs = raw_instance
+ self._write(self.convert(raw_qa_pairs), image_id)
diff --git a/src/emma_datasets/parsers/annotation_extractors/gqa_scene_graphs.py b/src/emma_datasets/parsers/annotation_extractors/gqa_scene_graphs.py
new file mode 100644
index 0000000..acdd0c3
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/gqa_scene_graphs.py
@@ -0,0 +1,39 @@
+from typing import Any
+
+from emma_datasets.datamodels import AnnotationType, DatasetName, SceneGraph
+from emma_datasets.datamodels.datasets import GqaSceneGraph
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class GqaSceneGraphExtractor(AnnotationExtractor[SceneGraph]):
+ """Split scene graphs from GQA into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.scene_graph
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.gqa
+
+ def process_raw_file_return(self, raw_data: Any) -> Any:
+ """Get scene graph and image id as items."""
+ return raw_data.items()
+
+ def convert(self, raw_feature: GqaSceneGraph) -> SceneGraph:
+ """Convert GQA scene graph into common SceneGraph."""
+ return SceneGraph(
+ location=raw_feature.location,
+ weather=raw_feature.weather,
+ objects=raw_feature.objects,
+ )
+
+ def process_single_instance(self, raw_instance: tuple[str, dict[str, Any]]) -> None:
+ """Process raw scene graph and write to file."""
+ image_id, raw_scene_graph = raw_instance
+ raw_scene_graph["image_id"] = image_id
+ gqa_scene_graph = GqaSceneGraph.parse_obj(raw_scene_graph)
+ scene_graph = self.convert(gqa_scene_graph)
+ self._write(scene_graph, image_id)
diff --git a/src/emma_datasets/parsers/annotation_extractors/vg_regions.py b/src/emma_datasets/parsers/annotation_extractors/vg_regions.py
new file mode 100644
index 0000000..3646925
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/vg_regions.py
@@ -0,0 +1,46 @@
+from collections.abc import Iterator
+from typing import Any
+
+import numpy
+
+from emma_datasets.datamodels import AnnotationType, DatasetName, Region
+from emma_datasets.datamodels.datasets import VgImageRegions
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+class VgRegionsExtractor(AnnotationExtractor[Region]):
+ """Split Regions per VG instance into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.region
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.visual_genome
+
+ def convert(self, raw_feature: VgImageRegions) -> Iterator[Region]:
+ """Convert raw region description to a Region instance."""
+ yield from (
+ Region(
+ caption=raw_region.phrase,
+ bbox=numpy.array(
+ [
+ raw_region.x,
+ raw_region.y,
+ raw_region.width,
+ raw_region.height,
+ ],
+ dtype=numpy.float32,
+ ),
+ )
+ for raw_region in raw_feature.regions
+ )
+
+ def process_single_instance(self, raw_feature: Any) -> None:
+ """Process raw instance and write Region to file."""
+ structured_raw = VgImageRegions.parse_obj(raw_feature)
+ features = self.convert(structured_raw)
+ self._write(features, structured_raw.id)
diff --git a/src/emma_datasets/parsers/annotation_extractors/vqa_v2_qa_pairs.py b/src/emma_datasets/parsers/annotation_extractors/vqa_v2_qa_pairs.py
new file mode 100644
index 0000000..611040b
--- /dev/null
+++ b/src/emma_datasets/parsers/annotation_extractors/vqa_v2_qa_pairs.py
@@ -0,0 +1,82 @@
+import itertools
+from collections.abc import Iterator
+from pathlib import Path
+from typing import Any
+
+from overrides import overrides
+
+from emma_datasets.datamodels import AnnotationType, DatasetName, QuestionAnswerPair
+from emma_datasets.datamodels.datasets.utils.vqa_v2_utils import normalize_answer
+from emma_datasets.datamodels.datasets.vqa_v2 import read_vqa_v2_json
+from emma_datasets.parsers.annotation_extractors.annotation_extractor import AnnotationExtractor
+
+
+RawInstanceType = tuple[str, list[dict[str, Any]]]
+
+
+class VQAv2QaPairExtractor(AnnotationExtractor[QuestionAnswerPair]):
+ """Split QA pairs from VQA-v2 into multiple files."""
+
+ @property
+ def annotation_type(self) -> AnnotationType:
+ """The type of annotation extracted from the dataset."""
+ return AnnotationType.qa_pair
+
+ @property
+ def dataset_name(self) -> DatasetName:
+ """The name of the dataset extracted."""
+ return DatasetName.vqa_v2
+
+ def process_raw_file_return(self, raw_data: Any) -> Iterator[dict[str, Any]]:
+ """Add image ID to each question data dictionary."""
+ for question_id, question_data in raw_data.items():
+ question_data["id"] = question_id
+ yield question_data
+
+ def postprocess_raw_data(self, raw_data: Any) -> Iterator[RawInstanceType]:
+ """Group all pairs by image ID."""
+ sorted_raw_data = sorted(raw_data, key=lambda qa: qa["image_id"])
+ grouped_qa_pairs_generator = itertools.groupby(
+ sorted_raw_data, key=lambda qa: qa["image_id"]
+ )
+ return (
+ (image_id, list(grouped_qa_pairs))
+ for image_id, grouped_qa_pairs in grouped_qa_pairs_generator
+ )
+
+ def convert(self, raw_feature: list[dict[str, Any]]) -> Iterator[QuestionAnswerPair]:
+ """Convert raw instance into QA pairs."""
+ return (
+ QuestionAnswerPair(
+ id=qa["id"],
+ question=qa["question"],
+ answer=self._get_vqa_v2_answers(qa),
+ )
+ for qa in raw_feature
+ )
+
+ def process_single_instance(self, raw_instance: RawInstanceType) -> None:
+ """Process single instance into multiple QA pairs."""
+ image_id, raw_qa_pairs = raw_instance
+ self._write(self.convert(raw_qa_pairs), f"vqa_v2_{image_id}")
+
+ @overrides(check_signature=False)
+ def read(self, file_path: tuple[Path, Path]) -> Any:
+ """Read the annotations."""
+ if not (file_path[0].exists() and file_path[1].exists()):
+ raise FileNotFoundError(f"Files {file_path} do not exist.")
+
+ questions = read_vqa_v2_json(file_path[0], "questions")
+ answers = read_vqa_v2_json(file_path[1], "annotations")
+ for question_id, data in questions.items():
+ data.update(answers[question_id])
+
+ return questions
+
+ def _get_vqa_v2_answers(self, instance: dict[str, Any]) -> list[str]:
+ """Get all vqa_v2 answers."""
+ return [normalize_answer(answer["answer"]) for answer in instance["answers"]]
+
+ def _get_all_file_paths(self) -> None:
+ """Get all the file paths for the dataset and store in state."""
+ self.file_paths = self._paths # type: ignore[assignment]
diff --git a/src/emma_datasets/parsers/dataset_aligner.py b/src/emma_datasets/parsers/dataset_aligner.py
new file mode 100644
index 0000000..a7b2693
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_aligner.py
@@ -0,0 +1,246 @@
+from collections.abc import Iterable
+from typing import Generic, NamedTuple, TypeVar
+
+from pydantic import BaseModel
+from rich.progress import Progress
+from rich.table import Table
+
+from emma_datasets.common import get_logger
+from emma_datasets.datamodels import DatasetMetadata, DatasetName
+from emma_datasets.parsers.dataset_metadata import DatasetMetadataParser
+
+
+log = get_logger(__name__)
+
+
+T = TypeVar("T", bound=BaseModel)
+S = TypeVar("S", bound=BaseModel)
+
+
+class DatasetAlignerReturn(NamedTuple):
+ """Tuple of aligned and non-aligned instances."""
+
+ aligned: list[dict[DatasetName, DatasetMetadata]]
+ non_aligned: list[dict[DatasetName, DatasetMetadata]]
+
+
+class DatasetAligner(Generic[S, T]):
+ """Align two datasets together using their metadata."""
+
+ def __init__(
+ self,
+ source_metadata_parser: DatasetMetadataParser[S],
+ target_metadata_parser: DatasetMetadataParser[T],
+ source_mapping_attr_for_target: str,
+ target_mapping_attr_for_source: str,
+ progress: Progress,
+ ) -> None:
+ self.source_metadata_parser = source_metadata_parser
+ self.target_metadata_parser = target_metadata_parser
+
+ self.source_mapping_attr_for_target = source_mapping_attr_for_target
+ self.target_mapping_attr_for_source = target_mapping_attr_for_source
+
+ self._source_dataset_name = self.source_metadata_parser.dataset_name.value
+ self._target_dataset_name = self.target_metadata_parser.dataset_name.value
+
+ self._source_dataset_size = 0
+ self._target_dataset_size = 0
+
+ self.progress = progress
+ self.task_id = progress.add_task(
+ description=f"Aligning [u]{self._source_dataset_name}[/] with [u]{self._target_dataset_name}[/]",
+ start=False,
+ visible=False,
+ comment="",
+ )
+
+ def get_aligned_metadata(self) -> DatasetAlignerReturn:
+ """Align and return the metadata for the two datasets."""
+ source_metadata = list(self.source_metadata_parser.get_metadata(self.progress))
+ target_metadata = list(self.target_metadata_parser.get_metadata(self.progress))
+
+ self._source_dataset_size = len(source_metadata)
+ self._target_dataset_size = len(target_metadata)
+
+ aligned, non_aligned_from_target = self.align_all_instances(
+ source_metadata, target_metadata
+ )
+ non_aligned_from_source = self.get_non_aligned_from_source(aligned, source_metadata)
+
+ non_aligned = non_aligned_from_target + non_aligned_from_source
+
+ self._print_statistics(aligned)
+
+ return DatasetAlignerReturn(aligned=aligned, non_aligned=non_aligned)
+
+ def align_all_instances(
+ self, source_instances: Iterable[S], target_instances: Iterable[T]
+ ) -> DatasetAlignerReturn:
+ """Align all instances in the source and target datasets.
+
+ Args:
+ source_instances (Iterable[S]):
+ Instance metadata from source dataset
+ target_instances (Iterable[T]):
+ Instance metadata from target dataset
+
+ Returns:
+ DatasetAlignerReturn: Named tuple with lists of aligned and non-aligned instances.
+ """
+ aligned = []
+ non_aligned_from_target = []
+
+ source_instances = list(source_instances)
+ target_instances = list(target_instances)
+
+ target_mapping_for_source = self.get_target_mapping_for_source(source_instances)
+
+ self.progress.reset(self.task_id, visible=True, start=True)
+ progress_bar = self.progress.track(
+ target_instances, total=len(target_instances), task_id=self.task_id
+ )
+
+ for target_instance in progress_bar:
+ aligned_target, non_aligned_target = self.align_target_instance_to_source(
+ target_instance, target_mapping_for_source
+ )
+
+ if any(aligned_target):
+ aligned.append(aligned_target)
+ elif any(non_aligned_target):
+ non_aligned_from_target.append(non_aligned_target)
+
+ if non_aligned_from_target:
+ log.warning(
+ "{incorrect_length:,} instances from {target_name} do not have a valid ID for {source_name}. These additional instances are [bold red]not[/] ignored, but maybe you want to have a look at them?".format(
+ incorrect_length=len(non_aligned_from_target),
+ target_name=self._target_dataset_name,
+ source_name=self._source_dataset_name,
+ )
+ )
+
+ return DatasetAlignerReturn(aligned=aligned, non_aligned=non_aligned_from_target)
+
+ def align_target_instance_to_source(
+ self, target_instance: T, target_mapping_for_source: dict[str, S]
+ ) -> tuple[dict[DatasetName, DatasetMetadata], ...]:
+ """Align single target instance to the source dataset if possible."""
+ aligned = {}
+ non_aligned = {}
+
+ target_key_for_source = getattr(target_instance, self.target_mapping_attr_for_source)
+ target_metadata = self.target_metadata_parser.convert_to_dataset_metadata(target_instance)
+
+ try:
+ source_instance = target_mapping_for_source[target_key_for_source]
+ except KeyError:
+ non_aligned = {self.target_metadata_parser.dataset_name: target_metadata}
+ else:
+ source_metadata = self.source_metadata_parser.convert_to_dataset_metadata(
+ source_instance
+ )
+ aligned = {
+ self.target_metadata_parser.dataset_name: target_metadata,
+ self.source_metadata_parser.dataset_name: source_metadata,
+ }
+
+ return aligned, non_aligned
+
+ def get_non_aligned_from_source(
+ self, aligned: list[dict[DatasetName, DatasetMetadata]], source_metadata: list[S]
+ ) -> list[dict[DatasetName, DatasetMetadata]]:
+ """Get instances from the source dataset which are not aligned to the target dataset."""
+ aligned_from_source = {
+ metadata[self.source_metadata_parser.dataset_name] for metadata in aligned
+ }
+
+ task_total = self.progress.tasks[self.task_id].total
+ self.progress.update(
+ self.task_id,
+ total=task_total + len(source_metadata) if task_total is not None else None,
+ )
+
+ source_dataset_metadata: list[DatasetMetadata] = []
+ for raw_metadata in source_metadata:
+ source_dataset_metadata.append(
+ self.source_metadata_parser.convert_to_dataset_metadata(raw_metadata)
+ )
+ self.progress.advance(self.task_id)
+
+ non_aligned_from_source = set(source_dataset_metadata) - aligned_from_source
+
+ return [{metadata.name: metadata} for metadata in non_aligned_from_source]
+
+ def get_target_mapping_for_source(self, source_instances: Iterable[S]) -> dict[str, S]:
+ """Map each source instance to a target instance using the target attribute.
+
+ This also updates the `_source_dataset_size` attribute.
+ """
+ source_instances = list(source_instances)
+ self._source_dataset_size = len(source_instances)
+
+ mapped_metadata = {
+ getattr(metadata, self.source_mapping_attr_for_target): metadata
+ for metadata in source_instances
+ if getattr(metadata, self.source_mapping_attr_for_target, None) is not None
+ }
+
+ if self._source_dataset_size != len(mapped_metadata.items()):
+ log.warning(
+ "Not all scenes from {source_name} have an ID for {target_name}. {source_name} has a total of {source_metadata_length:,} instances, but only {mapped_metadata_length:,} have an ID for {target_name}.".format(
+ source_name=self._source_dataset_name,
+ target_name=self._target_dataset_name,
+ source_metadata_length=self._source_dataset_size,
+ mapped_metadata_length=len(mapped_metadata.items()),
+ )
+ )
+
+ return mapped_metadata
+
+ def _print_statistics(self, aligned: Iterable[dict[DatasetName, DatasetMetadata]]) -> None:
+ table = Table(
+ title=f"Alignment Stats for {self._source_dataset_name} and {self._target_dataset_name}",
+ )
+ table.add_column("Description")
+ table.add_column("Count", justify="right", style="green")
+
+ source_metadata_count = self._source_dataset_size
+ target_metadata_count = self._target_dataset_size
+ total_instance_count = source_metadata_count + target_metadata_count
+
+ aligned_count = len(list(aligned))
+ non_aligned_from_source = source_metadata_count - aligned_count
+ non_aligned_from_target = target_metadata_count - aligned_count
+
+ table.add_row(
+ f"Instances from [u]{self._source_dataset_name}[/]",
+ f"{source_metadata_count:,}",
+ )
+ table.add_row(
+ f"Instances from [u]{self._target_dataset_name}[/]",
+ f"{target_metadata_count:,}",
+ )
+ table.add_row("Total instances", f"{total_instance_count:,}", end_section=True)
+
+ table.add_row("Aligned", f"{aligned_count:,}")
+ table.add_row(
+ f"Instances from [u]{self._source_dataset_name}[/] that can't be aligned",
+ f"{(non_aligned_from_source):,}",
+ )
+ table.add_row(
+ f"Instances from [u]{self._target_dataset_name}[/] that can't be aligned",
+ f"{(non_aligned_from_target):,}",
+ end_section=True,
+ )
+
+ total_instances_after_aligned = (
+ (aligned_count * 2) + non_aligned_from_source + non_aligned_from_target
+ )
+
+ if total_instance_count > total_instances_after_aligned:
+ table.add_row(
+ "Instances not accounted for after alignment", f"{total_instances_after_aligned:,}"
+ )
+
+ self.progress.console.print(table, justify="center")
diff --git a/src/emma_datasets/parsers/dataset_metadata/__init__.py b/src/emma_datasets/parsers/dataset_metadata/__init__.py
new file mode 100644
index 0000000..edbfae9
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/__init__.py
@@ -0,0 +1,12 @@
+from emma_datasets.parsers.dataset_metadata.alfred import AlfredMetadataParser
+from emma_datasets.parsers.dataset_metadata.coco import CocoMetadataParser
+from emma_datasets.parsers.dataset_metadata.conceptual_captions import (
+ ConceptualCaptionsMetadataParser,
+)
+from emma_datasets.parsers.dataset_metadata.epic_kitchens import EpicKitchensMetadataParser
+from emma_datasets.parsers.dataset_metadata.gqa import GqaMetadataParser
+from emma_datasets.parsers.dataset_metadata.metadata_parser import (
+ DataPathTuple,
+ DatasetMetadataParser,
+)
+from emma_datasets.parsers.dataset_metadata.vg import VgMetadataParser
diff --git a/src/emma_datasets/parsers/dataset_metadata/alfred.py b/src/emma_datasets/parsers/dataset_metadata/alfred.py
new file mode 100644
index 0000000..8fffe06
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/alfred.py
@@ -0,0 +1,181 @@
+import itertools
+from collections.abc import Iterator
+from pathlib import Path
+from typing import Any
+
+from overrides import overrides
+from rich.progress import Progress
+
+from emma_datasets.datamodels import DatasetMetadata, DatasetName, MediaType, SourceMedia
+from emma_datasets.datamodels.datasets import AlfredImageMetadata, AlfredMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.dataset_metadata.metadata_parser import (
+ DataPathTuple,
+ DatasetMetadataParser,
+)
+
+
+class AlfredMetadataParser(DatasetMetadataParser[AlfredMetadata]):
+ """Parse ALFRED metadata into subgoals."""
+
+ metadata_model = AlfredMetadata
+ dataset_name = DatasetName.alfred
+
+ def __init__(
+ self,
+ data_paths: list[DataPathTuple],
+ progress: Progress,
+ alfred_dir: Path,
+ captions_dir: Path,
+ trajectories_dir: Path,
+ features_dir: Path,
+ task_descriptions_dir: Path,
+ ) -> None:
+ super().__init__(data_paths=data_paths, progress=progress)
+
+ self.alfred_dir = alfred_dir
+ self.captions_dir = captions_dir
+ self.trajectories_dir = trajectories_dir
+ self.features_dir = features_dir
+ self.task_descriptions_dir = task_descriptions_dir
+
+ self._width = 300
+ self._height = 300
+
+ @overrides(check_signature=False)
+ def convert_to_dataset_metadata(self, metadata: AlfredMetadata) -> Iterator[DatasetMetadata]:
+ """Convert ALFRED metadata to DatasetMetadata."""
+ num_subgoals = min(len(ann.high_descs) for ann in metadata.turk_annotations["anns"])
+
+ path_to_frames = self.alfred_dir.glob(
+ f"*/{metadata.task_type}-*-{metadata.scene.scene_num}/{metadata.task_id}/"
+ )
+ frames_dir = next(iter(path_to_frames)).joinpath("raw_images")
+
+ subgoal_source_media = self.get_all_source_media_for_task(
+ metadata, frames_dir, num_subgoals
+ )
+
+ metadata_paths = self._prepare_subgoal_paths(
+ num_subgoals=num_subgoals,
+ task_id=metadata.task_id,
+ scene_id=metadata.scene.scene_num,
+ )
+
+ trajectory_metadata_paths = self._prepare_trajectory_paths(
+ task_id=metadata.task_id,
+ )
+ for high_idx in range(num_subgoals): # noqa: WPS526
+ yield DatasetMetadata(
+ id=metadata.task_id,
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=subgoal_source_media[high_idx],
+ features_path=metadata_paths["features"][high_idx],
+ caption_path=metadata_paths["captions"][high_idx],
+ action_trajectory_path=metadata_paths["actions"][high_idx],
+ task_description_path=trajectory_metadata_paths["task_descriptions"],
+ )
+
+ yield DatasetMetadata(
+ id=metadata.task_id,
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=list(itertools.chain.from_iterable(subgoal_source_media)),
+ features_path=metadata_paths["features"],
+ caption_path=trajectory_metadata_paths["captions"],
+ action_trajectory_path=trajectory_metadata_paths["actions"],
+ task_description_path=trajectory_metadata_paths["task_descriptions"],
+ )
+
+ def get_all_source_media_for_subgoal(
+ self, metadata: AlfredMetadata, frames_dir: Path, high_idx: int
+ ) -> list[SourceMedia]:
+ """Get all images for the given subgoal."""
+ subgoal_images = [image for image in metadata.images if image.high_idx == high_idx]
+ subgoal_images = self._get_last_frame_of_low_level_action(subgoal_images)
+
+ return [
+ SourceMedia(
+ media_type=MediaType.image,
+ path=frames_dir.joinpath(image.image_name),
+ width=self._width,
+ height=self._height,
+ )
+ for image in subgoal_images
+ ]
+
+ def get_all_source_media_for_task(
+ self, metadata: AlfredMetadata, frames_dir: Path, num_subgoals: int
+ ) -> list[list[SourceMedia]]:
+ """Get images for the entire trajectory."""
+ num_high_level_subgoals = len(metadata.plan.high_level_actions)
+ source_media = [
+ self.get_all_source_media_for_subgoal(metadata, frames_dir, high_idx)
+ for high_idx in range(num_high_level_subgoals)
+ ]
+
+ if len(source_media) != num_subgoals:
+ # Merge the last two subgoal frames
+ last_source_media = source_media[-2]
+ last_source_media.extend(source_media[-1])
+ # Delete the last two frames
+ source_media = source_media[:-2]
+ # and add back the merged ones
+ source_media.append(last_source_media)
+
+ return source_media
+
+ def _prepare_subgoal_paths(
+ self,
+ task_id: str,
+ num_subgoals: int,
+ scene_id: int,
+ ) -> dict[str, list[Path]]:
+ """Prepare the actions, captions and features paths for each subgoal."""
+ return {
+ "actions": [
+ self.trajectories_dir.joinpath(f"{task_id}_{high_idx}.json")
+ for high_idx in range(num_subgoals)
+ ],
+ "captions": [
+ self.captions_dir.joinpath(f"{task_id}_{high_idx}.json")
+ for high_idx in range(num_subgoals)
+ ],
+ "features": [
+ self.features_dir.joinpath(f"{task_id}_{scene_id}_{high_idx}.{self.feature_ext}")
+ for high_idx in range(num_subgoals)
+ ],
+ }
+
+ def _prepare_trajectory_paths(
+ self,
+ task_id: str,
+ ) -> dict[str, Path]:
+ """Prepare the actions, captions and features paths for the full trajectory."""
+ return {
+ "actions": self.trajectories_dir.joinpath(f"{task_id}.json"),
+ "captions": self.captions_dir.joinpath(f"{task_id}.json"),
+ "task_descriptions": self.task_descriptions_dir.joinpath(f"{task_id}.json"),
+ }
+
+ def _get_last_frame_of_low_level_action(
+ self, images: list[AlfredImageMetadata]
+ ) -> list[AlfredImageMetadata]:
+ """Keep only the last frame for each low-level action.
+
+ ALFRED data have multiple images per low-level actions including filler frames inbetween
+ low-level actions.
+ """
+ low_images: list[AlfredImageMetadata] = []
+ prev_low_idx = -1
+ for image in images[::-1]:
+ if prev_low_idx != image.low_idx:
+ prev_low_idx = image.low_idx
+ low_images.append(image)
+
+ return low_images[::-1]
+
+ def _read(self, path: Path) -> Any:
+ """Read JSON from the given path."""
+ return [read_json(path)]
diff --git a/src/emma_datasets/parsers/dataset_metadata/coco.py b/src/emma_datasets/parsers/dataset_metadata/coco.py
new file mode 100644
index 0000000..d2dbd13
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/coco.py
@@ -0,0 +1,74 @@
+from pathlib import Path
+from typing import Any
+
+from rich.progress import Progress
+
+from emma_datasets.datamodels import (
+ DatasetMetadata,
+ DatasetName,
+ DatasetSplit,
+ MediaType,
+ SourceMedia,
+)
+from emma_datasets.datamodels.datasets import CocoImageMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.dataset_metadata.metadata_parser import DatasetMetadataParser
+
+
+class CocoMetadataParser(DatasetMetadataParser[CocoImageMetadata]):
+ """Parse instance metadata for COCO."""
+
+ metadata_model = CocoImageMetadata
+ dataset_name = DatasetName.coco
+
+ def __init__(
+ self,
+ caption_train_path: Path,
+ caption_val_path: Path,
+ images_dir: Path,
+ captions_dir: Path,
+ features_dir: Path,
+ qa_pairs_dir: Path,
+ progress: Progress,
+ ) -> None:
+ super().__init__(
+ progress=progress,
+ data_paths=[
+ (caption_train_path, DatasetSplit.train),
+ (caption_val_path, DatasetSplit.valid),
+ ],
+ )
+
+ self.images_dir = images_dir
+ self.captions_dir = captions_dir
+ self.features_dir = features_dir
+ self.qa_pairs_dir = qa_pairs_dir
+
+ def convert_to_dataset_metadata(self, metadata: CocoImageMetadata) -> DatasetMetadata:
+ """Convert single instance's metadata to the common datamodel."""
+ image_id = metadata.id
+ feature_image_id = f"{int(metadata.id):012d}"
+ if self.qa_pairs_dir.joinpath(f"vqa_v2_{metadata.id}.json").exists():
+ qa_pairs_path = self.qa_pairs_dir.joinpath(f"vqa_v2_{metadata.id}.json")
+ else:
+ qa_pairs_path = None
+
+ return DatasetMetadata(
+ id=image_id,
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=SourceMedia(
+ url=metadata.coco_url,
+ media_type=MediaType.image,
+ path=self.images_dir.joinpath(metadata.file_name),
+ width=metadata.width,
+ height=metadata.height,
+ ),
+ features_path=self.features_dir.joinpath(f"{feature_image_id}.{self.feature_ext}"),
+ caption_path=self.captions_dir.joinpath(f"{metadata.id}.json"),
+ qa_pairs_path=qa_pairs_path,
+ )
+
+ def _read(self, path: Path) -> Any:
+ """Read data from the given path."""
+ return read_json(path)["images"]
diff --git a/src/emma_datasets/parsers/dataset_metadata/conceptual_captions.py b/src/emma_datasets/parsers/dataset_metadata/conceptual_captions.py
new file mode 100644
index 0000000..0583100
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/conceptual_captions.py
@@ -0,0 +1,72 @@
+from pathlib import Path
+
+from overrides import overrides
+from rich.progress import Progress
+
+from emma_datasets.datamodels import DatasetMetadata, DatasetName, MediaType, SourceMedia
+from emma_datasets.datamodels.datasets import ConceptualCaptionsMetadata
+from emma_datasets.io import read_parquet
+from emma_datasets.parsers.dataset_metadata.metadata_parser import (
+ DataPathTuple,
+ DatasetMetadataParser,
+)
+
+
+class ConceptualCaptionsMetadataParser(DatasetMetadataParser[ConceptualCaptionsMetadata]):
+ """Parse Conceptual Captions."""
+
+ metadata_model = ConceptualCaptionsMetadata
+ dataset_name = DatasetName.conceptual_captions
+
+ def __init__(
+ self,
+ parquet_files_dir: list[DataPathTuple],
+ features_dir: list[DataPathTuple],
+ captions_dir: list[DataPathTuple],
+ progress: Progress,
+ ) -> None:
+ self.parquet_files_dir = parquet_files_dir
+ self.features_dir = features_dir
+ self.captions_dir = captions_dir
+ self.file_ext = "parquet"
+ super().__init__(data_paths=parquet_files_dir, progress=progress)
+
+ @overrides(check_signature=False)
+ def convert_to_dataset_metadata(self, metadata: ConceptualCaptionsMetadata) -> DatasetMetadata:
+ """Convert a single instance of metadata model to the common DatasetMetadata."""
+ split_pos = 0 if metadata.dataset_split == self.features_dir[0][1] else 1
+ return DatasetMetadata(
+ id=metadata.key,
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=SourceMedia(
+ url=metadata.url,
+ media_type=MediaType.image,
+ width=metadata.width,
+ height=metadata.height,
+ ),
+ features_path=self.features_dir[split_pos][0].joinpath(
+ metadata.shard_id, f"{metadata.key}.{self.feature_ext}"
+ ),
+ caption_path=self.captions_dir[split_pos][0].joinpath(
+ metadata.shard_id, f"{metadata.key}.json"
+ ),
+ )
+
+ def _get_shard_id_from_path(self, path: Path) -> str:
+ return path.name.split(".")[0]
+
+ def _read(self, path: Path) -> list[dict[str, str]]:
+ """Conceptual Captions is downloaded using https://github.com/rom1504/img2dataset.
+
+ The dataset metadata can be found inside each .parquet file for each shard. Each .parquet
+ file contains the metadata for all instances associated with the shard.
+ """
+ metadata_shard = read_parquet(path)
+ metadata_list = []
+ for _, metadata in metadata_shard.iterrows():
+ metadata_dict = dict(metadata)
+ if metadata["status"] == "success":
+ metadata_dict["shard_id"] = self._get_shard_id_from_path(path)
+ metadata_list.append(metadata_dict)
+ return metadata_list
diff --git a/src/emma_datasets/parsers/dataset_metadata/epic_kitchens.py b/src/emma_datasets/parsers/dataset_metadata/epic_kitchens.py
new file mode 100644
index 0000000..57b0253
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/epic_kitchens.py
@@ -0,0 +1,100 @@
+from pathlib import Path
+from typing import Any, NamedTuple
+
+from rich.progress import Progress
+
+from emma_datasets.datamodels import DatasetMetadata, DatasetName, MediaType, SourceMedia
+from emma_datasets.datamodels.datasets import EpicKitchensNarrationMetadata
+from emma_datasets.io import read_csv
+from emma_datasets.parsers.dataset_metadata.metadata_parser import (
+ DataPathTuple,
+ DatasetMetadataParser,
+)
+
+
+class ImageDimensions(NamedTuple):
+ """Resolution of a given video from the EK dataset."""
+
+ width: int
+ height: int
+
+
+class EpicKitchensMetadataParser(DatasetMetadataParser[EpicKitchensNarrationMetadata]):
+ """EPIC-KITCHENS Metadata Parser."""
+
+ metadata_model = EpicKitchensNarrationMetadata
+ dataset_name = DatasetName.epic_kitchens
+ file_ext = "csv"
+
+ def __init__(
+ self,
+ data_paths: list[DataPathTuple],
+ frames_dir: Path,
+ captions_dir: Path,
+ features_dir: Path,
+ video_info_file: Path,
+ progress: Progress,
+ ) -> None:
+ super().__init__(data_paths=data_paths, progress=progress)
+
+ self.frames_dir = frames_dir
+ self.captions_dir = captions_dir
+ self.features_dir = features_dir
+
+ self.video_dimensions = self._get_video_dimensions(video_info_file)
+
+ def convert_to_dataset_metadata(
+ self, metadata: EpicKitchensNarrationMetadata
+ ) -> DatasetMetadata:
+ """Convert Narration metadata to DatasetMetadata."""
+ return DatasetMetadata(
+ id=metadata.narration_id,
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=self.get_all_source_media_for_narration(metadata),
+ features_path=self.features_dir.joinpath(
+ f"{metadata.narration_id}.{self.feature_ext}"
+ ),
+ caption_path=self.captions_dir.joinpath(f"{metadata.narration_id}.json"),
+ )
+
+ def get_all_source_media_for_narration(
+ self, metadata: EpicKitchensNarrationMetadata
+ ) -> list[SourceMedia]:
+ """Get all the source media for a given subgoal from EPIC-KITCHENS.
+
+ A big assumption is made that all the RGB frames are separated per video, within different subdirectories for that video.
+
+ Each frame is named like `frame_0000028665.jpg`: a total of 10 digits.
+ """
+ max_padding_length = 10
+
+ frames_for_video_dir = self.frames_dir.joinpath(f"{metadata.video_id}/")
+
+ return [
+ SourceMedia(
+ media_type=MediaType.image,
+ path=frames_for_video_dir.joinpath(
+ f"frame_{str(frame_number).zfill(max_padding_length)}.jpg"
+ ),
+ width=self.video_dimensions[metadata.video_id].width,
+ height=self.video_dimensions[metadata.video_id].height,
+ )
+ for frame_number in range(metadata.start_frame, metadata.stop_frame + 1)
+ ]
+
+ def _read(self, path: Path) -> Any:
+ """Read CSV data from the given path."""
+ return read_csv(path)
+
+ def _get_video_dimensions(self, video_info_file: Path) -> dict[str, ImageDimensions]:
+ raw_data = self._read(video_info_file)
+
+ video_dimensions: dict[str, ImageDimensions] = {}
+
+ for instance in raw_data:
+ video_id = instance["video_id"]
+ width, height = instance["resolution"].split("x")
+ video_dimensions[video_id] = ImageDimensions(int(width), int(height))
+
+ return video_dimensions
diff --git a/src/emma_datasets/parsers/dataset_metadata/gqa.py b/src/emma_datasets/parsers/dataset_metadata/gqa.py
new file mode 100644
index 0000000..9e6f4e6
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/gqa.py
@@ -0,0 +1,77 @@
+from pathlib import Path
+from typing import Any
+
+from rich.progress import Progress
+
+from emma_datasets.datamodels import (
+ DatasetMetadata,
+ DatasetName,
+ DatasetSplit,
+ MediaType,
+ SourceMedia,
+)
+from emma_datasets.datamodels.datasets import GqaImageMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.dataset_metadata.metadata_parser import DatasetMetadataParser
+
+
+class GqaMetadataParser(DatasetMetadataParser[GqaImageMetadata]):
+ """Parse GQA instance metadata."""
+
+ metadata_model = GqaImageMetadata
+ dataset_name = DatasetName.gqa
+
+ def __init__(
+ self,
+ scene_graphs_train_path: Path,
+ scene_graphs_val_path: Path,
+ images_dir: Path,
+ scene_graphs_dir: Path,
+ qa_pairs_dir: Path,
+ features_dir: Path,
+ progress: Progress,
+ ) -> None:
+ super().__init__(
+ progress=progress,
+ data_paths=[
+ (scene_graphs_train_path, DatasetSplit.train),
+ (scene_graphs_val_path, DatasetSplit.valid),
+ ],
+ )
+ self.images_dir = images_dir
+ self.scene_graphs_dir = scene_graphs_dir
+ self.qa_pairs_dir = qa_pairs_dir
+ self.features_dir = features_dir
+
+ def convert_to_dataset_metadata(self, metadata: GqaImageMetadata) -> DatasetMetadata:
+ """Convert single instance's metadata to the common datamodel."""
+ return DatasetMetadata(
+ id=str(metadata.id),
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=SourceMedia(
+ media_type=MediaType.image,
+ path=self.images_dir.joinpath(metadata.file_name),
+ width=metadata.width,
+ height=metadata.height,
+ ),
+ features_path=self.features_dir.joinpath(f"{metadata.id}.{self.feature_ext}"),
+ scene_graph_path=self.scene_graphs_dir.joinpath(f"{metadata.id}.json"),
+ qa_pairs_path=self.qa_pairs_dir.joinpath(f"{metadata.id}.json"),
+ )
+
+ def _preprocess_raw_data(self, image_id: str, scene_graph: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "id": image_id,
+ "file_name": f"{image_id}.jpg",
+ "height": scene_graph["height"],
+ "width": scene_graph["width"],
+ }
+
+ def _read(self, path: Path) -> Any:
+ """Read data from the given path."""
+ raw_data = read_json(path)
+ return [
+ self._preprocess_raw_data(image_id, scene_graph)
+ for image_id, scene_graph in raw_data.items()
+ ]
diff --git a/src/emma_datasets/parsers/dataset_metadata/metadata_parser.py b/src/emma_datasets/parsers/dataset_metadata/metadata_parser.py
new file mode 100644
index 0000000..c9d9d63
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/metadata_parser.py
@@ -0,0 +1,115 @@
+import itertools
+from abc import ABC, abstractmethod
+from collections.abc import Iterator
+from pathlib import Path
+from typing import Any, Generic, Optional, TypeVar
+
+from pydantic import BaseModel
+from rich.progress import Progress
+
+from emma_datasets.datamodels import DatasetMetadata, DatasetName, DatasetSplit
+from emma_datasets.io.paths import get_paths_from_dir
+
+
+T = TypeVar("T", bound=BaseModel)
+
+DataPathTuple = tuple[Path, Optional[DatasetSplit]]
+
+
+class DatasetMetadataParser(ABC, Generic[T]):
+ """Convert the metadata from raw dataset instances into the standardized `DatasetMetadata`.
+
+ This class facilitates converting the metadata per instnace
+
+ Subclasses should provide the class variables for `metadata_model` and `dataset_name`.
+ """
+
+ metadata_model: type[T]
+ dataset_name: DatasetName
+ file_ext: str = "json"
+ feature_ext: str = "pt"
+
+ def __init__(self, data_paths: list[DataPathTuple], progress: Progress) -> None:
+ self.data_paths = self._get_all_file_paths(data_paths)
+
+ self.task_id = progress.add_task(
+ description=f"Structuring metadata from [u]{self.dataset_name.value}[/]",
+ start=False,
+ visible=False,
+ total=0,
+ comment="",
+ )
+
+ @abstractmethod
+ def convert_to_dataset_metadata(self, metadata: T) -> DatasetMetadata:
+ """Convert a single instance of metadata model to the common DatasetMetadata."""
+ raise NotImplementedError()
+
+ def get_metadata(self, progress: Progress) -> Iterator[T]:
+ """Get all the raw metadata for this dataset."""
+ structured_data_iterators: list[Iterator[T]] = []
+
+ for path, dataset_split in self.data_paths:
+ progress.update(
+ self.task_id, visible=True, comment=f"Reading data from [u]{path.parts[-2:]}[/]"
+ )
+ raw_data = self._read(path)
+
+ structured_data = self._structure_raw_metadata(raw_data, dataset_split, progress)
+ structured_data_iterators.append(structured_data)
+
+ return itertools.chain.from_iterable(structured_data_iterators)
+
+ def _structure_raw_metadata(
+ self,
+ raw_metadata: list[dict[str, Any]],
+ dataset_split: Optional[DatasetSplit],
+ progress: Progress,
+ ) -> Iterator[T]:
+ """Structure raw metadata into a Pydantic model.
+
+ This uses the class variable `metadata_model`.
+ """
+ raw_data = ({**metadata, "dataset_split": dataset_split} for metadata in raw_metadata)
+
+ current_task_total = progress.tasks[self.task_id].total
+ progress.update(
+ self.task_id,
+ visible=True,
+ total=current_task_total + len(raw_metadata)
+ if current_task_total is not None
+ else None,
+ comment="Structuring raw metadata",
+ )
+ progress.start_task(self.task_id)
+
+ for raw_instance in raw_data:
+ progress.advance(self.task_id)
+ yield self.metadata_model.parse_obj(raw_instance)
+
+ progress.update(self.task_id, comment="Done!")
+
+ @abstractmethod
+ def _read(self, path: Path) -> Any:
+ """Read data from the given path."""
+ raise NotImplementedError()
+
+ def _get_all_file_paths(self, data_paths: list[DataPathTuple]) -> list[DataPathTuple]:
+ """Convert any directories to file paths if they're given."""
+ all_file_paths: list[DataPathTuple] = []
+
+ for path, dataset_split in data_paths:
+ # Verify the path is a directory before getting all the files within it.
+ if not path.is_file() and path.is_dir():
+ file_paths = (
+ path
+ for path in get_paths_from_dir(path)
+ if path.suffix.endswith(self.file_ext)
+ )
+ new_paths = zip(file_paths, itertools.cycle([dataset_split]))
+ all_file_paths.extend(list(new_paths))
+ else:
+ # If it's not a directory, just let it go through.
+ all_file_paths.append((path, dataset_split))
+
+ return all_file_paths
diff --git a/src/emma_datasets/parsers/dataset_metadata/vg.py b/src/emma_datasets/parsers/dataset_metadata/vg.py
new file mode 100644
index 0000000..db8b2b9
--- /dev/null
+++ b/src/emma_datasets/parsers/dataset_metadata/vg.py
@@ -0,0 +1,51 @@
+from pathlib import Path
+from typing import Any
+
+from rich.progress import Progress
+
+from emma_datasets.datamodels import DatasetMetadata, DatasetName, MediaType, SourceMedia
+from emma_datasets.datamodels.datasets import VgImageMetadata
+from emma_datasets.io import read_json
+from emma_datasets.parsers.dataset_metadata.metadata_parser import DatasetMetadataParser
+
+
+class VgMetadataParser(DatasetMetadataParser[VgImageMetadata]):
+ """Convert VG instance metadata."""
+
+ metadata_model = VgImageMetadata
+ dataset_name = DatasetName.visual_genome
+
+ def __init__(
+ self,
+ image_data_json_path: Path,
+ images_dir: Path,
+ regions_dir: Path,
+ features_dir: Path,
+ progress: Progress,
+ ) -> None:
+ super().__init__(progress=progress, data_paths=[(image_data_json_path, None)])
+
+ self.images_dir = images_dir
+ self.regions_dir = regions_dir
+ self.features_dir = features_dir
+
+ def convert_to_dataset_metadata(self, metadata: VgImageMetadata) -> DatasetMetadata:
+ """Convert single instance's metadata to the common datamodel."""
+ return DatasetMetadata(
+ id=metadata.image_id,
+ name=self.dataset_name,
+ split=metadata.dataset_split,
+ media=SourceMedia(
+ url=metadata.url,
+ media_type=MediaType.image,
+ path=self.images_dir.joinpath(f"{metadata.image_id}.jpg"),
+ width=metadata.width,
+ height=metadata.height,
+ ),
+ features_path=self.features_dir.joinpath(f"{metadata.image_id}.{self.feature_ext}"),
+ regions_path=self.regions_dir.joinpath(f"{metadata.image_id}.json"),
+ )
+
+ def _read(self, path: Path) -> Any:
+ """Read data from the given path."""
+ return read_json(path)
diff --git a/src/emma_datasets/parsers/instance_creators/__init__.py b/src/emma_datasets/parsers/instance_creators/__init__.py
new file mode 100644
index 0000000..4e31105
--- /dev/null
+++ b/src/emma_datasets/parsers/instance_creators/__init__.py
@@ -0,0 +1,3 @@
+from emma_datasets.parsers.instance_creators.downstream import DownstreamInstanceCreator
+from emma_datasets.parsers.instance_creators.generic import GenericInstanceCreator
+from emma_datasets.parsers.instance_creators.pretrain import PretrainInstanceCreator
diff --git a/src/emma_datasets/parsers/instance_creators/downstream.py b/src/emma_datasets/parsers/instance_creators/downstream.py
new file mode 100644
index 0000000..6db55b1
--- /dev/null
+++ b/src/emma_datasets/parsers/instance_creators/downstream.py
@@ -0,0 +1,51 @@
+from pathlib import Path
+from typing import Any, TypeVar, Union
+
+from rich.progress import Progress
+
+from emma_datasets.datamodels import BaseInstance
+from emma_datasets.db.storage import DataStorage, JsonStorage
+from emma_datasets.parsers.instance_creators.generic import GenericInstanceCreator
+
+
+InstanceModelType = TypeVar("InstanceModelType", bound=BaseInstance)
+
+
+class DownstreamInstanceCreator(
+ GenericInstanceCreator[Union[Path, str, dict[Any, Any]], InstanceModelType]
+):
+ """Create instances for downstream datasets.
+
+ We assume that downstream datasets are either a Path to a file, or a string which can be parsed
+ with orjson to a Pydantic model.
+ """
+
+ def __init__(
+ self,
+ instance_model_type: type[InstanceModelType],
+ progress: Progress,
+ task_description: str = "Creating instances",
+ should_compress: bool = True,
+ data_storage: DataStorage = JsonStorage(), # noqa: WPS404
+ ) -> None:
+ super().__init__(
+ progress=progress,
+ task_description=task_description,
+ should_compress=should_compress,
+ data_storage=data_storage,
+ )
+
+ self.instance_model_type = instance_model_type
+
+ def _create_instance(self, input_data: Union[Path, str, dict[Any, Any]]) -> InstanceModelType:
+ """Parse the instance from the file and return it."""
+ if isinstance(input_data, Path):
+ return self.instance_model_type.parse_file(input_data)
+
+ if isinstance(input_data, str):
+ return self.instance_model_type.parse_raw(input_data)
+
+ if isinstance(input_data, dict):
+ return self.instance_model_type.parse_obj(input_data)
+
+ raise NotImplementedError("Input data type is not supported.")
diff --git a/src/emma_datasets/parsers/instance_creators/generic.py b/src/emma_datasets/parsers/instance_creators/generic.py
new file mode 100644
index 0000000..b9335f1
--- /dev/null
+++ b/src/emma_datasets/parsers/instance_creators/generic.py
@@ -0,0 +1,74 @@
+from abc import ABC, abstractmethod
+from collections.abc import Iterable, Iterator
+from multiprocessing.pool import Pool
+from typing import Generic, Optional, TypeVar, Union
+
+from pydantic import BaseModel
+from rich.progress import Progress
+
+from emma_datasets.db import DataStorage, JsonStorage
+
+
+InputType = TypeVar("InputType")
+OutputType = TypeVar("OutputType", bound=BaseModel)
+
+
+class GenericInstanceCreator(ABC, Generic[InputType, OutputType]):
+ """Create instances from groups of metadata from all the datasets."""
+
+ def __init__(
+ self,
+ progress: Progress,
+ task_description: str = "Creating instances",
+ data_storage: DataStorage = JsonStorage(), # noqa: WPS404
+ should_compress: bool = False,
+ ) -> None:
+ self.task_id = progress.add_task(
+ task_description,
+ visible=False,
+ start=False,
+ total=float("inf"),
+ comment="",
+ )
+
+ self._should_compress = should_compress
+ self.storage = data_storage
+
+ def __call__(
+ self,
+ input_data: Iterable[InputType],
+ progress: Progress,
+ pool: Optional[Pool] = None,
+ ) -> Union[Iterator[OutputType], Iterator[bytes]]:
+ """Create instances from a list of input data."""
+ progress.start_task(self.task_id)
+ progress.update(self.task_id, visible=True)
+
+ iterator: Iterator[Union[OutputType, bytes]]
+
+ if pool is not None:
+ iterator = pool.imap_unordered(self.create_instance, input_data)
+ else:
+ iterator = (self.create_instance(instance) for instance in input_data)
+
+ for instance in iterator:
+ progress.advance(self.task_id)
+ yield instance
+
+ def create_instance(self, input_data: InputType) -> Union[OutputType, bytes]:
+ """Create the instance from a single piece of input data.
+
+ If desired, also compress the instance into the bytes representation to faciliate drastic
+ speed increases in writing to the DB.
+ """
+ instance = self._create_instance(input_data)
+
+ if self._should_compress:
+ return self.storage.compress(instance)
+
+ return instance
+
+ @abstractmethod
+ def _create_instance(self, input_data: InputType) -> OutputType:
+ """The main logic for creating the instance goes here."""
+ raise NotImplementedError
diff --git a/src/emma_datasets/parsers/instance_creators/pretrain.py b/src/emma_datasets/parsers/instance_creators/pretrain.py
new file mode 100644
index 0000000..0412530
--- /dev/null
+++ b/src/emma_datasets/parsers/instance_creators/pretrain.py
@@ -0,0 +1,154 @@
+from typing import Optional
+
+from pydantic import parse_file_as
+
+from emma_datasets.datamodels import (
+ ActionTrajectory,
+ AnnotationDatasetMap,
+ AnnotationType,
+ Caption,
+ DatasetMetadata,
+ Instance,
+ QuestionAnswerPair,
+ Region,
+ SceneGraph,
+ TaskDescription,
+)
+from emma_datasets.parsers.instance_creators.generic import GenericInstanceCreator
+
+
+class PretrainInstanceCreator(GenericInstanceCreator[list[DatasetMetadata], Instance]):
+ """Create instances from groups of metadata from all the datasets."""
+
+ def _create_instance(self, input_data: list[DatasetMetadata]) -> Instance:
+ """Create instance from a single group of metadata."""
+ regions = self._get_regions(input_data)
+ scene_graph = self._get_scene_graph(input_data)
+ trajectory = self._get_action_trajectory(input_data)
+ captions = self._get_captions(input_data)
+ qa_pairs = self._get_qa_pairs(input_data)
+ task_description = self._get_task_description(input_data)
+
+ return Instance(
+ dataset={metadata.name: metadata for metadata in input_data},
+ captions=captions,
+ qa_pairs=qa_pairs,
+ regions=regions,
+ scene_graph=scene_graph,
+ trajectory=trajectory,
+ task_description=task_description,
+ )
+
+ def _get_regions(self, metadata_list: list[DatasetMetadata]) -> Optional[list[Region]]:
+ """Get regions for instance from given path in dataset metadata."""
+ filtered_metadata_list = self._filter_metadata_list(metadata_list, AnnotationType.region)
+
+ if not filtered_metadata_list:
+ return None
+
+ # If it is not None, we are assuming there is ONLY one in the list.
+ metadata = filtered_metadata_list[0]
+
+ if metadata.regions_path is None:
+ raise ValueError("`metadata.regions_path` should not be `None`")
+
+ return parse_file_as(list[Region], metadata.regions_path)
+
+ def _get_scene_graph(self, metadata_list: list[DatasetMetadata]) -> Optional[SceneGraph]:
+ """Get scene graph for scene from given path."""
+ filtered_metadata_list = self._filter_metadata_list(
+ metadata_list, AnnotationType.scene_graph
+ )
+
+ if not filtered_metadata_list:
+ return None
+
+ # If it is not None, we are assuming there is ONLY one in the list.
+ metadata = filtered_metadata_list[0]
+
+ if metadata.scene_graph_path is None:
+ raise ValueError("`metadata.scene_graph_path` should not be `None`")
+
+ return SceneGraph.parse_file(metadata.scene_graph_path)
+
+ def _get_action_trajectory(
+ self, metadata_list: list[DatasetMetadata]
+ ) -> Optional[ActionTrajectory]:
+ filtered_metadata_list = self._filter_metadata_list(
+ metadata_list, AnnotationType.action_trajectory
+ )
+
+ if not filtered_metadata_list:
+ return None
+
+ # If not None, assume only ONE trajectory in the list
+ metadata = filtered_metadata_list[0]
+
+ if metadata.action_trajectory_path is None:
+ raise ValueError("`metadata.action_trajectory_path` should not be `None`")
+
+ return ActionTrajectory.parse_file(metadata.action_trajectory_path)
+
+ def _get_task_description(
+ self, metadata_list: list[DatasetMetadata]
+ ) -> Optional[list[TaskDescription]]:
+ filtered_metadata_list = self._filter_metadata_list(
+ metadata_list, AnnotationType.task_description
+ )
+
+ if not filtered_metadata_list:
+ return None
+
+ # If not None, assume only ONE trajectory in the list
+ metadata = filtered_metadata_list[0]
+ if metadata.task_description_path is None:
+ raise ValueError("`metadata.task_description_path` should not be `None`")
+
+ return parse_file_as(list[TaskDescription], metadata.task_description_path)
+
+ def _get_captions(self, metadata_list: list[DatasetMetadata]) -> list[Caption]:
+ """Get captions for instance."""
+ filtered_metadata_list = self._filter_metadata_list(metadata_list, AnnotationType.caption)
+
+ if not filtered_metadata_list:
+ return []
+
+ captions = []
+
+ for metadata in filtered_metadata_list:
+ if metadata.caption_path is None:
+ raise ValueError("`metadata.caption_path` should not be `None`")
+
+ captions.extend(parse_file_as(list[Caption], metadata.caption_path))
+
+ return captions
+
+ def _get_qa_pairs(self, metadata_list: list[DatasetMetadata]) -> list[QuestionAnswerPair]:
+ """Get question answer pairs for instance."""
+ filtered_metadata_list = self._filter_metadata_list(metadata_list, AnnotationType.qa_pair)
+
+ if not filtered_metadata_list:
+ return []
+
+ qa_pairs = []
+
+ for metadata in filtered_metadata_list:
+ if metadata.qa_pairs_path is None:
+ raise ValueError("`metadata.qa_pairs_path` should not be `None`")
+
+ try:
+ qa_pairs.extend(parse_file_as(list[QuestionAnswerPair], metadata.qa_pairs_path))
+ except FileNotFoundError:
+ # TODO(amit): add reasoning for this exception in docstring
+ pass # noqa: WPS420
+
+ return qa_pairs
+
+ def _filter_metadata_list(
+ self, metadata_list: list[DatasetMetadata], annotation: AnnotationType
+ ) -> list[DatasetMetadata]:
+ return [
+ metadata
+ for metadata in metadata_list
+ if metadata.name in AnnotationDatasetMap[annotation]
+ ]
diff --git a/src/emma_datasets/pipeline/__init__.py b/src/emma_datasets/pipeline/__init__.py
new file mode 100644
index 0000000..60b8ee7
--- /dev/null
+++ b/src/emma_datasets/pipeline/__init__.py
@@ -0,0 +1,2 @@
+from emma_datasets.pipeline.downstream_db_creator import DownstreamDbCreator
+from emma_datasets.pipeline.metadata_parser import MetadataParser
diff --git a/src/emma_datasets/pipeline/downstream_db_creator.py b/src/emma_datasets/pipeline/downstream_db_creator.py
new file mode 100644
index 0000000..2301178
--- /dev/null
+++ b/src/emma_datasets/pipeline/downstream_db_creator.py
@@ -0,0 +1,298 @@
+from collections.abc import Iterable
+from multiprocessing.pool import Pool
+from pathlib import Path
+from typing import Any, Generic, Optional, TypeVar, Union
+
+from datasets import Dataset, DatasetDict, IterableDataset, IterableDatasetDict, load_dataset
+from rich.progress import BarColumn, Progress, TaskID, TimeElapsedColumn
+
+from emma_datasets.common import Settings
+from emma_datasets.common.progress import BatchesProcessedColumn, ProcessingSpeedColumn
+from emma_datasets.datamodels import BaseInstance, DatasetName, DatasetSplit
+from emma_datasets.db import DatasetDb
+from emma_datasets.db.storage import StorageType, TorchStorage
+from emma_datasets.parsers.instance_creators import DownstreamInstanceCreator
+
+
+settings = Settings()
+
+DatasetSplitSourceType = TypeVar(
+ "DatasetSplitSourceType",
+ Path,
+ list[Path],
+ list[dict[Any, Any]],
+ Union[Dataset, IterableDataset],
+)
+InstanceModelType = TypeVar("InstanceModelType", bound=BaseInstance)
+
+
+def create_downstream_rich_progress() -> Progress:
+ """Create a Rich Progress tracker for the creator."""
+ return Progress(
+ "[progress.description]{task.description}",
+ BarColumn(),
+ BatchesProcessedColumn(),
+ TimeElapsedColumn(),
+ ProcessingSpeedColumn(),
+ "[purple]{task.fields[comment]}[/]",
+ )
+
+
+class DownstreamDbCreator(Generic[DatasetSplitSourceType, InstanceModelType]):
+ """Create a DatasetDb file for a downstream dataset."""
+
+ db_file_ext: str = "db"
+
+ def __init__(
+ self,
+ dataset_name: DatasetName,
+ source_per_split: dict[DatasetSplit, DatasetSplitSourceType],
+ instance_creator: DownstreamInstanceCreator[InstanceModelType],
+ progress: Progress,
+ output_dir: Path = settings.paths.databases,
+ ) -> None:
+ self.dataset_name = dataset_name
+
+ self.source_per_split: dict[DatasetSplit, DatasetSplitSourceType] = source_per_split
+ self.instance_creator = instance_creator
+
+ self._output_dir = output_dir
+
+ # Store progress and create tasks for each dataset split
+ self.progress = progress
+ self._task_ids = self._create_progress_tasks(source_per_split.keys())
+
+ @classmethod
+ def from_jsonl(
+ cls,
+ dataset_name: DatasetName,
+ source_per_split: dict[DatasetSplit, Path],
+ instance_model_type: type[InstanceModelType],
+ output_dir: Path = settings.paths.databases,
+ ) -> "DownstreamDbCreator[Path, InstanceModelType]":
+ """Create the DatasetDb file using JSONL files from the downstream dataset.
+
+ The entire dataet must be contained within a JSONL file.
+ """
+ progress = create_downstream_rich_progress()
+
+ if not all(path.suffix.lower().endswith("jsonl") for path in source_per_split.values()):
+ raise AssertionError("All provided paths must be `JSONL` files.")
+
+ if not all(path.is_file() for path in source_per_split.values()):
+ raise AssertionError("All provided file paths must be a single file.")
+
+ instance_creator = DownstreamInstanceCreator(
+ instance_model_type=instance_model_type,
+ progress=progress,
+ task_description=f"Creating {dataset_name.value} instances",
+ )
+
+ db_creator = DownstreamDbCreator[Path, InstanceModelType](
+ dataset_name=dataset_name,
+ source_per_split=source_per_split,
+ output_dir=output_dir,
+ instance_creator=instance_creator,
+ progress=progress,
+ )
+
+ return db_creator
+
+ @classmethod
+ def from_huggingface(
+ cls,
+ huggingface_dataset_identifier: str,
+ dataset_name: DatasetName,
+ instance_model_type: type[InstanceModelType],
+ output_dir: Path = settings.paths.databases,
+ hf_auth_token: Optional[Union[bool, str]] = None,
+ ) -> "DownstreamDbCreator[Union[Dataset, IterableDataset], InstanceModelType]":
+ """Instantiate a DownstreamDbCreator for datasets from the Hugging Face Hub.
+
+ Args:
+ huggingface_dataset_identifier (str): The dataset identifier from the Hugging Face Hub
+ dataset_name (DatasetName): Enum for the dataset Name
+ instance_model_type (type[InstanceModelType]): The non-instantated instance for your
+ dataset
+ output_dir (Path): The directory where the DB file will be created. Defaults
+ to settings.paths.databases.
+ hf_auth_token (Optional[Union[bool, str]]): If required, the Hugging Face
+ authentication token. Defaults to None.
+
+ Returns:
+ Returns a DB creator that handles Hugging Face datasets.
+ """
+ dataset = load_dataset(huggingface_dataset_identifier, use_auth_token=hf_auth_token)
+
+ generator_per_splits: dict[DatasetSplit, Union[Dataset, IterableDataset]] = (
+ # this dataset has predefined splits
+ {DatasetSplit[split_id]: split_dataset for split_id, split_dataset in dataset.items()}
+ if isinstance(dataset, (DatasetDict, IterableDatasetDict))
+ # this dataset does not have any predefined splits so we use it as is
+ else {DatasetSplit.train: dataset}
+ )
+
+ progress = create_downstream_rich_progress()
+
+ instance_creator = DownstreamInstanceCreator(
+ instance_model_type=instance_model_type,
+ progress=progress,
+ task_description=f"Creating {dataset_name.value} instances",
+ data_storage=TorchStorage(),
+ )
+
+ db_creator = DownstreamDbCreator[Union[Dataset, IterableDataset], InstanceModelType](
+ dataset_name=dataset_name,
+ source_per_split=generator_per_splits,
+ output_dir=output_dir,
+ instance_creator=instance_creator,
+ progress=progress,
+ )
+ return db_creator
+
+ @classmethod
+ def from_one_instance_per_dict(
+ cls,
+ dataset_name: DatasetName,
+ source_per_split: dict[DatasetSplit, list[dict[Any, Any]]],
+ instance_model_type: type[InstanceModelType],
+ output_dir: Path = settings.paths.databases,
+ ) -> "DownstreamDbCreator[list[dict[Any, Any]], InstanceModelType]":
+ """Instantiate the Db creator when the input data is loaded and processed in a dictionary.
+
+ Each dictionary element is a list of all instances for a dataset split.
+ """
+ progress = create_downstream_rich_progress()
+
+ instance_creator = DownstreamInstanceCreator(
+ instance_model_type=instance_model_type,
+ progress=progress,
+ task_description=f"Creating {dataset_name.value} instances",
+ )
+
+ db_creator = DownstreamDbCreator[list[dict[Any, Any]], InstanceModelType](
+ dataset_name=dataset_name,
+ source_per_split=source_per_split,
+ output_dir=output_dir,
+ instance_creator=instance_creator,
+ progress=progress,
+ )
+ return db_creator
+
+ @classmethod
+ def from_one_instance_per_json(
+ cls,
+ dataset_name: DatasetName,
+ source_per_split: dict[DatasetSplit, list[Path]],
+ instance_model_type: type[InstanceModelType],
+ output_dir: Path = settings.paths.databases,
+ ) -> "DownstreamDbCreator[list[Path], InstanceModelType]":
+ """Instantiate the Db creator when the input data is separated across JSON files.
+
+ Each JSON file must have one instance.
+ """
+ progress = create_downstream_rich_progress()
+
+ instance_creator = DownstreamInstanceCreator(
+ instance_model_type=instance_model_type,
+ progress=progress,
+ task_description=f"Creating {dataset_name.value} instances",
+ )
+
+ db_creator = DownstreamDbCreator[list[Path], InstanceModelType](
+ dataset_name=dataset_name,
+ source_per_split=source_per_split,
+ output_dir=output_dir,
+ instance_creator=instance_creator,
+ progress=progress,
+ )
+ return db_creator
+
+ def run(self, num_workers: Optional[int] = None) -> None:
+ """Use multiprocessing to create and process all input data across all splits."""
+ process_pool = Pool(num_workers)
+
+ with self.progress, process_pool: # noqa: WPS316
+ for split, paths in self.source_per_split.items():
+ self.run_for_split(
+ iterable_input_data=self._prepare_input_data_for_instance_creator(paths),
+ dataset_split=split,
+ pool=process_pool,
+ storage_type=self._storage_type,
+ )
+
+ def run_for_split(
+ self,
+ iterable_input_data: Union[Iterable[str], Iterable[Path], Iterable[dict[Any, Any]]],
+ dataset_split: DatasetSplit,
+ pool: Optional[Pool] = None,
+ storage_type: StorageType = StorageType.json,
+ ) -> None:
+ """Process and write the input data for a given dataset split."""
+ task_id = self._task_ids[dataset_split]
+
+ instance_iterator = self.instance_creator(iterable_input_data, self.progress, pool)
+
+ self.progress.reset(task_id, start=True, visible=True)
+ with DatasetDb(
+ self._get_db_path(dataset_split), readonly=False, storage_type=storage_type
+ ) as db:
+ for idx, instance in enumerate(instance_iterator):
+ dataset_idx = f"{self.dataset_name.name}_{dataset_split.name}_{idx}"
+
+ db[(idx, dataset_idx)] = instance
+ self.progress.advance(task_id)
+
+ self._end_progress(task_id)
+
+ def _create_progress_tasks(
+ self, dataset_splits: Iterable[DatasetSplit]
+ ) -> dict[DatasetSplit, TaskID]:
+ """Create tasks on the progress bar for each dataset split."""
+ return {
+ dataset_split: self.progress.add_task(
+ f"Writing {dataset_split.value} instances for {self.dataset_name.value}",
+ total=float("inf"),
+ start=False,
+ visible=False,
+ comment="",
+ )
+ for dataset_split in dataset_splits
+ }
+
+ def _get_db_path(self, dataset_split: DatasetSplit) -> Path:
+ """Get the output location of the DatasetDb file for a given split."""
+ db_file_name = f"{self.dataset_name.name}_{dataset_split.name}.{self.db_file_ext}"
+ return self._output_dir.joinpath(db_file_name)
+
+ def _end_progress(self, task_id: TaskID) -> None:
+ """Stop the progress bar and make sure to freeze the finished bar."""
+ completed = int(self.progress._tasks[task_id].completed) # noqa: WPS437
+ self.progress.update(
+ task_id, visible=True, total=completed, completed=completed, comment="Done!"
+ )
+ self.progress.stop_task(task_id)
+
+ def _prepare_input_data_for_instance_creator(
+ self, data_for_dataset_split: DatasetSplitSourceType
+ ) -> Union[Iterable[str], Iterable[Path], Iterable[dict[Any, Any]]]:
+ """Convert the path data for a dataset split into a supported form."""
+ if isinstance(data_for_dataset_split, Path) and data_for_dataset_split.exists():
+ with data_for_dataset_split.open() as split_data_file:
+ return split_data_file.readlines()
+
+ if isinstance(data_for_dataset_split, Iterable):
+ if all(isinstance(element, Path) for element in data_for_dataset_split):
+ return data_for_dataset_split
+ elif all(isinstance(element, dict) for element in data_for_dataset_split):
+ return data_for_dataset_split
+
+ raise NotImplementedError
+
+ @property
+ def _storage_type(self) -> StorageType:
+ """Get the current storage type used by the DatasetDb.
+
+ This is extracted from within the instance creator.
+ """
+ return self.instance_creator.storage.storage_type
diff --git a/src/emma_datasets/pipeline/metadata_parser.py b/src/emma_datasets/pipeline/metadata_parser.py
new file mode 100644
index 0000000..f64718e
--- /dev/null
+++ b/src/emma_datasets/pipeline/metadata_parser.py
@@ -0,0 +1,183 @@
+import itertools
+from collections.abc import Iterator
+
+from rich.progress import Progress
+
+from emma_datasets.common import Settings
+from emma_datasets.datamodels import DatasetMetadata, DatasetName, DatasetSplit
+from emma_datasets.datamodels.datasets import CocoImageMetadata, GqaImageMetadata, VgImageMetadata
+from emma_datasets.parsers.align_multiple_datasets import AlignMultipleDatasets
+from emma_datasets.parsers.dataset_aligner import DatasetAligner
+from emma_datasets.parsers.dataset_metadata import (
+ AlfredMetadataParser,
+ CocoMetadataParser,
+ ConceptualCaptionsMetadataParser,
+ EpicKitchensMetadataParser,
+ GqaMetadataParser,
+ VgMetadataParser,
+)
+
+
+settings = Settings()
+
+
+class MetadataParser:
+ """Provide a simple interface for parsing metadata for all the datasets."""
+
+ def __init__(self, progress: Progress) -> None:
+ self.progress = progress
+
+ self._vg = VgMetadataParser(
+ settings.paths.visual_genome.joinpath("image_data.json"),
+ images_dir=settings.paths.visual_genome_images,
+ regions_dir=settings.paths.regions,
+ features_dir=settings.paths.visual_genome_features,
+ progress=self.progress,
+ )
+
+ self._gqa = GqaMetadataParser(
+ scene_graphs_train_path=settings.paths.gqa_scene_graphs.joinpath(
+ "train_sceneGraphs.json"
+ ),
+ scene_graphs_val_path=settings.paths.gqa_scene_graphs.joinpath("val_sceneGraphs.json"),
+ images_dir=settings.paths.gqa_images,
+ scene_graphs_dir=settings.paths.scene_graphs,
+ qa_pairs_dir=settings.paths.qa_pairs,
+ features_dir=settings.paths.gqa_features,
+ progress=self.progress,
+ )
+
+ self._coco = CocoMetadataParser(
+ caption_train_path=settings.paths.coco.joinpath("captions_train2017.json"),
+ caption_val_path=settings.paths.coco.joinpath("captions_val2017.json"),
+ images_dir=settings.paths.coco_images,
+ captions_dir=settings.paths.captions,
+ features_dir=settings.paths.coco_features,
+ qa_pairs_dir=settings.paths.qa_pairs,
+ progress=self.progress,
+ )
+
+ self._epic_kitchens = EpicKitchensMetadataParser(
+ data_paths=[
+ (settings.paths.epic_kitchens.joinpath("EPIC_100_train.csv"), DatasetSplit.train),
+ (
+ settings.paths.epic_kitchens.joinpath("EPIC_100_validation.csv"),
+ DatasetSplit.valid,
+ ),
+ ],
+ frames_dir=settings.paths.epic_kitchens_frames,
+ captions_dir=settings.paths.captions,
+ features_dir=settings.paths.epic_kitchens_features,
+ video_info_file=settings.paths.epic_kitchens.joinpath("EPIC_100_video_info.csv"),
+ progress=self.progress,
+ )
+
+ self._alfred = AlfredMetadataParser(
+ data_paths=[
+ (settings.paths.alfred_data.joinpath("train/"), DatasetSplit.train),
+ (settings.paths.alfred_data.joinpath("valid_seen/"), DatasetSplit.valid),
+ ],
+ alfred_dir=settings.paths.alfred_data,
+ captions_dir=settings.paths.captions,
+ trajectories_dir=settings.paths.trajectories,
+ features_dir=settings.paths.alfred_features,
+ task_descriptions_dir=settings.paths.task_descriptions,
+ progress=self.progress,
+ )
+
+ self._vg_coco_aligner = DatasetAligner[VgImageMetadata, CocoImageMetadata](
+ self._vg,
+ self._coco,
+ source_mapping_attr_for_target="coco_id",
+ target_mapping_attr_for_source="id",
+ progress=self.progress,
+ )
+
+ self._gqa_vg_aligner = DatasetAligner[GqaImageMetadata, VgImageMetadata](
+ self._gqa,
+ self._vg,
+ source_mapping_attr_for_target="id",
+ target_mapping_attr_for_source="image_id",
+ progress=self.progress,
+ )
+
+ self._align_coco_gqa_with_vg = AlignMultipleDatasets(
+ DatasetName.visual_genome, self.progress, "Merging VG, COCO and GQA where possible"
+ )
+
+ self._conceptual_captions = ConceptualCaptionsMetadataParser(
+ parquet_files_dir=[
+ (settings.paths.conceptual_captions.joinpath("train/"), DatasetSplit.train),
+ (settings.paths.conceptual_captions.joinpath("valid/"), DatasetSplit.valid),
+ ],
+ features_dir=[
+ (
+ settings.paths.conceptual_captions_features.joinpath("train/"),
+ DatasetSplit.train,
+ ),
+ (
+ settings.paths.conceptual_captions_features.joinpath("valid/"),
+ DatasetSplit.valid,
+ ),
+ ],
+ captions_dir=[
+ (
+ settings.paths.captions.joinpath("conceptual_captions", "train/"),
+ DatasetSplit.train,
+ ),
+ (
+ settings.paths.captions.joinpath("conceptual_captions", "valid/"),
+ DatasetSplit.valid,
+ ),
+ ],
+ progress=self.progress,
+ )
+
+ def get_all_metadata_groups(self) -> Iterator[list[DatasetMetadata]]:
+ """Get all dataset metadata from the input datasets."""
+ return itertools.chain(
+ self.coco_vg_gqa(),
+ self.epic_kitchens(),
+ self.alfred(),
+ self.conceptual_captions(),
+ )
+
+ def coco_vg_gqa(self) -> Iterator[list[DatasetMetadata]]:
+ """Get groups of aligned dataset metadata from COCO, VG, and GQA."""
+ aligned_vg_coco_metadata = self._vg_coco_aligner.get_aligned_metadata()
+ aligned_gqa_vg_metadata = self._gqa_vg_aligner.get_aligned_metadata()
+
+ dataset_metadata = self._align_coco_gqa_with_vg(
+ aligned_vg_coco_metadata, aligned_gqa_vg_metadata
+ )
+ return dataset_metadata
+
+ def epic_kitchens(self) -> Iterator[list[DatasetMetadata]]:
+ """Get dataset metadata from the EPIC-KITCHENS dataset."""
+ narration_metadata = self._epic_kitchens.get_metadata(self.progress)
+ dataset_metadata = (
+ [self._epic_kitchens.convert_to_dataset_metadata(metadata)]
+ for metadata in narration_metadata
+ )
+
+ return dataset_metadata
+
+ def alfred(self) -> Iterator[list[DatasetMetadata]]:
+ """Get dataset metadata from the ALFRED dataset."""
+ alfred_metadata = self._alfred.get_metadata(self.progress)
+ dataset_metadata_iterator = itertools.chain.from_iterable(
+ self._alfred.convert_to_dataset_metadata(metadata) for metadata in alfred_metadata
+ )
+ dataset_metadata = ([metadata] for metadata in dataset_metadata_iterator)
+
+ return dataset_metadata
+
+ def conceptual_captions(self) -> Iterator[list[DatasetMetadata]]:
+ """Get dataset metadata from Conceptual Captions dataset."""
+ conceptual_captions_metadata = self._conceptual_captions.get_metadata(self.progress)
+ dataset_metadata = (
+ [self._conceptual_captions.convert_to_dataset_metadata(metadata)]
+ for metadata in conceptual_captions_metadata
+ )
+
+ return dataset_metadata
diff --git a/storage/.gitkeep b/storage/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/storage/fixtures/EPIC_100_video_info.csv b/storage/fixtures/EPIC_100_video_info.csv
new file mode 100644
index 0000000..be226d7
--- /dev/null
+++ b/storage/fixtures/EPIC_100_video_info.csv
@@ -0,0 +1,701 @@
+video_id,duration,fps,resolution
+P01_01,1652.152817,59.9400599400599,1920x1080
+P01_02,502.134967,59.9400599400599,1920x1080
+P01_03,118.85206699999999,59.9400599400599,1920x1080
+P01_04,105.23846699999999,59.9400599400599,1920x1080
+P01_05,1271.988033,59.9400599400599,1920x1080
+P01_06,492.22506699999997,59.9400599400599,1920x1080
+P01_07,161.394567,59.9400599400599,1920x1080
+P01_08,98.965533,59.9400599400599,1920x1080
+P01_09,3571.06815,59.9400599400599,1920x1080
+P01_10,139.0389,59.9400599400599,1920x1080
+P01_11,561.527633,59.9400599400599,1920x1080
+P01_12,173.806967,59.9400599400599,1920x1080
+P01_13,93.760333,59.9400599400599,1920x1080
+P01_14,1352.585217,59.9400599400599,1920x1080
+P01_15,924.957367,59.9400599400599,1920x1080
+P01_16,174.62445,59.9400599400599,1920x1080
+P01_17,1153.119283,59.9400599400599,1920x1080
+P01_18,3692.672967,59.9400599400599,1920x1080
+P01_19,477.9775,59.9400599400599,1920x1080
+P01_101,1831.46,50.0,1920x1080
+P01_102,274.92,50.0,1920x1080
+P01_103,178.02,50.0,1920x1080
+P01_104,245.64,50.0,1920x1080
+P01_105,2120.36,50.0,1920x1080
+P01_106,723.38,50.0,1920x1080
+P01_107,119.44,50.0,1920x1080
+P01_108,139.9,50.0,1920x1080
+P01_109,3708.04,50.0,1920x1080
+P02_01,232.98275,59.9400599400599,1920x1080
+P02_02,207.040167,59.9400599400599,1920x1080
+P02_03,1252.184917,59.9400599400599,1920x1080
+P02_04,422.388633,59.9400599400599,1920x1080
+P02_05,18.551867,59.9400599400599,1920x1080
+P02_06,1035.551183,59.9400599400599,1920x1080
+P02_07,108.57513300000001,59.9400599400599,1920x1080
+P02_08,66.9669,59.9400599400599,1920x1080
+P02_09,2199.849967,59.9400599400599,1920x1080
+P02_10,48.7487,59.9400599400599,1920x1080
+P02_11,54.08736700000001,59.9400599400599,1920x1080
+P02_12,1315.333,59.9400599400599,1920x1080
+P02_13,29.512817,59.9400599400599,1920x1080
+P02_14,32.198833,59.9400599400599,1920x1080
+P02_15,94.02726700000001,59.9400599400599,1920x1080
+P02_101,243.72,50.0,1920x1080
+P02_102,227.08,50.0,1920x1080
+P02_103,122.16,50.0,1920x1080
+P02_104,567.18,50.0,1920x1080
+P02_105,410.38,50.0,1920x1080
+P02_106,64.34,50.0,1920x1080
+P02_107,121.46,50.0,1920x1080
+P02_108,1291.64,50.0,1920x1080
+P02_109,912.58,50.0,1920x1080
+P02_110,179.24,50.0,1920x1080
+P02_111,52.58,50.0,1920x1080
+P02_112,1182.62,50.0,1920x1080
+P02_113,448.7,50.0,1920x1080
+P02_114,35.7,50.0,1920x1080
+P02_115,106.5,50.0,1920x1080
+P02_116,68.38,50.0,1920x1080
+P02_117,348.38,50.0,1920x1080
+P02_118,776.46,50.0,1920x1080
+P02_119,91.98,50.0,1920x1080
+P02_120,738.42,50.0,1920x1080
+P02_121,393.12,50.0,1920x1080
+P02_122,767.3,50.0,1920x1080
+P02_123,1398.34,50.0,1920x1080
+P02_124,231.84,50.0,1920x1080
+P02_125,656.44,50.0,1920x1080
+P02_126,148.72,50.0,1920x1080
+P02_127,26.34,50.0,1920x1080
+P02_128,135.24,50.0,1920x1080
+P02_129,1113.34,50.0,1920x1080
+P02_130,1083.46,50.0,1920x1080
+P02_131,674.9,50.0,1920x1080
+P02_132,227.08,50.0,1920x1080
+P02_133,80.44,50.0,1920x1080
+P02_134,26.92,50.0,1920x1080
+P02_135,261.18,50.0,1920x1080
+P02_136,391.86,50.0,1920x1080
+P02_137,1166.42,50.0,1920x1080
+P03_02,426.609517,59.9400599400599,1920x1080
+P03_03,70.987583,59.9400599400599,1920x1080
+P03_04,1670.754733,59.9400599400599,1920x1080
+P03_05,224.3241,59.9400599400599,1920x1080
+P03_06,109.12568300000001,59.9400599400599,1920x1080
+P03_07,107.2071,59.9400599400599,1920x1080
+P03_08,29.4294,59.9400599400599,1920x1080
+P03_09,626.042083,59.9400599400599,1920x1080
+P03_10,102.76933299999999,59.9400599400599,1920x1080
+P03_11,52.635917000000006,59.9400599400599,1920x1080
+P03_12,21.57155,59.9400599400599,1920x1080
+P03_13,55.97258299999999,59.9400599400599,1920x1080
+P03_14,260.076483,59.9400599400599,1920x1080
+P03_15,10.477133,59.9400599400599,1920x1080
+P03_16,271.688083,59.9400599400599,1920x1080
+P03_17,148.8487,59.9400599400599,1920x1080
+P03_18,24.2242,59.9400599400599,1920x1080
+P03_19,550.3498,59.9400599400599,1920x1080
+P03_20,360.61025,59.9400599400599,1920x1080
+P03_21,31.898533,59.9400599400599,1920x1080
+P03_22,61.34461700000001,59.9400599400599,1920x1080
+P03_23,509.642467,59.9400599400599,1920x1080
+P03_24,821.787633,59.9400599400599,1920x1080
+P03_25,37.18715,59.9400599400599,1920x1080
+P03_26,11.127783,59.9400599400599,1920x1080
+P03_27,97.14705,59.9400599400599,1920x1080
+P03_28,85.53545,59.9400599400599,1920x1080
+P03_101,852.96,50.0,1920x1080
+P03_102,168.8,50.0,1920x1080
+P03_103,1668.32,50.0,1920x1080
+P03_104,411.16,50.0,1920x1080
+P03_105,205.36,50.0,1920x1080
+P03_106,89.02,50.0,1920x1080
+P03_107,254.48,50.0,1920x1080
+P03_108,42.72,50.0,1920x1080
+P03_109,1134.06,50.0,1920x1080
+P03_110,18.1,50.0,1920x1080
+P03_111,74.32,50.0,1920x1080
+P03_112,507.96,50.0,1920x1080
+P03_113,148.32,50.0,1920x1080
+P03_114,27.64,50.0,1920x1080
+P03_115,22.22,50.0,1920x1080
+P03_116,57.3,50.0,1920x1080
+P03_117,722.86,50.0,1920x1080
+P03_118,126.12,50.0,1920x1080
+P03_119,672.38,50.0,1920x1080
+P03_120,814.68,50.0,1920x1080
+P03_121,388.34,50.0,1920x1080
+P03_122,38.12,50.0,1920x1080
+P03_123,319.14,50.0,1920x1080
+P04_01,1154.7726,59.9400599400599,1920x1080
+P04_02,1437.621833,59.9400599400599,1920x1080
+P04_03,801.817683,59.9400599400599,1920x1080
+P04_04,858.140617,59.9400599400599,1920x1080
+P04_05,2068.700617,59.9400599400599,1920x1080
+P04_06,788.254133,59.9400599400599,1920x1080
+P04_07,122.956167,59.9400599400599,1920x1080
+P04_08,82.6826,59.9400599400599,1920x1080
+P04_09,411.377633,59.9400599400599,1920x1080
+P04_10,1141.7596,59.9400599400599,1920x1080
+P04_11,241.357783,59.9400599400599,1920x1080
+P04_12,160.62713300000001,59.9400599400599,1920x1080
+P04_13,314.26395,59.9400599400599,1920x1080
+P04_14,87.70428299999999,59.9400599400599,1920x1080
+P04_15,24.858167,59.9400599400599,1920x1080
+P04_16,217.03348300000002,59.9400599400599,1920x1080
+P04_17,147.780967,59.9400599400599,1920x1080
+P04_18,124.79133300000001,59.9400599400599,1920x1080
+P04_19,15.5155,59.9400599400599,1920x1080
+P04_20,92.14205,59.9400599400599,1920x1080
+P04_21,197.14695,59.9400599400599,1920x1080
+P04_22,171.3712,59.9400599400599,1920x1080
+P04_23,998.64765,59.9400599400599,1920x1080
+P04_24,502.05155,59.9400599400599,1920x1080
+P04_25,381.51446699999997,59.9400599400599,1920x1080
+P04_26,36.88685,59.9400599400599,1920x1080
+P04_27,104.821383,59.9400599400599,1920x1080
+P04_28,158.491667,59.9400599400599,1920x1080
+P04_29,425.408317,59.9400599400599,1920x1080
+P04_30,312.695717,59.9400599400599,1920x1080
+P04_31,825.4579669999999,59.9400599400599,1920x1080
+P04_32,53.536817000000006,59.9400599400599,1920x1080
+P04_33,184.100583,59.9400599400599,1920x1080
+P04_101,549.48,50.0,1920x1080
+P04_102,155.32,50.0,1920x1080
+P04_103,67.22,50.0,1920x1080
+P04_104,684.7,50.0,1920x1080
+P04_105,1882.4,50.0,1920x1080
+P04_106,253.3,50.0,1920x1080
+P04_107,1483.72,50.0,1920x1080
+P04_108,179.64,50.0,1920x1080
+P04_109,980.54,50.0,1920x1080
+P04_110,722.36,50.0,1920x1080
+P04_111,155.08,50.0,1920x1080
+P04_112,491.22,50.0,1920x1080
+P04_113,1182.46,50.0,1920x1080
+P04_114,160.04,50.0,1920x1080
+P04_115,258.3,50.0,1920x1080
+P04_116,573.64,50.0,1920x1080
+P04_117,335.08,50.0,1920x1080
+P04_118,148.6,50.0,1920x1080
+P04_119,851.02,50.0,1920x1080
+P04_120,834.62,50.0,1920x1080
+P04_121,1693.22,50.0,1920x1080
+P04_122,222.88,50.0,1920x1080
+P04_123,1301.32,50.0,1920x1080
+P05_01,365.7654,59.9400599400599,1920x1080
+P05_02,338.454783,59.9400599400599,1920x1080
+P05_03,1033.165467,59.9400599400599,1920x1080
+P05_04,388.421367,59.9400599400599,1920x1080
+P05_05,155.67218300000002,59.9400599400599,1920x1080
+P05_06,310.943967,59.9400599400599,1920x1080
+P05_07,801.867733,59.9400599400599,1920x1080
+P05_08,1280.596633,59.9400599400599,1920x1080
+P05_09,421.104017,59.9400599400599,1920x1080
+P06_01,90.44035,59.9400599400599,1920x1080
+P06_02,13.947267000000002,59.9400599400599,1920x1080
+P06_03,686.068717,59.9400599400599,1920x1080
+P06_05,1444.278483,59.9400599400599,1920x1080
+P06_07,1061.928183,59.9400599400599,1920x1080
+P06_08,30.663967,59.9400599400599,1920x1080
+P06_09,1344.779083,59.9400599400599,1920x1080
+P06_10,242.976067,59.9400599400599,1920x1080
+P06_11,76.960217,59.9400599400599,1920x1080
+P06_12,193.94375,59.9400599400599,1920x1080
+P06_13,240.373467,59.9400599400599,1920x1080
+P06_14,100.717283,59.9400599400599,1920x1080
+P06_101,1859.1,50.0,1920x1080
+P06_102,733.22,50.0,1920x1080
+P06_103,839.64,50.0,1920x1080
+P06_104,152.42,50.0,1920x1080
+P06_105,107.74,50.0,1920x1080
+P06_106,172.56,50.0,1920x1080
+P06_107,291.28,50.0,1920x1080
+P06_108,728.7,50.0,1920x1080
+P06_109,38.42,50.0,1920x1080
+P06_110,76.32,50.0,1920x1080
+P06_111,851.08,50.0,1920x1080
+P06_112,100.9,50.0,1920x1080
+P06_113,309.34,50.0,1920x1080
+P07_01,109.12568300000001,59.9400599400599,1920x1080
+P07_02,111.895117,59.9400599400599,1920x1080
+P07_03,262.729133,59.9400599400599,1920x1080
+P07_04,825.207717,59.9400599400599,1920x1080
+P07_05,209.55935,59.9400599400599,1920x1080
+P07_06,140.907433,59.9400599400599,1920x1080
+P07_07,331.414417,59.9400599400599,1920x1080
+P07_08,173.039533,59.9400599400599,1920x1080
+P07_09,339.822817,59.9400599400599,1920x1080
+P07_10,2060.3773,59.9400599400599,1920x1080
+P07_11,223.25636699999998,59.9400599400599,1920x1080
+P07_12,236.019117,59.9400599400599,1920x1080
+P07_13,60.6606,59.9400599400599,1920x1080
+P07_14,257.00675,59.9400599400599,1920x1080
+P07_15,113.346567,59.9400599400599,1920x1080
+P07_16,163.0629,59.9400599400599,1920x1080
+P07_17,132.9328,59.9400599400599,1920x1080
+P07_18,40.557183,59.9400599400599,1920x1080
+P07_101,481.1,50.0,1920x1080
+P07_102,205.2,50.0,1920x1080
+P07_103,49.3,50.0,1920x1080
+P07_104,96.98,50.0,1920x1080
+P07_105,46.56,50.0,1920x1080
+P07_106,16.2,50.0,1920x1080
+P07_107,175.96,50.0,1920x1080
+P07_108,306.02,50.0,1920x1080
+P07_109,144.72,50.0,1920x1080
+P07_110,260.26,50.0,1920x1080
+P07_111,130.1,50.0,1920x1080
+P07_112,87.34,50.0,1920x1080
+P07_113,524.42,50.0,1920x1080
+P07_114,184.84,50.0,1920x1080
+P07_115,212.4,50.0,1920x1080
+P07_116,86.74,50.0,1920x1080
+P07_117,373.82,50.0,1920x1080
+P08_01,615.448167,59.9400599400599,1920x1080
+P08_02,107.423983,59.9400599400599,1920x1080
+P08_03,149.966483,59.9400599400599,1920x1080
+P08_04,205.221683,59.9400599400599,1920x1080
+P08_05,1753.7693329999997,59.9400599400599,1920x1080
+P08_06,486.63615,59.9400599400599,1920x1080
+P08_07,24.007317,59.9400599400599,1920x1080
+P08_08,144.327517,59.9400599400599,1920x1080
+P08_09,620.486533,59.9400599400599,1920x1080
+P08_10,242.42551699999999,59.9400599400599,1920x1080
+P08_11,195.44525,59.9400599400599,1920x1080
+P08_12,33.7337,59.9400599400599,1920x1080
+P08_13,24.17415,59.9400599400599,1920x1080
+P08_14,151.91843300000002,59.9400599400599,1920x1080
+P08_15,563.31275,59.9400599400599,1920x1080
+P08_16,589.121867,59.9400599400599,1920x1080
+P08_17,586.102183,59.9400599400599,1920x1080
+P08_18,499.64915,59.9400599400599,1920x1080
+P08_19,137.58745,59.9400599400599,1920x1080
+P08_20,207.47393300000002,59.9400599400599,1920x1080
+P08_21,1406.772683,59.9400599400599,1920x1080
+P08_22,129.262467,59.9400599400599,1920x1080
+P08_23,1530.796583,59.9400599400599,1920x1080
+P08_24,573.806567,59.9400599400599,1920x1080
+P08_25,21.6216,59.9400599400599,1920x1080
+P08_26,409.242167,59.9400599400599,1920x1080
+P08_27,186.13595,59.9400599400599,1920x1080
+P08_28,34.117416999999996,59.9400599400599,1920x1080
+P09_01,14.230882999999999,59.9400599400599,1920x1080
+P09_02,369.685983,59.9400599400599,1920x1080
+P09_03,146.2461,59.9400599400599,1920x1080
+P09_04,102.16873299999999,59.9400599400599,1920x1080
+P09_05,267.684083,59.9400599400599,1920x1080
+P09_06,403.920183,59.9400599400599,1920x1080
+P09_07,55.221833,29.97002997002997,1920x1080
+P09_08,126.459667,29.97002997002997,1920x1080
+P09_101,458.2,50.0,1920x1080
+P09_102,355.98,50.0,1920x1080
+P09_103,743.6,50.0,1920x1080
+P09_104,553.86,50.0,1920x1080
+P09_105,133.8,50.0,1920x1080
+P09_106,149.36,50.0,1920x1080
+P10_01,912.66175,59.9400599400599,1920x1080
+P10_02,1222.707133,59.9400599400599,1920x1080
+P10_03,1842.442917,59.9400599400599,1920x1080
+P10_04,3359.8755,29.97002997002997,1920x1080
+P11_01,181.614767,59.9400599400599,1920x1080
+P11_02,36.08605,59.9400599400599,1920x1080
+P11_03,136.56976699999998,59.9400599400599,1920x1080
+P11_04,288.755133,59.9400599400599,1920x1080
+P11_05,1821.4369329999997,59.9400599400599,1920x1080
+P11_06,38.38835,59.9400599400599,1920x1080
+P11_07,26.5265,59.9400599400599,1920x1080
+P11_08,59.7597,59.9400599400599,1920x1080
+P11_09,347.213533,59.9400599400599,1920x1080
+P11_10,21.354667000000003,59.9400599400599,1920x1080
+P11_11,66.332933,59.9400599400599,1920x1080
+P11_12,50.033317,59.9400599400599,1920x1080
+P11_13,63.129732999999995,59.9400599400599,1920x1080
+P11_14,27.460766999999997,59.9400599400599,1920x1080
+P11_15,490.573417,59.9400599400599,1920x1080
+P11_16,353.870183,59.9400599400599,1920x1080
+P11_17,521.454267,59.9400599400599,1920x1080
+P11_18,37.921217,59.9400599400599,1920x1080
+P11_19,85.318567,59.9400599400599,1920x1080
+P11_20,559.559,59.9400599400599,1920x1080
+P11_21,30.613916999999997,59.9400599400599,1920x1080
+P11_22,235.251683,59.9400599400599,1920x1080
+P11_23,62.829432999999995,59.9400599400599,1920x1080
+P11_24,83.566817,59.9400599400599,1920x1080
+P11_101,184.08,50.0,1920x1080
+P11_102,343.52,50.0,1920x1080
+P11_103,226.86,50.0,1920x1080
+P11_104,861.72,50.0,1920x1080
+P11_105,333.66,50.0,1920x1080
+P11_106,748.2,50.0,1920x1080
+P11_107,125.72,50.0,1920x1080
+P11_108,36.36,50.0,1920x1080
+P11_109,213.78,50.0,1920x1080
+P12_01,411.727983,59.9400599400599,1280x720
+P12_02,1853.95275,59.9400599400599,1280x720
+P12_03,1465.86505,59.9400599400599,1280x720
+P12_04,1912.2776829999998,59.9400599400599,1280x720
+P12_05,60.3603,59.9400599400599,1920x1440
+P12_06,170.053217,59.9400599400599,1920x1440
+P12_07,784.5838,59.9400599400599,1920x1080
+P12_08,222.3221,59.9400599400599,1920x1080
+P12_101,2045.86,50.0,1920x1080
+P12_102,1190.28,50.0,1920x1080
+P12_103,640.92,50.0,1920x1080
+P12_104,1136.8,50.0,1920x1080
+P12_105,319.62,50.0,1920x1080
+P13_01,553.920033,59.9400599400599,1920x1080
+P13_02,69.152417,59.9400599400599,1920x1080
+P13_03,350.23321699999997,59.9400599400599,1920x1080
+P13_04,248.09785,59.9400599400599,1920x1080
+P13_05,397.814083,59.9400599400599,1920x1080
+P13_06,111.394617,59.9400599400599,1920x1080
+P13_07,162.162,59.9400599400599,1920x1080
+P13_08,2465.1133,59.9400599400599,1920x1080
+P13_09,540.957083,59.9400599400599,1920x1080
+P13_10,176.62645,59.9400599400599,1920x1080
+P14_01,104.3042,59.9400599400599,1920x1080
+P14_02,32.28225,59.9400599400599,1920x1080
+P14_03,20.003317000000003,59.9400599400599,1920x1080
+P14_04,140.79065,59.9400599400599,1920x1080
+P14_05,71.15441700000001,59.9400599400599,1920x1080
+P14_06,64.54781700000001,59.9400599400599,1920x1080
+P14_07,90.273517,59.9400599400599,1920x1080
+P14_08,398.030967,59.9400599400599,1920x1080
+P14_09,253.253,59.9400599400599,1920x1080
+P15_01,46.880167,59.9400599400599,1920x1080
+P15_02,695.1945,59.9400599400599,1920x1080
+P15_03,330.263267,59.9400599400599,1920x1080
+P15_04,471.204067,59.9400599400599,1920x1080
+P15_05,105.37193300000001,59.9400599400599,1920x1080
+P15_06,503.503,59.9400599400599,1920x1080
+P15_07,207.140267,59.9400599400599,1920x1080
+P15_08,552.568683,59.9400599400599,1920x1080
+P15_09,386.2859,59.9400599400599,1920x1080
+P15_10,197.4973,59.9400599400599,1920x1080
+P15_11,27.510817,59.9400599400599,1920x1080
+P15_12,61.37798299999999,59.9400599400599,1920x1080
+P15_13,963.01205,59.9400599400599,1920x1080
+P16_01,1243.0925,59.9400599400599,1920x1080
+P16_02,55.70565,59.9400599400599,1920x1080
+P16_03,213.196317,59.9400599400599,1920x1080
+P16_04,929.8289,59.9400599400599,1920x1080
+P17_01,156.239417,47.952047952047955,1920x1080
+P17_02,545.774396,47.952047952047955,1920x1080
+P17_03,977.351375,47.952047952047955,1920x1080
+P17_04,1064.083667,47.952047952047955,1920x1080
+P18_01,166.43293300000002,59.9400599400599,1920x1080
+P18_02,190.3902,29.97002997002997,1920x1080
+P18_03,427.427,59.9400599400599,1920x1080
+P18_04,203.77023300000002,59.9400599400599,1920x1080
+P18_05,594.24365,59.9400599400599,1920x1080
+P18_06,416.332583,59.9400599400599,1920x1080
+P18_07,240.07316699999998,59.9400599400599,1920x1080
+P18_08,66.499767,59.9400599400599,1920x1080
+P18_09,276.811111,90.0,1920x1080
+P18_10,144.79465,59.9400599400599,1920x1080
+P18_11,410.17643300000003,59.9400599400599,1920x1080
+P18_12,207.9077,59.9400599400599,1920x1080
+P19_01,780.663217,59.9400599400599,1920x1080
+P19_02,73.50676700000001,59.9400599400599,1920x1080
+P19_03,136.269467,59.9400599400599,1920x1080
+P19_04,914.1132,59.9400599400599,1920x1080
+P19_05,79.345933,59.9400599400599,1920x1080
+P19_06,233.58335,59.9400599400599,1920x1080
+P20_01,1378.47775,59.9400599400599,1920x1080
+P20_02,428.194433,59.9400599400599,1920x1080
+P20_03,213.06285,59.9400599400599,1920x1080
+P20_04,2251.0995,59.9400599400599,1920x1080
+P20_05,467.150017,59.9400599400599,1920x1080
+P20_06,272.6724,59.9400599400599,1920x1080
+P20_07,101.317883,59.9400599400599,1920x1080
+P21_01,692.94225,59.9400599400599,1920x1080
+P21_02,490.606783,59.9400599400599,1920x1080
+P21_03,585.968717,59.9400599400599,1920x1080
+P21_04,569.252017,59.9400599400599,1920x1080
+P22_01,1091.292517,59.9400599400599,1920x1080
+P22_02,508.741567,59.9400599400599,1920x1080
+P22_03,1187.970767,59.9400599400599,1920x1080
+P22_04,389.072017,59.9400599400599,1920x1080
+P22_05,1236.052133,59.9400599400599,1920x1080
+P22_06,444.610833,59.9400599400599,1920x1080
+P22_07,2180.6124170000003,59.9400599400599,1920x1080
+P22_08,921.153567,59.9400599400599,1920x1080
+P22_09,426.8264,59.9400599400599,1920x1080
+P22_10,961.744117,59.9400599400599,1920x1080
+P22_11,427.009917,59.9400599400599,1920x1080
+P22_12,685.5515330000001,59.9400599400599,1920x1080
+P22_13,500.416583,59.9400599400599,1920x1080
+P22_14,703.469433,59.9400599400599,1920x1080
+P22_15,609.0084,59.9400599400599,1920x1080
+P22_16,1461.6792,59.9400599400599,1920x1080
+P22_17,1303.90325,59.9400599400599,1920x1080
+P22_101,366.88,50.0,1920x1080
+P22_102,230.16,50.0,1920x1080
+P22_103,793.84,50.0,1920x1080
+P22_104,631.34,50.0,1920x1080
+P22_105,68.94,50.0,1920x1080
+P22_106,511.74,50.0,1920x1080
+P22_107,581.02,50.0,1920x1080
+P22_108,217.18,50.0,1920x1080
+P22_109,2008.8,50.0,1920x1080
+P22_110,405.34,50.0,1920x1080
+P22_111,1548.02,50.0,1920x1080
+P22_112,394.22,50.0,1920x1080
+P22_113,682.32,50.0,1920x1080
+P22_114,1774.68,50.0,1920x1080
+P22_115,494.12,50.0,1920x1080
+P22_116,496.14,50.0,1920x1080
+P22_117,971.82,50.0,1920x1080
+P23_01,91.84175,59.9400599400599,1920x1080
+P23_02,1668.233883,59.9400599400599,1920x1080
+P23_03,363.930233,59.9400599400599,1920x1080
+P23_04,2247.4291670000002,59.9400599400599,1920x1080
+P23_05,1168.901717,59.9400599400599,1920x1080
+P23_101,1746.1,50.0,1920x1080
+P23_102,3569.52,50.0,1920x1080
+P23_103,2099.4,50.0,1920x1080
+P24_01,725.241183,59.9400599400599,1920x1080
+P24_02,812.06125,59.9400599400599,1920x1080
+P24_03,489.53905,59.9400599400599,1920x1080
+P24_04,493.809983,59.9400599400599,1920x1080
+P24_05,1600.901617,59.9400599400599,1920x1080
+P24_06,566.299067,59.9400599400599,1920x1080
+P24_07,911.477233,59.9400599400599,1920x1080
+P24_08,1512.88035,59.9400599400599,1920x1080
+P24_09,1968.6006170000003,59.9400599400599,1920x1080
+P25_01,115.115,59.9400599400599,1920x1080
+P25_02,253.620033,59.9400599400599,1920x1080
+P25_03,181.6815,59.9400599400599,1920x1080
+P25_04,594.226967,59.9400599400599,1920x1080
+P25_05,1491.744233,59.9400599400599,1920x1080
+P25_06,207.290417,59.9400599400599,1920x1080
+P25_07,275.258317,59.9400599400599,1920x1080
+P25_08,160.343517,59.9400599400599,1920x1080
+P25_09,876.292083,59.9400599400599,1920x1080
+P25_10,374.62425,59.9400599400599,1920x1080
+P25_11,378.378,59.9400599400599,1920x1080
+P25_12,96.04595,59.9400599400599,1920x1080
+P25_101,435.86,50.0,1920x1080
+P25_102,497.78,50.0,1920x1080
+P25_103,495.44,50.0,1920x1080
+P25_104,810.12,50.0,1920x1080
+P25_105,1547.62,50.0,1920x1080
+P25_106,1619.82,50.0,1920x1080
+P25_107,2212.96,50.0,1920x1080
+P26_01,79.712967,59.9400599400599,1920x1080
+P26_02,464.697567,59.9400599400599,1920x1080
+P26_03,312.495517,59.9400599400599,1920x1080
+P26_04,145.461983,59.9400599400599,1920x1080
+P26_05,45.4454,59.9400599400599,1920x1080
+P26_06,27.27725,59.9400599400599,1920x1080
+P26_07,24.37435,59.9400599400599,1920x1080
+P26_08,51.684967,59.9400599400599,1920x1080
+P26_09,122.155367,59.9400599400599,1920x1080
+P26_10,134.067267,59.9400599400599,1920x1080
+P26_11,98.14805,59.9400599400599,1920x1080
+P26_12,18.651967000000003,59.9400599400599,1920x1080
+P26_13,123.2231,59.9400599400599,1920x1080
+P26_14,32.4324,59.9400599400599,1920x1080
+P26_15,35.769067,59.9400599400599,1920x1080
+P26_16,65.081683,59.9400599400599,1920x1080
+P26_17,66.39966700000001,59.9400599400599,1920x1080
+P26_18,448.131017,59.9400599400599,1920x1080
+P26_19,471.988183,59.9400599400599,1920x1080
+P26_20,37.504133,59.9400599400599,1920x1080
+P26_21,465.465,59.9400599400599,1920x1080
+P26_22,140.206733,59.9400599400599,1920x1080
+P26_23,85.552133,59.9400599400599,1920x1080
+P26_24,58.425033,59.9400599400599,1920x1080
+P26_25,39.3393,59.9400599400599,1920x1080
+P26_26,70.3703,59.9400599400599,1920x1080
+P26_27,27.994633,59.9400599400599,1920x1080
+P26_28,131.98185,59.9400599400599,1920x1080
+P26_29,55.472083,59.9400599400599,1920x1080
+P26_30,15.281932999999999,59.9400599400599,1920x1080
+P26_31,90.03995,59.9400599400599,1920x1080
+P26_32,81.765017,59.9400599400599,1920x1080
+P26_33,38.104733,59.9400599400599,1920x1080
+P26_34,107.05695,59.9400599400599,1920x1080
+P26_35,164.39756699999998,59.9400599400599,1920x1080
+P26_36,209.893017,59.9400599400599,1920x1080
+P26_37,63.029633,59.9400599400599,1920x1080
+P26_38,58.124733,59.9400599400599,1920x1080
+P26_39,56.7567,59.9400599400599,1920x1080
+P26_40,69.68628299999999,59.9400599400599,1920x1080
+P26_41,116.749967,59.9400599400599,1920x1080
+P26_101,100.22,50.0,1920x1080
+P26_102,181.96,50.0,1920x1080
+P26_103,599.46,50.0,1920x1080
+P26_104,690.02,50.0,1920x1080
+P26_105,490.16,50.0,1920x1080
+P26_106,88.48,50.0,1920x1080
+P26_107,163.6,50.0,1920x1080
+P26_108,195.72,50.0,1920x1080
+P26_109,25.82,50.0,1920x1080
+P26_110,264.74,50.0,1920x1080
+P26_111,172.22,50.0,1920x1080
+P26_112,397.5,50.0,1920x1080
+P26_113,68.88,50.0,1920x1080
+P26_114,57.54,50.0,1920x1080
+P26_115,206.42,50.0,1920x1080
+P26_116,200.26,50.0,1920x1080
+P26_117,712.46,50.0,1920x1080
+P26_118,414.16,50.0,1920x1080
+P26_119,694.68,50.0,1920x1080
+P26_120,197.8,50.0,1920x1080
+P26_121,113.8,50.0,1920x1080
+P26_122,305.68,50.0,1920x1080
+P26_123,469.8,50.0,1920x1080
+P26_124,774.24,50.0,1920x1080
+P27_01,282.148533,59.9400599400599,1920x1080
+P27_02,181.364517,59.9400599400599,1920x1080
+P27_03,97.9979,59.9400599400599,1920x1080
+P27_04,331.214217,59.9400599400599,1920x1080
+P27_05,615.4148,59.9400599400599,1920x1080
+P27_06,899.365133,59.9400599400599,1920x1080
+P27_07,954.019733,59.9400599400599,1920x1080
+P27_101,1360.2,50.0,1920x1080
+P27_102,522.86,50.0,1920x1080
+P27_103,2448.56,50.0,1920x1080
+P27_104,1053.3,50.0,1920x1080
+P27_105,977.76,50.0,1920x1080
+P28_01,339.022017,59.9400599400599,1920x1080
+P28_02,506.35585,59.9400599400599,1920x1080
+P28_03,782.498383,59.9400599400599,1920x1080
+P28_04,453.10265,59.9400599400599,1920x1080
+P28_05,523.756567,59.9400599400599,1920x1080
+P28_06,744.009933,59.9400599400599,1920x1080
+P28_07,130.797333,59.9400599400599,1920x1080
+P28_08,336.88655,59.9400599400599,1920x1080
+P28_09,499.06523300000003,59.9400599400599,1920x1080
+P28_10,60.9609,59.9400599400599,1920x1080
+P28_11,328.261267,59.9400599400599,1920x1080
+P28_12,27.043683,59.9400599400599,1920x1080
+P28_13,149.88306699999998,59.9400599400599,1920x1080
+P28_14,278.895283,59.9400599400599,1920x1080
+P28_15,92.959533,59.9400599400599,1920x1080
+P28_16,313.379733,59.9400599400599,1920x1080
+P28_17,62.445717,59.9400599400599,1920x1080
+P28_18,120.27015,59.9400599400599,1920x1080
+P28_19,89.923167,59.9400599400599,1920x1080
+P28_20,122.18873300000001,59.9400599400599,1920x1080
+P28_21,61.2612,59.9400599400599,1920x1080
+P28_22,146.79665,59.9400599400599,1920x1080
+P28_23,25.158467,59.9400599400599,1920x1080
+P28_24,68.251517,59.9400599400599,1920x1080
+P28_25,396.879817,59.9400599400599,1920x1080
+P28_26,101.56813299999999,59.9400599400599,1920x1080
+P28_101,717.7,50.0,1920x1080
+P28_102,416.58,50.0,1920x1080
+P28_103,1825.16,50.0,1920x1080
+P28_104,719.34,50.0,1920x1080
+P28_105,571.74,50.0,1920x1080
+P28_106,197.88,50.0,1920x1080
+P28_107,48.86,50.0,1920x1080
+P28_108,413.3,50.0,1920x1080
+P28_109,216.04,50.0,1920x1080
+P28_110,135.66,50.0,1920x1080
+P28_111,764.1,50.0,1920x1080
+P28_112,357.56,50.0,1920x1080
+P28_113,537.82,50.0,1920x1080
+P28_114,535.12,50.0,1920x1080
+P28_115,858.0,50.0,1920x1080
+P28_116,576.66,50.0,1920x1080
+P28_117,533.96,50.0,1920x1080
+P28_118,329.16,50.0,1920x1080
+P29_01,1350.474117,59.9400599400599,1920x1080
+P29_02,193.560033,59.9400599400599,1920x1080
+P29_03,2074.672583,59.9400599400599,1920x1080
+P29_04,179.612767,59.9400599400599,1920x1080
+P29_05,1821.7365670000002,59.9400599400599,1920x1080
+P29_06,169.0689,59.9400599400599,1920x1080
+P30_01,74.8748,59.9400599400599,1920x1080
+P30_02,237.72081699999998,59.9400599400599,1920x1080
+P30_03,521.204017,59.9400599400599,1920x1080
+P30_04,710.0426669999999,59.9400599400599,1920x1080
+P30_05,3261.992717,59.9400599400599,1920x1080
+P30_06,401.35095,59.9400599400599,1920x1080
+P30_07,305.438467,59.9400599400599,1920x1080
+P30_08,1122.14,59.9400599400599,1920x1080
+P30_09,433.7333,59.9400599400599,1920x1080
+P30_10,792.558433,59.9400599400599,1920x1080
+P30_11,344.610933,59.9400599400599,1920x1080
+P30_101,628.64,50.0,1920x1080
+P30_102,1275.72,50.0,1920x1080
+P30_103,184.36,50.0,1920x1080
+P30_104,317.54,50.0,1920x1080
+P30_105,105.52,50.0,1920x1080
+P30_106,249.64,50.0,1920x1080
+P30_107,2994.16,50.0,1920x1080
+P30_108,575.3,50.0,1920x1080
+P30_109,418.16,50.0,1920x1080
+P30_110,260.1,50.0,1920x1080
+P30_111,1840.26,50.0,1920x1080
+P30_112,80.9,50.0,1920x1080
+P30_113,366.64,50.0,1920x1080
+P30_114,122.32,50.0,1920x1080
+P31_01,475.35821699999997,59.9400599400599,1920x1080
+P31_02,208.6084,59.9400599400599,1920x1080
+P31_03,274.390783,59.9400599400599,1920x1080
+P31_04,96.563133,59.9400599400599,1920x1080
+P31_05,483.3829,59.9400599400599,1920x1080
+P31_06,187.43725,59.9400599400599,1920x1080
+P31_07,252.30205,59.9400599400599,1920x1080
+P31_08,837.9371,59.9400599400599,1920x1080
+P31_09,254.90465,59.9400599400599,1920x1080
+P31_10,540.08955,59.9400599400599,1920x1080
+P31_11,254.938017,59.9400599400599,1920x1080
+P31_12,205.788917,59.9400599400599,1920x1080
+P31_13,658.274283,59.9400599400599,1920x1080
+P31_14,313.529883,59.9400599400599,1920x1080
+P32_01,494.861033,59.9400599400599,1920x1080
+P32_02,222.47225,59.9400599400599,1920x1080
+P32_03,242.09185,59.9400599400599,1920x1080
+P32_04,364.931233,59.9400599400599,1920x1080
+P32_05,426.292533,59.9400599400599,1920x1080
+P32_06,589.7892,59.9400599400599,1920x1080
+P32_07,28.97895,59.9400599400599,1920x1080
+P32_08,199.18231699999998,59.9400599400599,1920x1080
+P32_09,281.53125,59.9400599400599,1920x1080
+P32_10,406.072333,59.9400599400599,1920x1080
+P33_101,854.56,50.0,1920x1080
+P33_102,559.4,50.0,1920x1080
+P33_103,333.92,50.0,1920x1080
+P33_104,747.44,50.0,1920x1080
+P33_105,2209.58,50.0,1920x1080
+P33_106,411.72,50.0,1920x1080
+P33_107,652.88,50.0,1920x1080
+P33_108,235.3,50.0,1920x1080
+P33_109,1323.62,50.0,1920x1080
+P33_110,594.98,50.0,1920x1080
+P33_111,432.52,50.0,1920x1080
+P34_101,120.42,50.0,1920x1080
+P34_102,512.38,50.0,1920x1080
+P34_103,221.32,50.0,1920x1080
+P34_104,912.24,50.0,1920x1080
+P34_105,95.44,50.0,1920x1080
+P34_106,148.9,50.0,1920x1080
+P34_107,612.26,50.0,1920x1080
+P34_108,53.22,50.0,1920x1080
+P34_109,290.1,50.0,1920x1080
+P34_110,134.68,50.0,1920x1080
+P34_111,541.3,50.0,1920x1080
+P34_112,976.76,50.0,1920x1080
+P34_113,747.04,50.0,1920x1080
+P35_101,388.26,50.0,1920x1080
+P35_102,1773.98,50.0,1920x1080
+P35_103,1512.48,50.0,1920x1080
+P35_104,3350.44,50.0,1920x1080
+P35_105,2148.26,50.0,1920x1080
+P35_106,677.66,50.0,1920x1080
+P35_107,1640.44,50.0,1920x1080
+P35_108,3015.08,50.0,1920x1080
+P35_109,1129.48,50.0,1920x1080
+P36_101,702.46,50.0,1920x1080
+P36_102,793.84,50.0,1920x1080
+P37_101,1681.46,50.0,1920x1080
+P37_102,682.62,50.0,1920x1080
+P37_103,395.12,50.0,1920x1080
diff --git a/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014040_145528/traj_data.json b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014040_145528/traj_data.json
new file mode 100644
index 0000000..ea94a01
--- /dev/null
+++ b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014040_145528/traj_data.json
@@ -0,0 +1,3464 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000045.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000046.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000047.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000048.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000049.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000050.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000051.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000052.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000053.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000054.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000055.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000056.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000057.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000058.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000059.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000060.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000061.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000062.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000063.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000064.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000065.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000066.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000067.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000068.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000069.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000070.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000071.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000072.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000073.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000074.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000075.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000076.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000077.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000078.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000079.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000080.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000081.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000082.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000083.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000116.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000117.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000118.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000119.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000120.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000121.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000122.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000123.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000124.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000125.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000126.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000127.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000128.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000129.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000130.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000131.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000132.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000133.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000134.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000135.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000136.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000137.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000138.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000139.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000140.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000141.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000142.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000143.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000144.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000145.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000146.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000147.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000148.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000149.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000150.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000151.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000152.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000153.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000154.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000155.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000156.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000157.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000158.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000159.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000160.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000161.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000162.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000163.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000164.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000165.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000166.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000167.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000168.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000169.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000170.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000171.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000172.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000173.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000174.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000175.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000176.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000177.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000178.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000179.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000180.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000181.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000182.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000183.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000184.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000185.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000186.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000187.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000188.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000189.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000190.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000191.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000192.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000193.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000194.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000195.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000196.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000197.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000198.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000199.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000200.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000201.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000202.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000203.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000204.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000205.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000206.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000207.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000208.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000209.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000210.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000211.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000212.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000213.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000214.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000215.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000216.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000217.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000218.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000219.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000220.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000221.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000222.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000223.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000224.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000225.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000226.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000227.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000228.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000229.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000230.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000231.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000232.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000233.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000234.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000235.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000236.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000237.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000238.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000239.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000240.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000241.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000242.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000243.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000244.png",
+ "low_idx": 42
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "WineBottle",
+ "parent_target": "Cabinet",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["diningtable"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|2|9|1|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [4.80388, 4.80388, 9.47674944, 9.47674944, 3.5489148, 3.5489148]
+ ],
+ "coordinateReceptacleObjectId": [
+ "DiningTable",
+ [4.756, 4.756, 9.908, 9.908, 3.6872, 3.6872]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|+01.20|+00.89|+02.37"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|0|5|1|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [4.80388, 4.80388, 9.47674944, 9.47674944, 3.5489148, 3.5489148]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ 3.955002548, 3.955002548, 2.326399804, 2.326399804, 1.610000132,
+ 1.610000132
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|+01.20|+00.89|+02.37",
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["diningtable"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|9|3|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [-5.90332936, -5.90332936, 9.093712, 9.093712, 2.9993148, 2.9993148]
+ ],
+ "coordinateReceptacleObjectId": [
+ "DiningTable",
+ [-4.8448, -4.8448, 9.836, 9.836, 3.1376, 3.1376]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.48|+00.75|+02.27"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|0|5|1|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [-5.90332936, -5.90332936, 9.093712, 9.093712, 2.9993148, 2.9993148]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ 3.955002548, 3.955002548, 2.326399804, 2.326399804, 1.610000132,
+ 1.610000132
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.48|+00.75|+02.27",
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|+01.20|+00.89|+02.37"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [100, 69, 129, 157],
+ "mask": [
+ [20507, 5],
+ [20805, 9],
+ [21104, 10],
+ [21404, 10],
+ [21704, 10],
+ [22005, 10],
+ [22305, 10],
+ [22605, 10],
+ [22905, 10],
+ [23205, 10],
+ [23505, 10],
+ [23805, 10],
+ [24105, 10],
+ [24405, 11],
+ [24706, 10],
+ [25006, 10],
+ [25306, 10],
+ [25606, 10],
+ [25906, 10],
+ [26206, 10],
+ [26506, 10],
+ [26806, 11],
+ [27106, 11],
+ [27407, 10],
+ [27707, 11],
+ [28006, 12],
+ [28306, 13],
+ [28605, 15],
+ [28904, 17],
+ [29204, 18],
+ [29503, 20],
+ [29803, 21],
+ [30102, 23],
+ [30402, 23],
+ [30701, 25],
+ [31001, 25],
+ [31300, 27],
+ [31600, 27],
+ [31900, 27],
+ [32200, 27],
+ [32500, 27],
+ [32800, 27],
+ [33100, 27],
+ [33400, 28],
+ [33700, 28],
+ [34001, 27],
+ [34301, 27],
+ [34601, 27],
+ [34901, 27],
+ [35201, 27],
+ [35501, 27],
+ [35802, 26],
+ [36102, 26],
+ [36402, 26],
+ [36702, 26],
+ [37002, 26],
+ [37302, 27],
+ [37603, 26],
+ [37903, 26],
+ [38203, 26],
+ [38503, 26],
+ [38803, 26],
+ [39103, 26],
+ [39404, 25],
+ [39704, 25],
+ [40004, 25],
+ [40304, 25],
+ [40604, 25],
+ [40904, 25],
+ [41205, 25],
+ [41505, 25],
+ [41805, 25],
+ [42105, 25],
+ [42405, 25],
+ [42706, 24],
+ [43006, 24],
+ [43306, 24],
+ [43606, 24],
+ [43906, 24],
+ [44206, 24],
+ [44507, 23],
+ [44807, 23],
+ [45107, 23],
+ [45407, 22],
+ [45708, 21],
+ [46008, 20],
+ [46309, 18],
+ [46611, 14],
+ [46913, 10]
+ ],
+ "point": [114, 112]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [205, 135, 281, 203],
+ "mask": [
+ [40422, 59],
+ [40721, 60],
+ [41021, 61],
+ [41321, 60],
+ [41621, 60],
+ [41920, 60],
+ [42220, 60],
+ [42520, 59],
+ [42820, 59],
+ [43119, 59],
+ [43419, 59],
+ [43719, 58],
+ [44019, 58],
+ [44318, 59],
+ [44618, 58],
+ [44918, 58],
+ [45218, 57],
+ [45517, 58],
+ [45817, 57],
+ [46117, 57],
+ [46417, 56],
+ [46716, 57],
+ [47016, 56],
+ [47316, 56],
+ [47615, 56],
+ [47915, 56],
+ [48215, 55],
+ [48515, 55],
+ [48814, 55],
+ [49114, 55],
+ [49414, 54],
+ [49714, 54],
+ [50013, 54],
+ [50313, 54],
+ [50613, 53],
+ [50913, 53],
+ [51212, 53],
+ [51512, 53],
+ [51812, 52],
+ [52112, 52],
+ [52411, 52],
+ [52711, 52],
+ [53011, 52],
+ [53311, 51],
+ [53610, 52],
+ [53910, 51],
+ [54210, 51],
+ [54509, 51],
+ [54809, 51],
+ [55109, 50],
+ [55409, 50],
+ [55708, 50],
+ [56008, 50],
+ [56308, 49],
+ [56608, 49],
+ [56907, 49],
+ [57207, 49],
+ [57507, 48],
+ [57807, 48],
+ [58106, 48],
+ [58406, 48],
+ [58706, 47],
+ [59006, 47],
+ [59305, 47],
+ [59605, 47],
+ [59905, 46],
+ [60205, 46],
+ [60505, 45],
+ [60805, 45]
+ ],
+ "point": [243, 168]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|+01.20|+00.89|+02.37",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 77],
+ [47017, 77],
+ [47317, 78],
+ [47616, 79],
+ [47916, 80],
+ [48216, 81],
+ [48515, 82],
+ [48815, 83],
+ [49115, 83],
+ [49415, 84],
+ [49714, 85],
+ [50014, 86],
+ [50314, 86],
+ [50614, 86],
+ [50913, 87],
+ [51213, 87],
+ [51513, 87],
+ [51813, 87],
+ [52112, 88],
+ [52412, 88],
+ [52712, 88],
+ [53012, 88],
+ [53311, 89],
+ [53611, 89],
+ [53911, 89],
+ [54210, 90],
+ [54510, 90],
+ [54810, 90],
+ [55110, 90],
+ [55409, 91],
+ [55709, 91],
+ [56009, 91],
+ [56309, 91],
+ [56608, 92],
+ [56908, 92],
+ [57208, 92],
+ [57508, 92],
+ [57807, 93],
+ [58107, 93],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 3],
+ [46725, 69],
+ [47017, 3],
+ [47025, 69],
+ [47317, 3],
+ [47325, 70],
+ [47616, 4],
+ [47625, 70],
+ [47916, 3],
+ [47924, 72],
+ [48216, 3],
+ [48224, 73],
+ [48515, 4],
+ [48524, 73],
+ [48815, 3],
+ [48824, 74],
+ [49115, 3],
+ [49123, 75],
+ [49415, 1],
+ [49423, 76],
+ [49724, 75],
+ [50024, 76],
+ [50325, 75],
+ [50625, 75],
+ [50926, 74],
+ [51226, 74],
+ [51526, 74],
+ [51826, 74],
+ [52125, 75],
+ [52425, 75],
+ [52725, 75],
+ [53024, 76],
+ [53324, 76],
+ [53624, 76],
+ [53923, 77],
+ [54223, 77],
+ [54523, 77],
+ [54822, 78],
+ [55122, 78],
+ [55422, 78],
+ [55722, 78],
+ [56021, 79],
+ [56321, 79],
+ [56621, 79],
+ [56920, 80],
+ [57220, 80],
+ [57508, 1],
+ [57519, 81],
+ [57807, 4],
+ [57818, 82],
+ [58107, 6],
+ [58116, 84],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.48|+00.75|+02.27"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [145, 68, 164, 135],
+ "mask": [
+ [20253, 6],
+ [20552, 7],
+ [20852, 7],
+ [21152, 7],
+ [21452, 7],
+ [21752, 7],
+ [22052, 7],
+ [22352, 7],
+ [22652, 7],
+ [22952, 7],
+ [23252, 7],
+ [23552, 7],
+ [23852, 7],
+ [24152, 7],
+ [24452, 7],
+ [24752, 7],
+ [25052, 7],
+ [25352, 7],
+ [25651, 9],
+ [25950, 11],
+ [26250, 11],
+ [26549, 13],
+ [26848, 15],
+ [27147, 16],
+ [27447, 17],
+ [27746, 19],
+ [28046, 19],
+ [28346, 19],
+ [28645, 20],
+ [28945, 20],
+ [29245, 20],
+ [29545, 20],
+ [29845, 20],
+ [30145, 20],
+ [30445, 20],
+ [30745, 20],
+ [31045, 20],
+ [31345, 20],
+ [31645, 20],
+ [31945, 20],
+ [32245, 20],
+ [32545, 20],
+ [32845, 20],
+ [33145, 20],
+ [33445, 20],
+ [33745, 20],
+ [34045, 20],
+ [34345, 20],
+ [34645, 20],
+ [34946, 19],
+ [35246, 18],
+ [35546, 18],
+ [35846, 18],
+ [36146, 18],
+ [36446, 18],
+ [36746, 18],
+ [37046, 18],
+ [37346, 18],
+ [37646, 18],
+ [37946, 18],
+ [38246, 18],
+ [38546, 18],
+ [38846, 18],
+ [39146, 18],
+ [39447, 16],
+ [39747, 15],
+ [40048, 13],
+ [40350, 10]
+ ],
+ "point": [154, 100]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [205, 135, 281, 203],
+ "mask": [
+ [40422, 59],
+ [40721, 60],
+ [41021, 61],
+ [41321, 60],
+ [41621, 60],
+ [41920, 60],
+ [42220, 60],
+ [42520, 59],
+ [42820, 59],
+ [43119, 59],
+ [43419, 59],
+ [43719, 58],
+ [44019, 58],
+ [44318, 59],
+ [44618, 58],
+ [44918, 58],
+ [45218, 57],
+ [45517, 58],
+ [45817, 57],
+ [46117, 57],
+ [46417, 56],
+ [46716, 57],
+ [47016, 56],
+ [47316, 56],
+ [47615, 56],
+ [47915, 56],
+ [48215, 55],
+ [48515, 55],
+ [48814, 55],
+ [49114, 55],
+ [49414, 54],
+ [49714, 54],
+ [50013, 54],
+ [50313, 54],
+ [50613, 53],
+ [50913, 53],
+ [51212, 53],
+ [51512, 53],
+ [51812, 52],
+ [52112, 52],
+ [52411, 52],
+ [52711, 52],
+ [53011, 52],
+ [53311, 51],
+ [53610, 52],
+ [53910, 51],
+ [54210, 51],
+ [54509, 51],
+ [54809, 51],
+ [55109, 50],
+ [55409, 50],
+ [55708, 50],
+ [56008, 50],
+ [56308, 49],
+ [56608, 49],
+ [56907, 49],
+ [57207, 49],
+ [57507, 48],
+ [57807, 48],
+ [58106, 48],
+ [58406, 48],
+ [58706, 47],
+ [59006, 47],
+ [59305, 47],
+ [59605, 47],
+ [59905, 46],
+ [60205, 46],
+ [60505, 45],
+ [60805, 45]
+ ],
+ "point": [243, 168]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.48|+00.75|+02.27",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 3],
+ [46725, 69],
+ [47017, 3],
+ [47025, 69],
+ [47317, 3],
+ [47325, 70],
+ [47616, 4],
+ [47625, 70],
+ [47916, 3],
+ [47924, 72],
+ [48216, 3],
+ [48224, 73],
+ [48515, 4],
+ [48524, 73],
+ [48815, 3],
+ [48824, 74],
+ [49115, 3],
+ [49123, 75],
+ [49415, 1],
+ [49423, 76],
+ [49724, 75],
+ [50024, 76],
+ [50325, 75],
+ [50625, 75],
+ [50926, 74],
+ [51226, 74],
+ [51526, 74],
+ [51826, 74],
+ [52125, 75],
+ [52425, 75],
+ [52725, 75],
+ [53024, 76],
+ [53324, 76],
+ [53624, 76],
+ [53923, 77],
+ [54223, 77],
+ [54523, 77],
+ [54822, 78],
+ [55122, 78],
+ [55422, 78],
+ [55722, 78],
+ [56021, 79],
+ [56321, 79],
+ [56621, 79],
+ [56920, 80],
+ [57220, 80],
+ [57508, 1],
+ [57519, 81],
+ [57807, 4],
+ [57818, 82],
+ [58107, 6],
+ [58116, 84],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 3],
+ [46725, 14],
+ [46743, 51],
+ [47017, 3],
+ [47025, 14],
+ [47044, 50],
+ [47317, 3],
+ [47325, 13],
+ [47344, 51],
+ [47616, 4],
+ [47625, 13],
+ [47643, 52],
+ [47916, 3],
+ [47924, 14],
+ [47943, 53],
+ [48216, 3],
+ [48224, 13],
+ [48243, 54],
+ [48515, 4],
+ [48524, 13],
+ [48542, 55],
+ [48815, 3],
+ [48824, 12],
+ [48842, 56],
+ [49115, 3],
+ [49123, 13],
+ [49142, 56],
+ [49415, 1],
+ [49423, 10],
+ [49441, 58],
+ [49724, 7],
+ [49742, 57],
+ [50024, 7],
+ [50042, 58],
+ [50325, 5],
+ [50343, 57],
+ [50625, 4],
+ [50643, 57],
+ [50926, 3],
+ [50943, 57],
+ [51226, 3],
+ [51244, 56],
+ [51526, 2],
+ [51544, 56],
+ [51826, 2],
+ [51843, 57],
+ [52125, 3],
+ [52143, 57],
+ [52425, 2],
+ [52443, 57],
+ [52725, 2],
+ [52742, 58],
+ [53024, 3],
+ [53042, 58],
+ [53324, 2],
+ [53342, 58],
+ [53624, 2],
+ [53641, 59],
+ [53923, 3],
+ [53941, 59],
+ [54223, 2],
+ [54240, 60],
+ [54523, 2],
+ [54540, 60],
+ [54822, 3],
+ [54840, 60],
+ [55122, 2],
+ [55139, 61],
+ [55422, 2],
+ [55439, 61],
+ [55722, 2],
+ [55738, 62],
+ [56021, 3],
+ [56038, 62],
+ [56321, 3],
+ [56338, 62],
+ [56621, 3],
+ [56637, 63],
+ [56920, 4],
+ [56937, 63],
+ [57220, 5],
+ [57236, 64],
+ [57508, 1],
+ [57519, 7],
+ [57536, 64],
+ [57807, 4],
+ [57818, 9],
+ [57835, 65],
+ [58107, 6],
+ [58116, 14],
+ [58133, 67],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan17",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 90,
+ "x": -0.25,
+ "y": 0.908999562,
+ "z": 3.0
+ },
+ "object_poses": [
+ {
+ "objectName": "SprayBottle_4f8d0eee",
+ "position": {
+ "x": -1.325682,
+ "y": 2.15289426,
+ "z": 0.7069856
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_edec52fd",
+ "position": {
+ "x": -1.19785714,
+ "y": 0.794557154,
+ "z": 2.64457226
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_432df619",
+ "position": {
+ "x": 1.36722,
+ "y": 0.8863421,
+ "z": 2.477
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_432df619",
+ "position": {
+ "x": -0.6586952,
+ "y": 0.9121421,
+ "z": -0.5894883
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_6018293c",
+ "position": {
+ "x": -1.19785714,
+ "y": 0.7496167,
+ "z": 2.459
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_6018293c",
+ "position": {
+ "x": -1.22053027,
+ "y": 0.117774487,
+ "z": 0.248357356
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 179.999664,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_6b7178a8",
+ "position": {
+ "x": -1.47583234,
+ "y": 0.7498287,
+ "z": 2.273428
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_c40d8d1f",
+ "position": {
+ "x": 1.128434,
+ "y": 0.91254133,
+ "z": 0.1391859
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_1d6d1e51",
+ "position": {
+ "x": -1.12754714,
+ "y": 0.7777477,
+ "z": -0.205843091
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.9996643,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_9f8771c2",
+ "position": {
+ "x": -1.10519874,
+ "y": 0.7501748,
+ "z": 2.08785558
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_2f163330",
+ "position": {
+ "x": 1.450345,
+ "y": 0.9012999,
+ "z": 2.58481264
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_2f163330",
+ "position": {
+ "x": 1.117845,
+ "y": 0.9012999,
+ "z": 2.477
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_92502562",
+ "position": {
+ "x": 0.5029,
+ "y": 0.9393,
+ "z": -0.7406
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_572193ee",
+ "position": {
+ "x": -0.0824483,
+ "y": 0.7578041,
+ "z": -0.5731131
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_572193ee",
+ "position": {
+ "x": -1.16247058,
+ "y": 0.3408087,
+ "z": 1.30206287
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_268c1c72",
+ "position": {
+ "x": 1.20740271,
+ "y": 0.9334927,
+ "z": -0.144580841
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_57296338",
+ "position": {
+ "x": -1.37803411,
+ "y": 0.800886452,
+ "z": 0.6739373
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_57296338",
+ "position": {
+ "x": 0.951595068,
+ "y": 0.936028838,
+ "z": 2.477
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e0c21b7c",
+ "position": {
+ "x": -0.91988194,
+ "y": 0.7502286,
+ "z": 2.64457226
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_74101882",
+ "position": {
+ "x": -1.32097435,
+ "y": 1.48467243,
+ "z": 0.7786249
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_6438ff8b",
+ "position": {
+ "x": -0.91988194,
+ "y": 0.8205948,
+ "z": 2.08785558
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_b6eaf348",
+ "position": {
+ "x": 1.52327764,
+ "y": 0.9078062,
+ "z": 0.7067195
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_c297f602",
+ "position": {
+ "x": 1.13115919,
+ "y": 0.112057805,
+ "z": 0.0302069336
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_7daf87a0",
+ "position": {
+ "x": 1.41420341,
+ "y": 0.146455675,
+ "z": 1.409267
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_74101882",
+ "position": {
+ "x": -1.20685542,
+ "y": 0.8145725,
+ "z": 1.09268773
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_6018293c",
+ "position": {
+ "x": 1.450345,
+ "y": 0.8870167,
+ "z": 2.261375
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_9f8771c2",
+ "position": {
+ "x": 1.128434,
+ "y": 0.9120486,
+ "z": 0.7067195
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_c40d8d1f",
+ "position": {
+ "x": -1.357,
+ "y": 0.7396263,
+ "z": 3.024
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 240.000229,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_57296338",
+ "position": {
+ "x": -1.19416881,
+ "y": 0.3912896,
+ "z": 1.09268773
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_c933fa0b",
+ "position": {
+ "x": 1.128434,
+ "y": 0.9123855,
+ "z": 0.4229527
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CellPhone_e3d6b27e",
+ "position": {
+ "x": -1.383174,
+ "y": 0.747337937,
+ "z": 2.08785558
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_6438ff8b",
+ "position": {
+ "x": -1.383174,
+ "y": 0.8198685,
+ "z": 2.64457226
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_92502562",
+ "position": {
+ "x": 0.802,
+ "y": 0.9393,
+ "z": -0.7406
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.9998245,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e0c21b7c",
+ "position": {
+ "x": -1.32594109,
+ "y": 1.6570524,
+ "z": -0.5197747
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_6b7178a8",
+ "position": {
+ "x": 1.20097,
+ "y": 0.8872287,
+ "z": 2.36918736
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_2f163330",
+ "position": {
+ "x": -1.29051554,
+ "y": 0.764626145,
+ "z": 2.83014464
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_7e041f70",
+ "position": {
+ "x": -1.32097566,
+ "y": 1.41969812,
+ "z": 1.19737482
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_7daf87a0",
+ "position": {
+ "x": -1.43365359,
+ "y": 0.972304,
+ "z": -0.5099766
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_572193ee",
+ "position": {
+ "x": -1.29628539,
+ "y": 1.01470053,
+ "z": 0.0464754254
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_268c1c72",
+ "position": {
+ "x": 1.444309,
+ "y": 0.9334927,
+ "z": -0.144580841
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_1ede3fc6",
+ "position": {
+ "x": 0.951595068,
+ "y": 0.9204665,
+ "z": 2.692625
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_8429d040",
+ "position": {
+ "x": -0.6649605,
+ "y": 1.65250361,
+ "z": -0.786445856
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_b6eaf348",
+ "position": {
+ "x": -1.383174,
+ "y": 0.7452062,
+ "z": 2.459
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_edec52fd",
+ "position": {
+ "x": -1.26391506,
+ "y": 1.68188834,
+ "z": 0.9848825
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_432df619",
+ "position": {
+ "x": 1.284095,
+ "y": 0.8863421,
+ "z": 2.261375
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_4b57442b",
+ "position": {
+ "x": 0.127489179,
+ "y": 0.11620301,
+ "z": -0.6216246
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pan_a0065d6c",
+ "position": {
+ "x": -1.332,
+ "y": 0.9,
+ "z": -0.699
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 345.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_1d6d1e51",
+ "position": {
+ "x": -1.12754714,
+ "y": 0.777128,
+ "z": 0.174450681
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.9996643,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SprayBottle_4f8d0eee",
+ "position": {
+ "x": 1.24557734,
+ "y": 0.08565579,
+ "z": 1.47233081
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_c297f602",
+ "position": {
+ "x": -1.43764663,
+ "y": 0.907099962,
+ "z": -0.392702371
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 2819027248,
+ "scene_num": 17
+ },
+ "task_id": "trial_T20190909_014040_145528",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A2KAGFQU28JY43_38JBBYETQR1DU6B5BLHLH598J97E46",
+ "high_descs": [
+ "Go to the front of the table that is under the window, across from you. ",
+ "Pick up the wine bottle, behind the tomato, on the table. ",
+ "Turn to your right and go to the cabinets under the counter that the toaster is sitting on. ",
+ "Place the wine bottle in the right, bottom cabinet, under the toaster. ",
+ "Turn around and go to the white, long table, to the right of the refrigerator. ",
+ "Pick up the wine bottle, behind the cell phone, on the table. ",
+ "Turn around and go back to the cabinets under the counter that the toaster sits on. ",
+ "Place the wine bottle in the right cabinet, below the toaster, to the right of the other bottle of wine. "
+ ],
+ "task_desc": "Put two bottles of wine in the kitchen cabinet. ",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A3C81THYYSBGVD_3PMBY0YE2AUZUEX3WP7H8PKLKPMC9L",
+ "high_descs": [
+ "Turn right and face the white table to your left.",
+ "Take the bottle from the table in front of you.",
+ "Turn right and face the cabinet under the toaster to your left.",
+ "Open the cabinet in front of you, place the bottle inside and close the cabinet.",
+ "Turn left and face the white table to your left.",
+ "Take the bottle from the table in front of you.",
+ "Turn left and face the cabinet under the toaster on your left.",
+ "Place the bottle inside the cabinet in front of you and close it."
+ ],
+ "task_desc": "Place bottles in cabinet.",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A3HL2LL0LEPZT8_3PMBY0YE2AUZUEX3WP7H8PKLKP1C90",
+ "high_descs": [
+ "Turn right, go forward, turn left at the square white table, go to the table.",
+ "Take the wine bottle from the table.",
+ "Turn around, go forward a step, turn left, go forward, turn left to face the toaster.",
+ "Put the bottle in the second cabinet from the left under the counter.",
+ "Turn left, go forward, turn left to the rectangular white table, go to the table.",
+ "Take the wine bottle from the table.",
+ "Turn left, go forward, turn left to face the toaster, go forward a step.",
+ "Put the bottle in the second cabinet from the left under the counter."
+ ],
+ "task_desc": "Put two bottles of win in a cabinet. ",
+ "votes": [1, 0, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014123_556566/traj_data.json b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014123_556566/traj_data.json
new file mode 100644
index 0000000..0f9c628
--- /dev/null
+++ b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-17/trial_T20190909_014123_556566/traj_data.json
@@ -0,0 +1,3865 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000048.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000049.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000050.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000051.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000052.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000053.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000054.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000055.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000056.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000057.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000058.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000059.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000060.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000061.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000062.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000063.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000064.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000065.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000066.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000067.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000068.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000069.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000070.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000071.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000072.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000073.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000074.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000075.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000076.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000077.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000078.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000079.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000080.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000081.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000082.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000083.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000099.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000100.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000101.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000102.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000103.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000104.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000105.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000106.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000107.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000108.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000109.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000110.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000111.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000112.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000113.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000114.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000115.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000116.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000117.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000118.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000119.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000120.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000121.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000122.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000123.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000124.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000125.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000126.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000127.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000128.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000129.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000130.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000131.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000132.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000133.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000134.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000135.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000136.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000137.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000138.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000139.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000140.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000141.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000142.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000143.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000144.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000145.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000146.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000147.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000148.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000149.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000150.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000151.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000152.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000153.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000154.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000155.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000156.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000157.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000158.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000159.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000160.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000161.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000162.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000163.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000164.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000165.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000166.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000167.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000168.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000169.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000170.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000171.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000172.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000173.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000174.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000175.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000176.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000177.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000178.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000179.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000180.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000181.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000182.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000183.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000184.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000185.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000186.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000187.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000188.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000189.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000190.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000191.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000192.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000193.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000194.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000195.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000196.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000197.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000198.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000199.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000200.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000201.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000202.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000203.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000204.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000205.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000206.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000207.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000208.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000209.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000210.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000211.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000212.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000213.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000214.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000215.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000216.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000217.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000218.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000219.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000220.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000221.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000222.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000223.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000224.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000225.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000226.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000227.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000228.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000229.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000230.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000231.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000232.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000233.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000234.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000235.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000236.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000237.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000238.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000239.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000240.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000241.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000242.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000243.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000244.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000245.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000246.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000247.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000248.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000249.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000250.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000251.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000252.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000253.png",
+ "low_idx": 40
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "WineBottle",
+ "parent_target": "Cabinet",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["fridge"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|4|3|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.51214124, -5.51214124, 4.370749, 4.370749, 3.008345364,
+ 3.008345364
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Fridge",
+ [-5.204, -5.204, 3.952, 3.952, 0.032000004, 0.032000004]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.38|+00.75|+01.09"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|0|5|1|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.51214124, -5.51214124, 4.370749, 4.370749, 3.008345364,
+ 3.008345364
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ 3.955002548, 3.955002548, 2.326399804, 2.326399804, 1.610000132,
+ 1.610000132
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.38|+00.75|+01.09",
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["diningtable"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|10|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [-3.67952776, -3.67952776, 9.836, 9.836, 3.00222, 3.00222]
+ ],
+ "coordinateReceptacleObjectId": [
+ "DiningTable",
+ [-4.8448, -4.8448, 9.836, 9.836, 3.1376, 3.1376]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-00.92|+00.75|+02.46"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|0|5|1|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [-3.67952776, -3.67952776, 9.836, 9.836, 3.00222, 3.00222]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ 3.955002548, 3.955002548, 2.326399804, 2.326399804, 1.610000132,
+ 1.610000132
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-00.92|+00.75|+02.46",
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Fridge|-01.30|+00.01|+00.99"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [0, 1, 299, 300],
+ "mask": [
+ [0, 81899],
+ [81900, 298],
+ [82200, 297],
+ [82500, 296],
+ [82800, 294],
+ [83100, 293],
+ [83401, 291],
+ [83703, 288],
+ [84004, 286],
+ [84305, 284],
+ [84606, 282],
+ [84907, 280],
+ [85208, 278],
+ [85509, 276],
+ [85811, 273],
+ [86112, 271],
+ [86413, 268],
+ [86714, 266],
+ [87015, 264],
+ [87316, 262],
+ [87617, 260],
+ [87919, 257],
+ [88220, 255],
+ [88521, 253],
+ [88822, 251],
+ [89123, 249],
+ [89424, 247],
+ [89725, 244]
+ ],
+ "point": [149, 149]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.38|+00.75|+01.09"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [161, 145, 178, 150],
+ "mask": [
+ [43361, 18],
+ [43662, 17],
+ [43962, 16],
+ [44264, 13],
+ [44565, 10],
+ [44870, 1]
+ ],
+ "point": [169, 146]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Fridge|-01.30|+00.01|+00.99"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [0, 1, 299, 300],
+ "mask": [
+ [0, 1602],
+ [1606, 295],
+ [1907, 289],
+ [2197, 4],
+ [2207, 4],
+ [2212, 282],
+ [2496, 5],
+ [2506, 5],
+ [2513, 280],
+ [2796, 4],
+ [2806, 4],
+ [2815, 276],
+ [3095, 5],
+ [3106, 4],
+ [3116, 275],
+ [3395, 4],
+ [3405, 5],
+ [3416, 274],
+ [3694, 5],
+ [3705, 4],
+ [3715, 274],
+ [3994, 5],
+ [4004, 5],
+ [4015, 274],
+ [4293, 5],
+ [4304, 5],
+ [4315, 4],
+ [4320, 268],
+ [4593, 5],
+ [4604, 4],
+ [4615, 4],
+ [4620, 268],
+ [4893, 4],
+ [4903, 5],
+ [4914, 5],
+ [4921, 267],
+ [5192, 5],
+ [5203, 5],
+ [5214, 5],
+ [5222, 266],
+ [5492, 4],
+ [5503, 4],
+ [5514, 5],
+ [5522, 918],
+ [6460, 276],
+ [6764, 269],
+ [7067, 264],
+ [7369, 260],
+ [7671, 216],
+ [7923, 5],
+ [7972, 215],
+ [8223, 3],
+ [8274, 213],
+ [8523, 3],
+ [8574, 214],
+ [8823, 2],
+ [8875, 213],
+ [9123, 2],
+ [9175, 214],
+ [9423, 1],
+ [9476, 213],
+ [9723, 1],
+ [9776, 214],
+ [10023, 1],
+ [10076, 215],
+ [10323, 1],
+ [10376, 215],
+ [10623, 1],
+ [10676, 216],
+ [10922, 2],
+ [10976, 217],
+ [11222, 3],
+ [11275, 219],
+ [11521, 4],
+ [11575, 220],
+ [11820, 6],
+ [11874, 222],
+ [12120, 6],
+ [12174, 223],
+ [12419, 7],
+ [12474, 225],
+ [12718, 8],
+ [12774, 226],
+ [13017, 9],
+ [13074, 227],
+ [13316, 10],
+ [13374, 231],
+ [13612, 14],
+ [13674, 252],
+ [13974, 252],
+ [14274, 252],
+ [14574, 252],
+ [14874, 252],
+ [15174, 252],
+ [15474, 252],
+ [15774, 252],
+ [16074, 252],
+ [16374, 252],
+ [16674, 252],
+ [16974, 252],
+ [17274, 252],
+ [17574, 252],
+ [17874, 253],
+ [18173, 254],
+ [18473, 254],
+ [18773, 254],
+ [19073, 254],
+ [19373, 254],
+ [19673, 254],
+ [19973, 254],
+ [20273, 254],
+ [20573, 254],
+ [20873, 254],
+ [21173, 254],
+ [21473, 254],
+ [21773, 254],
+ [22073, 254],
+ [22373, 254],
+ [22673, 254],
+ [22973, 254],
+ [23273, 254],
+ [23573, 254],
+ [23873, 255],
+ [24172, 256],
+ [24472, 256],
+ [24772, 256],
+ [25072, 256],
+ [25372, 256],
+ [25672, 256],
+ [25972, 256],
+ [26272, 256],
+ [26572, 256],
+ [26872, 256],
+ [27172, 256],
+ [27472, 256],
+ [27772, 256],
+ [28072, 256],
+ [28372, 256],
+ [28672, 256],
+ [28972, 256],
+ [29272, 256],
+ [29572, 256],
+ [29872, 257],
+ [30171, 258],
+ [30471, 258],
+ [30771, 258],
+ [31071, 258],
+ [31371, 258],
+ [31671, 258],
+ [31971, 258],
+ [32271, 258],
+ [32571, 258],
+ [32871, 258],
+ [33171, 258],
+ [33471, 258],
+ [33771, 258],
+ [34071, 258],
+ [34371, 258],
+ [34671, 258],
+ [34971, 258],
+ [35271, 258],
+ [35571, 258],
+ [35871, 259],
+ [36170, 260],
+ [36470, 260],
+ [36770, 260],
+ [37070, 260],
+ [37370, 260],
+ [37670, 259],
+ [37971, 258],
+ [38271, 257],
+ [38572, 256],
+ [38872, 255],
+ [39173, 253],
+ [39474, 251],
+ [39775, 250],
+ [40075, 249],
+ [40376, 247],
+ [40677, 245],
+ [40978, 243],
+ [41279, 242],
+ [41579, 241],
+ [41880, 239],
+ [42181, 237],
+ [42482, 235],
+ [42783, 234],
+ [43083, 233],
+ [43384, 231],
+ [43685, 229],
+ [43986, 227],
+ [44287, 226],
+ [44587, 225],
+ [44888, 223],
+ [45189, 221],
+ [45490, 220],
+ [45790, 219],
+ [46091, 217],
+ [46392, 216],
+ [46692, 215],
+ [46993, 214],
+ [47293, 213],
+ [47594, 212],
+ [47894, 212],
+ [48194, 211],
+ [48495, 210],
+ [48795, 210],
+ [49095, 209],
+ [49396, 208],
+ [49696, 208],
+ [49996, 208],
+ [50296, 208],
+ [50596, 207],
+ [50897, 206],
+ [51197, 206],
+ [51497, 206],
+ [51797, 206],
+ [52097, 206],
+ [52397, 206],
+ [52697, 206],
+ [52997, 206],
+ [53297, 206],
+ [53597, 206],
+ [53897, 206],
+ [54197, 206],
+ [54497, 206],
+ [54797, 206],
+ [55097, 206],
+ [55397, 206],
+ [55697, 206],
+ [55997, 206],
+ [56297, 206],
+ [56597, 206],
+ [56897, 207],
+ [57196, 208],
+ [57496, 208],
+ [57796, 208],
+ [58096, 208],
+ [58396, 209],
+ [58695, 210],
+ [58995, 210],
+ [59295, 210],
+ [59595, 211],
+ [59894, 212],
+ [60194, 212],
+ [60494, 212],
+ [60794, 212],
+ [61094, 213],
+ [61393, 214],
+ [61693, 214],
+ [61993, 214],
+ [62293, 214],
+ [62593, 215],
+ [62892, 216],
+ [63192, 216],
+ [63492, 216],
+ [63792, 216],
+ [64092, 217],
+ [64391, 218],
+ [64691, 218],
+ [64991, 218],
+ [65291, 219],
+ [65590, 110],
+ [65701, 109],
+ [65890, 110],
+ [66001, 109],
+ [66190, 110],
+ [66302, 108],
+ [66490, 110],
+ [66603, 107],
+ [66790, 110],
+ [66904, 79],
+ [66986, 25],
+ [67089, 111],
+ [67204, 77],
+ [67289, 22],
+ [67389, 111],
+ [67505, 74],
+ [67590, 21],
+ [67689, 111],
+ [67806, 72],
+ [67891, 20],
+ [67989, 111],
+ [68107, 71],
+ [68192, 19],
+ [68289, 111],
+ [68408, 69],
+ [68492, 20],
+ [68588, 112],
+ [68708, 69],
+ [68793, 19],
+ [68888, 112],
+ [69009, 68],
+ [69093, 19],
+ [69188, 112],
+ [69310, 66],
+ [69393, 19],
+ [69488, 112],
+ [69611, 65],
+ [69693, 19],
+ [69788, 112],
+ [69912, 64],
+ [69993, 20],
+ [70087, 113],
+ [70212, 64],
+ [70293, 20],
+ [70387, 113],
+ [70513, 63],
+ [70593, 20],
+ [70687, 113],
+ [70814, 63],
+ [70892, 21],
+ [70987, 113],
+ [71115, 63],
+ [71192, 22],
+ [71286, 114],
+ [71415, 64],
+ [71491, 23],
+ [71586, 114],
+ [71716, 64],
+ [71790, 24],
+ [71886, 114],
+ [72017, 66],
+ [72088, 26],
+ [72186, 114],
+ [72318, 96],
+ [72486, 114],
+ [72619, 96],
+ [72785, 115],
+ [72919, 96],
+ [73085, 115],
+ [73220, 95],
+ [73385, 115],
+ [73521, 94],
+ [73685, 115],
+ [73822, 93],
+ [73985, 115],
+ [74123, 93],
+ [74284, 116],
+ [74423, 93],
+ [74584, 116],
+ [74724, 92],
+ [74884, 116],
+ [75025, 91],
+ [75184, 116],
+ [75326, 91],
+ [75483, 117],
+ [75626, 91],
+ [75783, 117],
+ [75927, 90],
+ [76083, 117],
+ [76228, 89],
+ [76383, 117],
+ [76529, 88],
+ [76683, 117],
+ [76830, 88],
+ [76982, 118],
+ [77130, 88],
+ [77282, 118],
+ [77431, 87],
+ [77582, 118],
+ [77732, 86],
+ [77882, 118],
+ [78033, 85],
+ [78182, 118],
+ [78334, 85],
+ [78481, 119],
+ [78634, 85],
+ [78781, 119],
+ [78935, 84],
+ [79081, 119],
+ [79236, 83],
+ [79381, 119],
+ [79537, 82],
+ [79681, 119],
+ [79837, 83],
+ [79980, 120],
+ [80138, 82],
+ [80280, 120],
+ [80439, 81],
+ [80580, 120],
+ [80740, 81],
+ [80879, 121],
+ [81041, 80],
+ [81179, 121],
+ [81341, 80],
+ [81479, 121],
+ [81642, 80],
+ [81778, 122],
+ [81943, 79],
+ [82078, 122],
+ [82244, 78],
+ [82378, 122],
+ [82545, 78],
+ [82677, 123],
+ [82845, 79],
+ [82976, 124],
+ [83146, 78],
+ [83276, 124],
+ [83447, 78],
+ [83575, 125],
+ [83748, 78],
+ [83874, 126],
+ [84048, 78],
+ [84174, 126],
+ [84349, 78],
+ [84473, 127],
+ [84650, 78],
+ [84772, 128],
+ [84951, 79],
+ [85070, 130],
+ [85252, 79],
+ [85369, 131],
+ [85556, 76],
+ [85668, 72],
+ [85743, 57],
+ [86043, 57],
+ [86344, 56],
+ [86644, 56],
+ [86944, 56],
+ [87244, 56],
+ [87544, 56],
+ [87845, 55],
+ [88145, 55],
+ [88445, 55],
+ [88745, 55],
+ [89046, 54],
+ [89346, 54],
+ [89646, 54],
+ [89946, 54]
+ ],
+ "point": [124, 133]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [205, 135, 281, 203],
+ "mask": [
+ [40422, 59],
+ [40721, 60],
+ [41021, 61],
+ [41321, 60],
+ [41621, 60],
+ [41920, 60],
+ [42220, 60],
+ [42520, 59],
+ [42820, 59],
+ [43119, 59],
+ [43419, 59],
+ [43719, 58],
+ [44019, 58],
+ [44318, 59],
+ [44618, 58],
+ [44918, 58],
+ [45218, 57],
+ [45517, 58],
+ [45817, 57],
+ [46117, 57],
+ [46417, 56],
+ [46716, 57],
+ [47016, 56],
+ [47316, 56],
+ [47615, 56],
+ [47915, 56],
+ [48215, 55],
+ [48515, 55],
+ [48814, 55],
+ [49114, 55],
+ [49414, 54],
+ [49714, 54],
+ [50013, 54],
+ [50313, 54],
+ [50613, 53],
+ [50913, 53],
+ [51212, 53],
+ [51512, 53],
+ [51812, 52],
+ [52112, 52],
+ [52411, 52],
+ [52711, 52],
+ [53011, 52],
+ [53311, 51],
+ [53610, 52],
+ [53910, 51],
+ [54210, 51],
+ [54509, 51],
+ [54809, 51],
+ [55109, 50],
+ [55409, 50],
+ [55708, 50],
+ [56008, 50],
+ [56308, 49],
+ [56608, 49],
+ [56907, 49],
+ [57207, 49],
+ [57507, 48],
+ [57807, 48],
+ [58106, 48],
+ [58406, 48],
+ [58706, 47],
+ [59006, 47],
+ [59305, 47],
+ [59605, 47],
+ [59905, 46],
+ [60205, 46],
+ [60505, 45],
+ [60805, 45]
+ ],
+ "point": [243, 168]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.38|+00.75|+01.09",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 77],
+ [47017, 77],
+ [47317, 78],
+ [47616, 79],
+ [47916, 80],
+ [48216, 81],
+ [48515, 82],
+ [48815, 83],
+ [49115, 83],
+ [49415, 84],
+ [49714, 85],
+ [50014, 86],
+ [50314, 86],
+ [50614, 86],
+ [50913, 87],
+ [51213, 87],
+ [51513, 87],
+ [51813, 87],
+ [52112, 88],
+ [52412, 88],
+ [52712, 88],
+ [53012, 88],
+ [53311, 89],
+ [53611, 89],
+ [53911, 89],
+ [54210, 90],
+ [54510, 90],
+ [54810, 90],
+ [55110, 90],
+ [55409, 91],
+ [55709, 91],
+ [56009, 91],
+ [56309, 91],
+ [56608, 92],
+ [56908, 92],
+ [57208, 92],
+ [57508, 92],
+ [57807, 93],
+ [58107, 93],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 3],
+ [46725, 69],
+ [47017, 3],
+ [47025, 69],
+ [47317, 3],
+ [47325, 70],
+ [47616, 4],
+ [47625, 70],
+ [47916, 3],
+ [47924, 72],
+ [48216, 3],
+ [48224, 73],
+ [48515, 4],
+ [48524, 73],
+ [48815, 3],
+ [48824, 74],
+ [49115, 3],
+ [49123, 75],
+ [49415, 1],
+ [49423, 76],
+ [49724, 75],
+ [50024, 76],
+ [50325, 75],
+ [50625, 75],
+ [50926, 74],
+ [51226, 74],
+ [51526, 74],
+ [51826, 74],
+ [52125, 75],
+ [52425, 75],
+ [52725, 75],
+ [53024, 76],
+ [53324, 76],
+ [53624, 76],
+ [53923, 77],
+ [54223, 77],
+ [54523, 77],
+ [54822, 78],
+ [55122, 78],
+ [55422, 78],
+ [55722, 78],
+ [56021, 79],
+ [56321, 79],
+ [56621, 79],
+ [56920, 80],
+ [57220, 80],
+ [57508, 1],
+ [57519, 81],
+ [57807, 4],
+ [57818, 82],
+ [58107, 6],
+ [58116, 84],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-00.92|+00.75|+02.46"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [121, 103, 150, 176],
+ "mask": [
+ [30731, 6],
+ [31029, 9],
+ [31329, 10],
+ [31628, 12],
+ [31928, 12],
+ [32228, 12],
+ [32528, 12],
+ [32828, 12],
+ [33128, 12],
+ [33428, 12],
+ [33728, 12],
+ [34029, 11],
+ [34329, 11],
+ [34629, 11],
+ [34929, 11],
+ [35229, 11],
+ [35529, 11],
+ [35829, 11],
+ [36129, 12],
+ [36429, 12],
+ [36729, 14],
+ [37027, 18],
+ [37326, 20],
+ [37625, 22],
+ [37924, 24],
+ [38223, 26],
+ [38523, 26],
+ [38822, 28],
+ [39122, 28],
+ [39422, 28],
+ [39722, 29],
+ [40021, 30],
+ [40321, 30],
+ [40621, 30],
+ [40921, 30],
+ [41221, 30],
+ [41521, 30],
+ [41821, 30],
+ [42122, 29],
+ [42422, 29],
+ [42722, 29],
+ [43022, 29],
+ [43322, 29],
+ [43622, 29],
+ [43923, 28],
+ [44223, 28],
+ [44523, 28],
+ [44823, 28],
+ [45123, 28],
+ [45424, 27],
+ [45724, 27],
+ [46024, 27],
+ [46324, 27],
+ [46624, 27],
+ [46924, 27],
+ [47225, 26],
+ [47525, 26],
+ [47825, 26],
+ [48125, 26],
+ [48425, 26],
+ [48725, 26],
+ [49026, 25],
+ [49326, 25],
+ [49626, 25],
+ [49926, 25],
+ [50226, 24],
+ [50527, 23],
+ [50827, 22],
+ [51128, 21],
+ [51429, 19],
+ [51730, 17],
+ [52031, 15],
+ [52333, 11],
+ [52636, 5]
+ ],
+ "point": [135, 138]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [205, 135, 281, 203],
+ "mask": [
+ [40422, 59],
+ [40721, 60],
+ [41021, 61],
+ [41321, 60],
+ [41621, 60],
+ [41920, 60],
+ [42220, 60],
+ [42520, 59],
+ [42820, 59],
+ [43119, 59],
+ [43419, 59],
+ [43719, 58],
+ [44019, 58],
+ [44318, 59],
+ [44618, 58],
+ [44918, 58],
+ [45218, 57],
+ [45517, 58],
+ [45817, 57],
+ [46117, 57],
+ [46417, 56],
+ [46716, 57],
+ [47016, 56],
+ [47316, 56],
+ [47615, 56],
+ [47915, 56],
+ [48215, 55],
+ [48515, 55],
+ [48814, 55],
+ [49114, 55],
+ [49414, 54],
+ [49714, 54],
+ [50013, 54],
+ [50313, 54],
+ [50613, 53],
+ [50913, 53],
+ [51212, 53],
+ [51512, 53],
+ [51812, 52],
+ [52112, 52],
+ [52411, 52],
+ [52711, 52],
+ [53011, 52],
+ [53311, 51],
+ [53610, 52],
+ [53910, 51],
+ [54210, 51],
+ [54509, 51],
+ [54809, 51],
+ [55109, 50],
+ [55409, 50],
+ [55708, 50],
+ [56008, 50],
+ [56308, 49],
+ [56608, 49],
+ [56907, 49],
+ [57207, 49],
+ [57507, 48],
+ [57807, 48],
+ [58106, 48],
+ [58406, 48],
+ [58706, 47],
+ [59006, 47],
+ [59305, 47],
+ [59605, 47],
+ [59905, 46],
+ [60205, 46],
+ [60505, 45],
+ [60805, 45]
+ ],
+ "point": [243, 168]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-00.92|+00.75|+02.46",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 3],
+ [46725, 69],
+ [47017, 3],
+ [47025, 69],
+ [47317, 3],
+ [47325, 70],
+ [47616, 4],
+ [47625, 70],
+ [47916, 3],
+ [47924, 72],
+ [48216, 3],
+ [48224, 73],
+ [48515, 4],
+ [48524, 73],
+ [48815, 3],
+ [48824, 74],
+ [49115, 3],
+ [49123, 75],
+ [49415, 1],
+ [49423, 76],
+ [49724, 75],
+ [50024, 76],
+ [50325, 75],
+ [50625, 75],
+ [50926, 74],
+ [51226, 74],
+ [51526, 74],
+ [51826, 74],
+ [52125, 75],
+ [52425, 75],
+ [52725, 75],
+ [53024, 76],
+ [53324, 76],
+ [53624, 76],
+ [53923, 77],
+ [54223, 77],
+ [54523, 77],
+ [54822, 78],
+ [55122, 78],
+ [55422, 78],
+ [55722, 78],
+ [56021, 79],
+ [56321, 79],
+ [56621, 79],
+ [56920, 80],
+ [57220, 80],
+ [57508, 1],
+ [57519, 81],
+ [57807, 4],
+ [57818, 82],
+ [58107, 6],
+ [58116, 84],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|+00.99|+00.40|+00.58"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [205, 135, 299, 245],
+ "mask": [
+ [40423, 58],
+ [40722, 61],
+ [41022, 62],
+ [41322, 62],
+ [41622, 63],
+ [41921, 64],
+ [42221, 65],
+ [42521, 65],
+ [42820, 67],
+ [43120, 67],
+ [43420, 68],
+ [43720, 68],
+ [44019, 70],
+ [44319, 70],
+ [44619, 71],
+ [44919, 72],
+ [45218, 73],
+ [45518, 74],
+ [45818, 74],
+ [46118, 75],
+ [46417, 76],
+ [46717, 3],
+ [46725, 14],
+ [46743, 51],
+ [47017, 3],
+ [47025, 14],
+ [47044, 50],
+ [47317, 3],
+ [47325, 13],
+ [47344, 51],
+ [47616, 4],
+ [47625, 13],
+ [47643, 52],
+ [47916, 3],
+ [47924, 14],
+ [47943, 53],
+ [48216, 3],
+ [48224, 13],
+ [48243, 54],
+ [48515, 4],
+ [48524, 13],
+ [48542, 55],
+ [48815, 3],
+ [48824, 12],
+ [48842, 56],
+ [49115, 3],
+ [49123, 13],
+ [49142, 56],
+ [49415, 1],
+ [49423, 10],
+ [49441, 58],
+ [49724, 7],
+ [49742, 57],
+ [50024, 7],
+ [50042, 58],
+ [50325, 5],
+ [50343, 57],
+ [50625, 4],
+ [50643, 57],
+ [50926, 3],
+ [50943, 57],
+ [51226, 3],
+ [51244, 56],
+ [51526, 2],
+ [51544, 56],
+ [51826, 2],
+ [51843, 57],
+ [52125, 3],
+ [52143, 57],
+ [52425, 2],
+ [52443, 57],
+ [52725, 2],
+ [52742, 58],
+ [53024, 3],
+ [53042, 58],
+ [53324, 2],
+ [53342, 58],
+ [53624, 2],
+ [53641, 59],
+ [53923, 3],
+ [53941, 59],
+ [54223, 2],
+ [54240, 60],
+ [54523, 2],
+ [54540, 60],
+ [54822, 3],
+ [54840, 60],
+ [55122, 2],
+ [55139, 61],
+ [55422, 2],
+ [55439, 61],
+ [55722, 2],
+ [55738, 62],
+ [56021, 3],
+ [56038, 62],
+ [56321, 3],
+ [56338, 62],
+ [56621, 3],
+ [56637, 63],
+ [56920, 4],
+ [56937, 63],
+ [57220, 5],
+ [57236, 64],
+ [57508, 1],
+ [57519, 7],
+ [57536, 64],
+ [57807, 4],
+ [57818, 9],
+ [57835, 65],
+ [58107, 6],
+ [58116, 14],
+ [58133, 67],
+ [58407, 93],
+ [58706, 93],
+ [59006, 92],
+ [59306, 92],
+ [59606, 91],
+ [59905, 91],
+ [60248, 48],
+ [60548, 47],
+ [60848, 46],
+ [61148, 45],
+ [61449, 44],
+ [61749, 43],
+ [62049, 42],
+ [62350, 41],
+ [62650, 40],
+ [62950, 39],
+ [63251, 38],
+ [63551, 37],
+ [63851, 36],
+ [64152, 34],
+ [64452, 34],
+ [64752, 33],
+ [65053, 31],
+ [65353, 31],
+ [65653, 30],
+ [65953, 29],
+ [66254, 28],
+ [66554, 27],
+ [66854, 26],
+ [67155, 25],
+ [67455, 24],
+ [67755, 23],
+ [68056, 21],
+ [68356, 21],
+ [68656, 20],
+ [68957, 18],
+ [69257, 18],
+ [69557, 17],
+ [69858, 15],
+ [70158, 15],
+ [70458, 14],
+ [70758, 13],
+ [71059, 11],
+ [71359, 11],
+ [71659, 10],
+ [71960, 8],
+ [72260, 8],
+ [72560, 7],
+ [72861, 5],
+ [73161, 5],
+ [73461, 4]
+ ],
+ "point": [252, 189]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan17",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 180,
+ "x": -0.5,
+ "y": 0.908999562,
+ "z": 0.5
+ },
+ "object_poses": [
+ {
+ "objectName": "SprayBottle_4f8d0eee",
+ "position": {
+ "x": 1.20097,
+ "y": 0.8857041,
+ "z": 2.80043745
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_edec52fd",
+ "position": {
+ "x": -1.19785714,
+ "y": 0.7938309,
+ "z": 1.90228331
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_4b57442b",
+ "position": {
+ "x": -1.383174,
+ "y": 0.7484642,
+ "z": 2.273428
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_432df619",
+ "position": {
+ "x": 1.36534023,
+ "y": 0.9115421,
+ "z": 0.1391859
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_432df619",
+ "position": {
+ "x": 1.03472006,
+ "y": 0.8863421,
+ "z": 2.692625
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_6b7178a8",
+ "position": {
+ "x": -0.91988194,
+ "y": 0.750555,
+ "z": 2.459
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_6b7178a8",
+ "position": {
+ "x": -1.37803531,
+ "y": 0.752086341,
+ "z": 1.09268725
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_1d6d1e51",
+ "position": {
+ "x": 1.36534023,
+ "y": 0.9126294,
+ "z": 0.4229527
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_1d6d1e51",
+ "position": {
+ "x": -1.18451083,
+ "y": 0.777128,
+ "z": -0.205843419
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.9996643,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_2f163330",
+ "position": {
+ "x": -1.19785714,
+ "y": 0.764626145,
+ "z": 2.459
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_2f163330",
+ "position": {
+ "x": -0.503703535,
+ "y": 0.9270999,
+ "z": -0.5894883
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_92502562",
+ "position": {
+ "x": 0.802,
+ "y": 0.9393,
+ "z": -0.47308147
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_1ede3fc6",
+ "position": {
+ "x": -0.0203592032,
+ "y": 0.792722642,
+ "z": -0.7306608
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_c933fa0b",
+ "position": {
+ "x": -1.383174,
+ "y": 0.750511765,
+ "z": 2.64457226
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_c933fa0b",
+ "position": {
+ "x": 0.209448546,
+ "y": 0.117524266,
+ "z": -0.5338761
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_57296338",
+ "position": {
+ "x": -1.16246963,
+ "y": 0.3912896,
+ "z": 0.9880004
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_57296338",
+ "position": {
+ "x": -1.20685482,
+ "y": 1.68668628,
+ "z": 0.8832667
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e0c21b7c",
+ "position": {
+ "x": -0.91988194,
+ "y": 0.7502286,
+ "z": 3.015717
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e0c21b7c",
+ "position": {
+ "x": 1.20740271,
+ "y": 0.9128286,
+ "z": 0.7067195
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_7e041f70",
+ "position": {
+ "x": 1.13115919,
+ "y": 0.115498424,
+ "z": -0.05235876
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_74101882",
+ "position": {
+ "x": -1.01254034,
+ "y": 0.813041151,
+ "z": 2.08785558
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_7daf87a0",
+ "position": {
+ "x": -1.13565314,
+ "y": 0.9723039,
+ "z": -0.732326269
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_7daf87a0",
+ "position": {
+ "x": -1.29051554,
+ "y": 0.809103966,
+ "z": 2.83014464
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_74101882",
+ "position": {
+ "x": 1.36722,
+ "y": 0.9497149,
+ "z": 2.36918736
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_6018293c",
+ "position": {
+ "x": -0.293590665,
+ "y": 0.117355466,
+ "z": -0.5777503
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_9f8771c2",
+ "position": {
+ "x": 1.444309,
+ "y": 0.9120486,
+ "z": 0.7067195
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_c40d8d1f",
+ "position": {
+ "x": -1.357,
+ "y": 0.7396263,
+ "z": 3.024
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 240.000229,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_57296338",
+ "position": {
+ "x": -1.3209753,
+ "y": 1.47098637,
+ "z": 1.09268737
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_c933fa0b",
+ "position": {
+ "x": 1.20740271,
+ "y": 0.9123855,
+ "z": 0.1391859
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CellPhone_e3d6b27e",
+ "position": {
+ "x": 0.951595068,
+ "y": 0.8840117,
+ "z": 2.80043745
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_6438ff8b",
+ "position": {
+ "x": 1.03472006,
+ "y": 0.957268536,
+ "z": 2.36918736
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_92502562",
+ "position": {
+ "x": 0.5029,
+ "y": 0.9393,
+ "z": -0.7406
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e0c21b7c",
+ "position": {
+ "x": 1.24557734,
+ "y": 0.0875803,
+ "z": 1.409267
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_6b7178a8",
+ "position": {
+ "x": 1.20097,
+ "y": 0.8872287,
+ "z": 2.15356255
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_2f163330",
+ "position": {
+ "x": -0.6586952,
+ "y": 0.9270999,
+ "z": -0.669
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_7e041f70",
+ "position": {
+ "x": -1.01254034,
+ "y": 0.7480669,
+ "z": 2.64457226
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_7daf87a0",
+ "position": {
+ "x": -1.13076985,
+ "y": 0.40176475,
+ "z": 0.673938
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_572193ee",
+ "position": {
+ "x": -1.29628491,
+ "y": 1.01470053,
+ "z": -0.109642744
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_268c1c72",
+ "position": {
+ "x": -1.01254034,
+ "y": 0.771618962,
+ "z": 3.015717
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_1ede3fc6",
+ "position": {
+ "x": -1.42715728,
+ "y": 1.04961908,
+ "z": -0.00556433573
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_8429d040",
+ "position": {
+ "x": 1.30640435,
+ "y": 0.113363981,
+ "z": 0.07148978
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_b6eaf348",
+ "position": {
+ "x": -1.10519874,
+ "y": 0.7452062,
+ "z": 2.83014464
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_edec52fd",
+ "position": {
+ "x": -1.20685482,
+ "y": 1.33328843,
+ "z": 0.883312762
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.99983,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_432df619",
+ "position": {
+ "x": 1.128434,
+ "y": 0.9115421,
+ "z": -0.4283477
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_4b57442b",
+ "position": {
+ "x": 1.128434,
+ "y": 0.911064267,
+ "z": 0.4229527
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pan_a0065d6c",
+ "position": {
+ "x": -1.332,
+ "y": 0.9,
+ "z": -0.699
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 345.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_1d6d1e51",
+ "position": {
+ "x": 1.03472006,
+ "y": 0.8874294,
+ "z": 2.477
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SprayBottle_4f8d0eee",
+ "position": {
+ "x": -1.383174,
+ "y": 0.749030352,
+ "z": 2.08785558
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_c297f602",
+ "position": {
+ "x": 1.0494653,
+ "y": 0.906500041,
+ "z": 0.7067195
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 1429924808,
+ "scene_num": 17
+ },
+ "task_id": "trial_T20190909_014123_556566",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A3HL2LL0LEPZT8_32RIADZISVVE4PGNCG1Q6MDNKZB4SQ",
+ "high_descs": [
+ "Turn around, go forward, turn left to the fridge.",
+ "Take the wine bottle from the fridge.",
+ "Turn around, go forward a step away from the counter.",
+ "Put the wine in the left side of the bottom cabinet second from the red bin.",
+ "Turn left, go forward, turn left to the white table, go to the table.",
+ "Take the wine bottle from the table.",
+ "Turn left, go forward, at the fridge turn left, go forward a step away from the counter.",
+ "Put the wine in the bottom cabinet second from the red bin to the right of the first bottle."
+ ],
+ "task_desc": "Put two wine bottles in a cabinet.",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A20FCMWP43CVIU_3DR23U6WE85XBRQVQMITPDL0Z79ETL",
+ "high_descs": [
+ "walk to face fridge",
+ "remove wine bottle from fridge",
+ "turn to face cabinets under toaster",
+ "put bottle in cabinet under toaster",
+ "walk to face white table",
+ "pick up wine bottle from table",
+ "walk to face cabinets under toaster",
+ "put bottle in cabinet under toaster"
+ ],
+ "task_desc": "put two wine bottles in cabinet",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A1E0WK5W1BFPWR_3CP1TO84PWS3V93PW65UKW6XM1552R",
+ "high_descs": [
+ "Turn around and move to the fridge on the left. ",
+ "Open the fridge and take out the wine bottle.",
+ "Turn around and take the wine bottle to the counter directly in front of you.",
+ "Place the wine bottle into the second cupboard from the left, below the counter.",
+ "Turn to the left and move towards the white table on the left. ",
+ "Pick up the open wine bottle on the white table.",
+ "Turn to the left and walk to the counter on the left.",
+ "Place the wine bottle into the second cupboard from the left, below the counter."
+ ],
+ "task_desc": "Organize all the wine bottles into the cupboard.",
+ "votes": [0, 1, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074653_538268/traj_data.json b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074653_538268/traj_data.json
new file mode 100644
index 0000000..0cc57cd
--- /dev/null
+++ b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074653_538268/traj_data.json
@@ -0,0 +1,4362 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000048.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000049.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000050.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000051.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000052.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000053.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000054.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000055.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000056.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000057.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000058.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000059.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000060.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000061.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000062.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000063.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000064.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000065.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000066.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000067.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000068.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000069.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000070.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000071.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000072.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000073.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000074.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000075.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000076.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000077.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000078.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000079.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000080.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000081.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000082.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000083.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000116.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000117.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000118.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000119.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000120.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000121.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000122.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000123.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000124.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000125.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000126.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000127.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000128.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000129.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000130.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000131.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000132.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000133.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000134.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000135.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000136.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000137.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000138.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000139.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000140.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000141.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000142.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000143.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000144.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000145.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000146.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000147.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000148.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000149.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000150.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000151.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000152.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000153.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000154.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000155.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000156.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000157.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000158.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000159.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000160.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000161.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000162.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000163.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000164.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000165.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000166.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000167.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000168.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000169.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000170.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000171.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000172.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000173.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000174.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000175.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000176.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000177.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000178.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000179.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000180.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000181.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000182.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000183.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000184.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000185.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000186.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000187.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000188.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000189.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000190.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000191.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000192.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000193.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000194.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000195.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000196.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000197.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000198.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000199.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000200.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000201.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000202.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000203.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000204.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000205.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000206.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000207.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000208.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000209.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000210.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000211.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000212.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000213.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000214.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000215.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000216.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000217.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000218.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000219.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000220.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000221.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000222.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000223.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000224.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000225.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000226.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000227.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000228.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000229.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000230.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000231.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000232.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000233.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000234.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000235.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000236.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000237.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000238.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000239.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000240.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000241.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000242.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000243.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000244.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000245.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000246.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000247.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000248.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000249.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000250.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000251.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000252.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000253.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000254.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000255.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000256.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000257.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000258.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000259.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000260.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000261.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000262.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000263.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000264.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000265.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000266.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000267.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000268.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000269.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000270.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000271.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000272.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000273.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000274.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000275.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000276.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000277.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000278.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000279.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000280.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000281.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000282.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000283.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000284.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000285.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000286.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000287.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000288.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000289.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000290.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000291.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000292.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000293.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000294.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000295.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000296.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000297.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000298.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000299.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000300.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000301.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000302.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000303.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000304.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000305.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000306.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000307.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000308.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000309.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000310.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000311.png",
+ "low_idx": 44
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "WineBottle",
+ "parent_target": "Cabinet",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["countertop"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-4|-7|3|30"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -7.16126252, -7.16126252, -6.72589348, -6.72589348, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "CounterTop",
+ [-7.236, -7.236, 4.728, 4.728, 5.434, 5.434]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.79|+01.32|-01.68"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|-6|3|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -7.16126252, -7.16126252, -6.72589348, -6.72589348, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ -5.84518432, -5.84518432, -8.008472, -8.008472, 3.100034236,
+ 3.100034236
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.79|+01.32|-01.68",
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|-02.00"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["countertop"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-4|-3|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.454752, -5.454752, -3.2051612, -3.2051612, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "CounterTop",
+ [-7.236, -7.236, 4.728, 4.728, 5.434, 5.434]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.36|+01.32|-00.80"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|-6|3|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.454752, -5.454752, -3.2051612, -3.2051612, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ -5.84518432, -5.84518432, -8.008472, -8.008472, 3.100034236,
+ 3.100034236
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.36|+01.32|-00.80",
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|-02.00"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.79|+01.32|-01.68"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [157, 59, 185, 160],
+ "mask": [
+ [17570, 7],
+ [17868, 11],
+ [18168, 10],
+ [18468, 10],
+ [18768, 10],
+ [19068, 10],
+ [19368, 10],
+ [19668, 10],
+ [19968, 10],
+ [20268, 10],
+ [20568, 10],
+ [20868, 10],
+ [21168, 10],
+ [21468, 10],
+ [21768, 10],
+ [22068, 10],
+ [22368, 10],
+ [22668, 10],
+ [22968, 10],
+ [23268, 10],
+ [23568, 10],
+ [23868, 10],
+ [24167, 11],
+ [24467, 11],
+ [24767, 11],
+ [25067, 11],
+ [25367, 11],
+ [25667, 11],
+ [25966, 12],
+ [26265, 14],
+ [26565, 15],
+ [26864, 16],
+ [27163, 18],
+ [27463, 18],
+ [27762, 20],
+ [28061, 21],
+ [28361, 22],
+ [28660, 23],
+ [28959, 25],
+ [29259, 26],
+ [29559, 26],
+ [29858, 27],
+ [30158, 27],
+ [30458, 27],
+ [30758, 28],
+ [31058, 28],
+ [31358, 28],
+ [31658, 28],
+ [31957, 28],
+ [32257, 28],
+ [32557, 28],
+ [32857, 28],
+ [33157, 28],
+ [33457, 28],
+ [33757, 28],
+ [34057, 28],
+ [34357, 28],
+ [34657, 28],
+ [34957, 28],
+ [35257, 28],
+ [35557, 28],
+ [35857, 28],
+ [36157, 27],
+ [36457, 27],
+ [36757, 27],
+ [37057, 27],
+ [37357, 27],
+ [37657, 27],
+ [37957, 27],
+ [38257, 27],
+ [38557, 27],
+ [38857, 27],
+ [39157, 27],
+ [39457, 27],
+ [39757, 26],
+ [40057, 24],
+ [40357, 22],
+ [40657, 21],
+ [40957, 20],
+ [41257, 19],
+ [41557, 18],
+ [41857, 17],
+ [42157, 16],
+ [42457, 16],
+ [42757, 15],
+ [43057, 15],
+ [43357, 15],
+ [43657, 14],
+ [43957, 14],
+ [44257, 14],
+ [44557, 14],
+ [44857, 14],
+ [45157, 14],
+ [45457, 13],
+ [45757, 13],
+ [46057, 12],
+ [46357, 11],
+ [46657, 11],
+ [46958, 9],
+ [47259, 8],
+ [47560, 6],
+ [47862, 4]
+ ],
+ "point": [171, 108]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-01.46|+00.78|-02.00"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [0, 107, 113, 200],
+ "mask": [
+ [31800, 9],
+ [32100, 19],
+ [32400, 29],
+ [32700, 39],
+ [33000, 50],
+ [33300, 65],
+ [33600, 82],
+ [33900, 110],
+ [34200, 110],
+ [34500, 110],
+ [34800, 110],
+ [35100, 110],
+ [35400, 110],
+ [35700, 110],
+ [36000, 111],
+ [36300, 111],
+ [36600, 111],
+ [36900, 111],
+ [37200, 111],
+ [37500, 111],
+ [37800, 111],
+ [38100, 111],
+ [38400, 112],
+ [38700, 112],
+ [39000, 112],
+ [39300, 111],
+ [39600, 111],
+ [39900, 111],
+ [40200, 111],
+ [40500, 111],
+ [40800, 110],
+ [41100, 110],
+ [41400, 110],
+ [41700, 110],
+ [42000, 110],
+ [42300, 110],
+ [42600, 109],
+ [42900, 109],
+ [43200, 109],
+ [43500, 109],
+ [43800, 109],
+ [44100, 109],
+ [44400, 109],
+ [44700, 109],
+ [45000, 109],
+ [45300, 109],
+ [45600, 109],
+ [45900, 110],
+ [46200, 110],
+ [46500, 110],
+ [46800, 110],
+ [47100, 110],
+ [47400, 110],
+ [47700, 110],
+ [48000, 110],
+ [48300, 110],
+ [48600, 110],
+ [48900, 110],
+ [49200, 111],
+ [49501, 110],
+ [49802, 109],
+ [50102, 109],
+ [50403, 108],
+ [50703, 108],
+ [51004, 107],
+ [51305, 106],
+ [51605, 106],
+ [51906, 105],
+ [52206, 105],
+ [52507, 105],
+ [52808, 104],
+ [53108, 104],
+ [53409, 103],
+ [53710, 102],
+ [54010, 102],
+ [54311, 101],
+ [54611, 101],
+ [54912, 100],
+ [55213, 99],
+ [55513, 99],
+ [55814, 99],
+ [56114, 99],
+ [56415, 98],
+ [56716, 97],
+ [57016, 97],
+ [57317, 96],
+ [57617, 96],
+ [57918, 95],
+ [58219, 94],
+ [58519, 94],
+ [58820, 93],
+ [59121, 92],
+ [59421, 93],
+ [59722, 92]
+ ],
+ "point": [56, 152]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.79|+01.32|-01.68",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|-02.00"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [0, 107, 112, 255],
+ "mask": [
+ [31800, 9],
+ [32100, 19],
+ [32400, 29],
+ [32700, 39],
+ [33000, 50],
+ [33300, 65],
+ [33600, 82],
+ [33900, 109],
+ [34200, 109],
+ [34500, 110],
+ [34800, 110],
+ [35100, 110],
+ [35400, 110],
+ [35700, 110],
+ [36000, 110],
+ [36300, 110],
+ [36600, 110],
+ [36900, 111],
+ [37200, 111],
+ [37500, 111],
+ [37800, 111],
+ [38100, 111],
+ [38400, 111],
+ [38700, 111],
+ [39000, 112],
+ [39300, 111],
+ [39600, 111],
+ [39900, 111],
+ [40200, 111],
+ [40500, 111],
+ [40800, 110],
+ [41100, 110],
+ [41400, 110],
+ [41700, 110],
+ [42000, 110],
+ [42300, 110],
+ [42600, 109],
+ [42900, 76],
+ [42990, 19],
+ [43200, 74],
+ [43291, 18],
+ [43500, 72],
+ [43593, 16],
+ [43800, 70],
+ [43894, 15],
+ [44100, 68],
+ [44195, 14],
+ [44400, 67],
+ [44496, 13],
+ [44700, 65],
+ [44797, 12],
+ [45000, 65],
+ [45097, 12],
+ [45300, 64],
+ [45397, 12],
+ [45600, 64],
+ [45697, 12],
+ [45900, 64],
+ [45997, 13],
+ [46200, 42],
+ [46297, 13],
+ [46500, 42],
+ [46597, 13],
+ [46801, 62],
+ [46896, 14],
+ [47102, 60],
+ [47196, 14],
+ [47402, 60],
+ [47496, 14],
+ [47703, 59],
+ [47796, 14],
+ [48000, 1],
+ [48003, 60],
+ [48095, 15],
+ [48300, 1],
+ [48304, 60],
+ [48394, 16],
+ [48600, 2],
+ [48605, 60],
+ [48693, 17],
+ [48900, 3],
+ [48905, 61],
+ [48992, 18],
+ [49200, 3],
+ [49206, 61],
+ [49290, 21],
+ [49500, 4],
+ [49506, 62],
+ [49589, 22],
+ [49800, 4],
+ [49807, 62],
+ [49887, 24],
+ [50100, 5],
+ [50107, 63],
+ [50185, 26],
+ [50400, 6],
+ [50408, 103],
+ [50700, 6],
+ [50709, 102],
+ [51000, 7],
+ [51009, 102],
+ [51300, 7],
+ [51310, 101],
+ [51600, 8],
+ [51610, 101],
+ [51900, 9],
+ [51911, 100],
+ [52200, 9],
+ [52212, 99],
+ [52500, 10],
+ [52512, 100],
+ [52800, 10],
+ [52813, 99],
+ [53100, 11],
+ [53113, 99],
+ [53400, 12],
+ [53414, 98],
+ [53700, 12],
+ [53715, 97],
+ [54000, 13],
+ [54015, 59],
+ [54094, 18],
+ [54300, 13],
+ [54316, 57],
+ [54394, 18],
+ [54600, 14],
+ [54616, 57],
+ [54694, 18],
+ [54900, 15],
+ [54917, 56],
+ [54994, 18],
+ [55200, 15],
+ [55217, 56],
+ [55294, 18],
+ [55500, 16],
+ [55518, 54],
+ [55593, 19],
+ [55800, 16],
+ [55819, 53],
+ [55893, 20],
+ [56100, 17],
+ [56119, 53],
+ [56193, 20],
+ [56400, 17],
+ [56420, 52],
+ [56493, 20],
+ [56700, 18],
+ [56720, 53],
+ [56793, 20],
+ [57000, 19],
+ [57021, 92],
+ [57300, 19],
+ [57322, 91],
+ [57600, 20],
+ [57622, 91],
+ [57900, 20],
+ [57923, 90],
+ [58200, 21],
+ [58223, 90],
+ [58500, 22],
+ [58524, 89],
+ [58800, 22],
+ [59100, 23],
+ [59400, 23],
+ [59700, 23],
+ [60000, 23],
+ [60300, 22],
+ [60600, 22],
+ [60900, 21],
+ [61200, 21],
+ [61500, 21],
+ [61800, 20],
+ [62100, 20],
+ [62400, 19],
+ [62700, 19],
+ [63000, 19],
+ [63300, 18],
+ [63600, 18],
+ [63900, 17],
+ [64200, 17],
+ [64500, 17],
+ [64800, 16],
+ [65100, 16],
+ [65400, 15],
+ [65700, 15],
+ [66000, 14],
+ [66300, 14],
+ [66600, 14],
+ [66900, 13],
+ [67200, 13],
+ [67500, 12],
+ [67800, 12],
+ [68100, 12],
+ [68400, 11],
+ [68700, 11],
+ [69000, 10],
+ [69300, 10],
+ [69600, 10],
+ [69900, 9],
+ [70200, 9],
+ [70500, 8],
+ [70800, 8],
+ [71100, 8],
+ [71400, 7],
+ [71700, 7],
+ [72000, 6],
+ [72300, 6],
+ [72600, 5],
+ [72900, 5],
+ [73200, 5],
+ [73500, 4],
+ [73800, 4],
+ [74100, 3],
+ [74400, 3],
+ [74700, 3],
+ [75000, 2],
+ [75300, 2],
+ [75600, 1],
+ [75900, 1],
+ [76200, 1]
+ ],
+ "point": [56, 180]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-01.46|+00.78|-02.00"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [0, 107, 120, 255],
+ "mask": [
+ [31800, 9],
+ [32100, 19],
+ [32400, 29],
+ [32700, 39],
+ [33000, 50],
+ [33300, 65],
+ [33600, 82],
+ [33900, 109],
+ [34200, 109],
+ [34500, 110],
+ [34800, 110],
+ [35100, 110],
+ [35400, 110],
+ [35700, 110],
+ [36000, 110],
+ [36300, 110],
+ [36600, 110],
+ [36900, 111],
+ [37200, 111],
+ [37500, 111],
+ [37800, 111],
+ [38100, 111],
+ [38400, 111],
+ [38700, 111],
+ [39000, 112],
+ [39300, 112],
+ [39600, 112],
+ [39900, 112],
+ [40200, 112],
+ [40500, 112],
+ [40800, 112],
+ [41100, 113],
+ [41400, 91],
+ [41496, 17],
+ [41700, 91],
+ [41796, 17],
+ [42000, 91],
+ [42096, 17],
+ [42300, 91],
+ [42396, 17],
+ [42600, 92],
+ [42696, 17],
+ [42900, 76],
+ [42990, 2],
+ [42997, 16],
+ [43200, 74],
+ [43291, 1],
+ [43297, 16],
+ [43500, 72],
+ [43597, 17],
+ [43800, 70],
+ [43897, 17],
+ [44100, 68],
+ [44199, 15],
+ [44400, 67],
+ [44500, 14],
+ [44700, 65],
+ [44801, 13],
+ [45000, 65],
+ [45102, 12],
+ [45300, 64],
+ [45403, 11],
+ [45600, 64],
+ [45703, 12],
+ [45900, 64],
+ [46003, 12],
+ [46200, 42],
+ [46303, 12],
+ [46500, 42],
+ [46604, 11],
+ [46801, 62],
+ [46904, 11],
+ [47102, 60],
+ [47204, 11],
+ [47402, 60],
+ [47504, 11],
+ [47703, 59],
+ [47804, 12],
+ [48000, 1],
+ [48003, 60],
+ [48104, 12],
+ [48300, 1],
+ [48304, 60],
+ [48405, 11],
+ [48600, 2],
+ [48605, 60],
+ [48705, 11],
+ [48900, 3],
+ [48905, 61],
+ [49005, 11],
+ [49200, 3],
+ [49206, 61],
+ [49290, 2],
+ [49305, 11],
+ [49500, 4],
+ [49506, 62],
+ [49589, 3],
+ [49605, 11],
+ [49800, 4],
+ [49807, 62],
+ [49887, 5],
+ [49905, 12],
+ [50100, 5],
+ [50107, 63],
+ [50185, 8],
+ [50206, 11],
+ [50400, 6],
+ [50408, 85],
+ [50506, 11],
+ [50700, 6],
+ [50709, 84],
+ [50806, 11],
+ [51000, 7],
+ [51009, 84],
+ [51106, 11],
+ [51300, 7],
+ [51310, 84],
+ [51406, 11],
+ [51600, 8],
+ [51610, 84],
+ [51706, 11],
+ [51900, 9],
+ [51911, 83],
+ [52005, 12],
+ [52200, 9],
+ [52212, 83],
+ [52305, 13],
+ [52500, 10],
+ [52512, 84],
+ [52603, 15],
+ [52800, 10],
+ [52813, 86],
+ [52900, 18],
+ [53100, 11],
+ [53113, 105],
+ [53400, 12],
+ [53414, 104],
+ [53700, 12],
+ [53715, 103],
+ [54000, 13],
+ [54015, 59],
+ [54094, 24],
+ [54300, 13],
+ [54316, 57],
+ [54394, 25],
+ [54600, 14],
+ [54616, 57],
+ [54694, 25],
+ [54900, 15],
+ [54917, 56],
+ [54994, 25],
+ [55200, 15],
+ [55217, 56],
+ [55294, 25],
+ [55500, 16],
+ [55518, 54],
+ [55593, 26],
+ [55800, 16],
+ [55819, 53],
+ [55893, 26],
+ [56100, 17],
+ [56119, 53],
+ [56193, 26],
+ [56400, 17],
+ [56420, 52],
+ [56493, 27],
+ [56700, 18],
+ [56720, 53],
+ [56793, 27],
+ [57000, 19],
+ [57021, 99],
+ [57300, 19],
+ [57322, 98],
+ [57600, 20],
+ [57622, 98],
+ [57900, 20],
+ [57923, 97],
+ [58200, 21],
+ [58223, 97],
+ [58500, 22],
+ [58524, 97],
+ [58800, 22],
+ [59100, 23],
+ [59400, 23],
+ [59700, 23],
+ [60000, 23],
+ [60300, 22],
+ [60600, 22],
+ [60900, 21],
+ [61200, 21],
+ [61500, 21],
+ [61800, 20],
+ [62100, 20],
+ [62400, 19],
+ [62700, 19],
+ [63000, 19],
+ [63300, 18],
+ [63600, 18],
+ [63900, 17],
+ [64200, 17],
+ [64500, 17],
+ [64800, 16],
+ [65100, 16],
+ [65400, 15],
+ [65700, 15],
+ [66000, 14],
+ [66300, 14],
+ [66600, 14],
+ [66900, 13],
+ [67200, 13],
+ [67500, 12],
+ [67800, 12],
+ [68100, 12],
+ [68400, 11],
+ [68700, 11],
+ [69000, 10],
+ [69300, 10],
+ [69600, 10],
+ [69900, 9],
+ [70200, 9],
+ [70500, 8],
+ [70800, 8],
+ [71100, 8],
+ [71400, 7],
+ [71700, 7],
+ [72000, 6],
+ [72300, 6],
+ [72600, 5],
+ [72900, 5],
+ [73200, 5],
+ [73500, 4],
+ [73800, 4],
+ [74100, 3],
+ [74400, 3],
+ [74700, 3],
+ [75000, 2],
+ [75300, 2],
+ [75600, 1],
+ [75900, 1],
+ [76200, 1]
+ ],
+ "point": [60, 180]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.36|+01.32|-00.80"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [92, 1, 146, 132],
+ "mask": [
+ [102, 23],
+ [402, 23],
+ [703, 22],
+ [1003, 22],
+ [1303, 22],
+ [1603, 22],
+ [1903, 22],
+ [2203, 22],
+ [2503, 23],
+ [2803, 23],
+ [3103, 24],
+ [3403, 25],
+ [3703, 25],
+ [4002, 27],
+ [4302, 28],
+ [4601, 30],
+ [4901, 31],
+ [5200, 32],
+ [5500, 33],
+ [5799, 35],
+ [6099, 36],
+ [6398, 38],
+ [6698, 38],
+ [6997, 40],
+ [7297, 41],
+ [7596, 43],
+ [7896, 43],
+ [8196, 44],
+ [8495, 46],
+ [8795, 47],
+ [9094, 48],
+ [9394, 49],
+ [9693, 50],
+ [9993, 50],
+ [10292, 52],
+ [10592, 52],
+ [10892, 52],
+ [11192, 53],
+ [11492, 53],
+ [11792, 53],
+ [12092, 53],
+ [12392, 53],
+ [12692, 54],
+ [12992, 54],
+ [13292, 54],
+ [13592, 54],
+ [13892, 54],
+ [14192, 54],
+ [14492, 54],
+ [14792, 54],
+ [15092, 54],
+ [15392, 54],
+ [15693, 53],
+ [15993, 53],
+ [16293, 53],
+ [16593, 53],
+ [16894, 52],
+ [17194, 52],
+ [17494, 52],
+ [17794, 52],
+ [18094, 52],
+ [18395, 51],
+ [18695, 51],
+ [18995, 51],
+ [19295, 51],
+ [19596, 50],
+ [19896, 50],
+ [20196, 51],
+ [20496, 51],
+ [20797, 50],
+ [21097, 50],
+ [21397, 50],
+ [21697, 50],
+ [21997, 50],
+ [22298, 49],
+ [22598, 49],
+ [22898, 49],
+ [23198, 49],
+ [23499, 48],
+ [23799, 48],
+ [24099, 48],
+ [24399, 48],
+ [24700, 47],
+ [25000, 47],
+ [25300, 47],
+ [25600, 47],
+ [25900, 47],
+ [26201, 46],
+ [26501, 46],
+ [26801, 46],
+ [27101, 46],
+ [27402, 45],
+ [27702, 45],
+ [28002, 45],
+ [28302, 45],
+ [28603, 44],
+ [28903, 44],
+ [29203, 44],
+ [29503, 44],
+ [29803, 44],
+ [30104, 43],
+ [30404, 43],
+ [30704, 43],
+ [31004, 43],
+ [31305, 42],
+ [31605, 42],
+ [31905, 42],
+ [32205, 42],
+ [32506, 41],
+ [32806, 41],
+ [33106, 41],
+ [33406, 41],
+ [33706, 41],
+ [34007, 40],
+ [34307, 40],
+ [34607, 40],
+ [34907, 40],
+ [35208, 39],
+ [35508, 38],
+ [35808, 38],
+ [36109, 36],
+ [36409, 36],
+ [36709, 35],
+ [37010, 34],
+ [37311, 32],
+ [37612, 30],
+ [37913, 28],
+ [38214, 26],
+ [38516, 22],
+ [38817, 19],
+ [39120, 13],
+ [39426, 2]
+ ],
+ "point": [119, 65]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-01.46|+00.78|-02.00"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [0, 107, 118, 200],
+ "mask": [
+ [31800, 9],
+ [32100, 19],
+ [32400, 29],
+ [32700, 39],
+ [33000, 50],
+ [33300, 65],
+ [33600, 82],
+ [33900, 110],
+ [34200, 110],
+ [34500, 110],
+ [34800, 110],
+ [35100, 110],
+ [35400, 110],
+ [35700, 110],
+ [36000, 111],
+ [36300, 111],
+ [36600, 111],
+ [36900, 111],
+ [37200, 111],
+ [37500, 111],
+ [37800, 111],
+ [38100, 111],
+ [38400, 112],
+ [38700, 112],
+ [39000, 112],
+ [39300, 112],
+ [39600, 112],
+ [39900, 112],
+ [40200, 112],
+ [40500, 113],
+ [40800, 113],
+ [41100, 113],
+ [41400, 113],
+ [41700, 112],
+ [42000, 113],
+ [42300, 113],
+ [42600, 114],
+ [42900, 114],
+ [43200, 114],
+ [43500, 114],
+ [43800, 114],
+ [44100, 114],
+ [44400, 114],
+ [44700, 114],
+ [45000, 115],
+ [45300, 115],
+ [45600, 115],
+ [45900, 115],
+ [46200, 115],
+ [46500, 115],
+ [46800, 115],
+ [47100, 116],
+ [47400, 116],
+ [47700, 114],
+ [47815, 1],
+ [48000, 114],
+ [48115, 1],
+ [48300, 116],
+ [48600, 115],
+ [48900, 115],
+ [49200, 115],
+ [49316, 1],
+ [49501, 114],
+ [49802, 114],
+ [50102, 114],
+ [50403, 113],
+ [50703, 113],
+ [51004, 113],
+ [51305, 112],
+ [51605, 112],
+ [51906, 111],
+ [52206, 111],
+ [52507, 111],
+ [52808, 110],
+ [53108, 110],
+ [53409, 109],
+ [53710, 109],
+ [54010, 109],
+ [54311, 108],
+ [54611, 108],
+ [54912, 107],
+ [55213, 106],
+ [55513, 105],
+ [55814, 102],
+ [56114, 101],
+ [56415, 99],
+ [56716, 97],
+ [57016, 96],
+ [57317, 94],
+ [57617, 93],
+ [57918, 91],
+ [58219, 89],
+ [58519, 89],
+ [58820, 87],
+ [59121, 85],
+ [59421, 84],
+ [59722, 83]
+ ],
+ "point": [59, 152]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.36|+01.32|-00.80",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|-02.00"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [0, 107, 118, 255],
+ "mask": [
+ [31800, 9],
+ [32100, 19],
+ [32400, 29],
+ [32700, 39],
+ [33000, 50],
+ [33300, 65],
+ [33600, 82],
+ [33900, 109],
+ [34200, 109],
+ [34500, 110],
+ [34800, 110],
+ [35100, 110],
+ [35400, 110],
+ [35700, 110],
+ [36000, 110],
+ [36300, 110],
+ [36600, 110],
+ [36900, 111],
+ [37200, 111],
+ [37500, 111],
+ [37800, 111],
+ [38100, 111],
+ [38400, 111],
+ [38700, 111],
+ [39000, 112],
+ [39300, 112],
+ [39600, 112],
+ [39900, 112],
+ [40200, 112],
+ [40500, 112],
+ [40800, 112],
+ [41100, 113],
+ [41400, 91],
+ [41496, 17],
+ [41700, 91],
+ [41796, 16],
+ [42000, 91],
+ [42096, 17],
+ [42300, 91],
+ [42396, 17],
+ [42600, 92],
+ [42696, 17],
+ [42900, 76],
+ [42990, 2],
+ [42997, 16],
+ [43200, 74],
+ [43291, 1],
+ [43297, 16],
+ [43500, 72],
+ [43597, 17],
+ [43800, 70],
+ [43897, 17],
+ [44100, 68],
+ [44199, 15],
+ [44400, 67],
+ [44500, 14],
+ [44700, 65],
+ [44801, 13],
+ [45000, 65],
+ [45102, 12],
+ [45300, 64],
+ [45403, 11],
+ [45600, 64],
+ [45703, 12],
+ [45900, 64],
+ [46003, 12],
+ [46200, 42],
+ [46303, 12],
+ [46500, 42],
+ [46604, 11],
+ [46801, 62],
+ [46904, 11],
+ [47102, 60],
+ [47204, 11],
+ [47402, 60],
+ [47504, 11],
+ [47703, 59],
+ [47804, 10],
+ [47815, 1],
+ [48000, 1],
+ [48003, 60],
+ [48104, 10],
+ [48115, 1],
+ [48300, 1],
+ [48304, 60],
+ [48405, 11],
+ [48600, 2],
+ [48605, 60],
+ [48705, 10],
+ [48900, 3],
+ [48905, 61],
+ [49005, 10],
+ [49200, 3],
+ [49206, 61],
+ [49290, 2],
+ [49305, 10],
+ [49500, 4],
+ [49506, 62],
+ [49589, 3],
+ [49605, 10],
+ [49800, 4],
+ [49807, 62],
+ [49887, 5],
+ [49905, 11],
+ [50100, 5],
+ [50107, 63],
+ [50185, 8],
+ [50206, 10],
+ [50400, 6],
+ [50408, 85],
+ [50506, 10],
+ [50700, 6],
+ [50709, 84],
+ [50806, 10],
+ [51000, 7],
+ [51009, 84],
+ [51106, 11],
+ [51300, 7],
+ [51310, 84],
+ [51406, 11],
+ [51600, 8],
+ [51610, 84],
+ [51706, 11],
+ [51900, 9],
+ [51911, 83],
+ [52005, 12],
+ [52200, 9],
+ [52212, 83],
+ [52305, 12],
+ [52500, 10],
+ [52512, 84],
+ [52603, 15],
+ [52800, 10],
+ [52813, 86],
+ [52900, 18],
+ [53100, 11],
+ [53113, 105],
+ [53400, 12],
+ [53414, 104],
+ [53700, 12],
+ [53715, 103],
+ [54000, 13],
+ [54015, 59],
+ [54094, 24],
+ [54300, 13],
+ [54316, 57],
+ [54394, 25],
+ [54600, 14],
+ [54616, 57],
+ [54694, 25],
+ [54900, 15],
+ [54917, 56],
+ [54994, 25],
+ [55200, 15],
+ [55217, 56],
+ [55294, 25],
+ [55500, 16],
+ [55518, 54],
+ [55593, 25],
+ [55800, 16],
+ [55819, 53],
+ [55893, 23],
+ [56100, 17],
+ [56119, 53],
+ [56193, 22],
+ [56400, 17],
+ [56420, 52],
+ [56493, 21],
+ [56700, 18],
+ [56720, 53],
+ [56793, 20],
+ [57000, 19],
+ [57021, 91],
+ [57300, 19],
+ [57322, 89],
+ [57600, 20],
+ [57622, 88],
+ [57900, 20],
+ [57923, 86],
+ [58200, 21],
+ [58223, 85],
+ [58500, 22],
+ [58524, 84],
+ [58800, 22],
+ [59100, 23],
+ [59400, 23],
+ [59700, 23],
+ [60000, 23],
+ [60300, 22],
+ [60600, 22],
+ [60900, 21],
+ [61200, 21],
+ [61500, 21],
+ [61800, 20],
+ [62100, 20],
+ [62400, 19],
+ [62700, 19],
+ [63000, 19],
+ [63300, 18],
+ [63600, 18],
+ [63900, 17],
+ [64200, 17],
+ [64500, 17],
+ [64800, 16],
+ [65100, 16],
+ [65400, 15],
+ [65700, 15],
+ [66000, 14],
+ [66300, 14],
+ [66600, 14],
+ [66900, 13],
+ [67200, 13],
+ [67500, 12],
+ [67800, 12],
+ [68100, 12],
+ [68400, 11],
+ [68700, 11],
+ [69000, 10],
+ [69300, 10],
+ [69600, 10],
+ [69900, 9],
+ [70200, 9],
+ [70500, 8],
+ [70800, 8],
+ [71100, 8],
+ [71400, 7],
+ [71700, 7],
+ [72000, 6],
+ [72300, 6],
+ [72600, 5],
+ [72900, 5],
+ [73200, 5],
+ [73500, 4],
+ [73800, 4],
+ [74100, 3],
+ [74400, 3],
+ [74700, 3],
+ [75000, 2],
+ [75300, 2],
+ [75600, 1],
+ [75900, 1],
+ [76200, 1]
+ ],
+ "point": [59, 180]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-01.46|+00.78|-02.00"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [0, 107, 120, 255],
+ "mask": [
+ [31800, 9],
+ [32100, 19],
+ [32400, 29],
+ [32700, 39],
+ [33000, 50],
+ [33300, 65],
+ [33600, 82],
+ [33900, 109],
+ [34200, 109],
+ [34500, 110],
+ [34800, 110],
+ [35100, 110],
+ [35400, 110],
+ [35700, 110],
+ [36000, 110],
+ [36300, 110],
+ [36600, 110],
+ [36900, 111],
+ [37200, 111],
+ [37500, 111],
+ [37800, 111],
+ [38100, 111],
+ [38400, 111],
+ [38700, 111],
+ [39000, 112],
+ [39300, 112],
+ [39600, 112],
+ [39900, 112],
+ [40200, 112],
+ [40500, 112],
+ [40800, 112],
+ [41100, 113],
+ [41400, 91],
+ [41496, 17],
+ [41700, 91],
+ [41796, 17],
+ [42000, 91],
+ [42096, 17],
+ [42300, 91],
+ [42396, 17],
+ [42600, 92],
+ [42696, 17],
+ [42900, 76],
+ [42990, 2],
+ [42997, 16],
+ [43200, 74],
+ [43291, 1],
+ [43297, 10],
+ [43309, 4],
+ [43500, 72],
+ [43597, 9],
+ [43610, 4],
+ [43800, 70],
+ [43897, 8],
+ [43910, 4],
+ [44100, 68],
+ [44199, 7],
+ [44210, 4],
+ [44400, 67],
+ [44500, 6],
+ [44511, 3],
+ [44700, 65],
+ [44801, 5],
+ [44811, 3],
+ [45000, 65],
+ [45102, 4],
+ [45111, 3],
+ [45300, 64],
+ [45403, 3],
+ [45411, 3],
+ [45600, 64],
+ [45703, 3],
+ [45711, 4],
+ [45900, 64],
+ [46003, 3],
+ [46012, 3],
+ [46200, 42],
+ [46303, 3],
+ [46313, 2],
+ [46500, 42],
+ [46604, 2],
+ [46801, 62],
+ [46904, 1],
+ [47102, 60],
+ [47402, 60],
+ [47703, 59],
+ [48000, 1],
+ [48003, 60],
+ [48300, 1],
+ [48304, 60],
+ [48600, 2],
+ [48605, 60],
+ [48900, 3],
+ [48905, 61],
+ [49200, 3],
+ [49206, 61],
+ [49290, 2],
+ [49500, 4],
+ [49506, 62],
+ [49589, 3],
+ [49800, 4],
+ [49807, 62],
+ [49887, 5],
+ [50100, 5],
+ [50107, 63],
+ [50185, 8],
+ [50400, 6],
+ [50408, 85],
+ [50700, 6],
+ [50709, 84],
+ [51000, 7],
+ [51009, 84],
+ [51300, 7],
+ [51310, 84],
+ [51600, 8],
+ [51610, 84],
+ [51900, 9],
+ [51911, 83],
+ [52005, 1],
+ [52200, 9],
+ [52212, 83],
+ [52305, 1],
+ [52500, 10],
+ [52512, 84],
+ [52603, 3],
+ [52800, 10],
+ [52813, 86],
+ [52900, 6],
+ [53100, 11],
+ [53113, 93],
+ [53400, 12],
+ [53414, 92],
+ [53700, 12],
+ [53715, 92],
+ [54000, 13],
+ [54015, 59],
+ [54094, 13],
+ [54300, 13],
+ [54316, 57],
+ [54394, 14],
+ [54417, 2],
+ [54600, 14],
+ [54616, 57],
+ [54694, 15],
+ [54716, 3],
+ [54900, 15],
+ [54917, 56],
+ [54994, 25],
+ [55200, 15],
+ [55217, 56],
+ [55294, 25],
+ [55500, 16],
+ [55518, 54],
+ [55593, 26],
+ [55800, 16],
+ [55819, 53],
+ [55893, 26],
+ [56100, 17],
+ [56119, 53],
+ [56193, 26],
+ [56400, 17],
+ [56420, 52],
+ [56493, 27],
+ [56700, 18],
+ [56720, 53],
+ [56793, 27],
+ [57000, 19],
+ [57021, 99],
+ [57300, 19],
+ [57322, 98],
+ [57600, 20],
+ [57622, 98],
+ [57900, 20],
+ [57923, 97],
+ [58200, 21],
+ [58223, 97],
+ [58500, 22],
+ [58524, 97],
+ [58800, 22],
+ [59100, 23],
+ [59400, 23],
+ [59700, 23],
+ [60000, 23],
+ [60300, 22],
+ [60600, 22],
+ [60900, 21],
+ [61200, 21],
+ [61500, 21],
+ [61800, 20],
+ [62100, 20],
+ [62400, 19],
+ [62700, 19],
+ [63000, 19],
+ [63300, 18],
+ [63600, 18],
+ [63900, 17],
+ [64200, 17],
+ [64500, 17],
+ [64800, 16],
+ [65100, 16],
+ [65400, 15],
+ [65700, 15],
+ [66000, 14],
+ [66300, 14],
+ [66600, 14],
+ [66900, 13],
+ [67200, 13],
+ [67500, 12],
+ [67800, 12],
+ [68100, 12],
+ [68400, 11],
+ [68700, 11],
+ [69000, 10],
+ [69300, 10],
+ [69600, 10],
+ [69900, 9],
+ [70200, 9],
+ [70500, 8],
+ [70800, 8],
+ [71100, 8],
+ [71400, 7],
+ [71700, 7],
+ [72000, 6],
+ [72300, 6],
+ [72600, 5],
+ [72900, 5],
+ [73200, 5],
+ [73500, 4],
+ [73800, 4],
+ [74100, 3],
+ [74400, 3],
+ [74700, 3],
+ [75000, 2],
+ [75300, 2],
+ [75600, 1],
+ [75900, 1],
+ [76200, 1]
+ ],
+ "point": [60, 180]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan3",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 0,
+ "x": -0.75,
+ "y": 1.12401652,
+ "z": -0.5
+ },
+ "object_poses": [
+ {
+ "objectName": "Potato_e8912d85",
+ "position": {
+ "x": 1.21390212,
+ "y": 1.35016418,
+ "z": 0.861989737
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.000183,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_a15664d1",
+ "position": {
+ "x": -1.82631838,
+ "y": 1.050614,
+ "z": -0.633444369
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_a15664d1",
+ "position": {
+ "x": 0.900508642,
+ "y": 0.344535828,
+ "z": -1.85446763
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_560d3534",
+ "position": {
+ "x": -1.79031563,
+ "y": 1.32392883,
+ "z": -1.68147337
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_560d3534",
+ "position": {
+ "x": -1.363688,
+ "y": 1.32392883,
+ "z": -0.8012903
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_299f2c2a",
+ "position": {
+ "x": -0.749,
+ "y": 1.3324,
+ "z": -2.973
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_61df51be",
+ "position": {
+ "x": 0.896088362,
+ "y": 1.32354856,
+ "z": -0.942471862
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_61df51be",
+ "position": {
+ "x": -1.77246583,
+ "y": 0.420569718,
+ "z": -1.348922
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_e0793d4c",
+ "position": {
+ "x": 0.9420974,
+ "y": 0.74398917,
+ "z": 0.6820053
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_f0a2d64c",
+ "position": {
+ "x": -1.82652426,
+ "y": 1.34814167,
+ "z": -1.04922915
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_7c718722",
+ "position": {
+ "x": 0.6347654,
+ "y": 1.36382449,
+ "z": -2.67849255
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_7c718722",
+ "position": {
+ "x": -1.82631838,
+ "y": 1.09187412,
+ "z": -0.4510209
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_f306e730",
+ "position": {
+ "x": 0.896088362,
+ "y": 1.32039762,
+ "z": -2.05370474
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_f306e730",
+ "position": {
+ "x": -1.6980927,
+ "y": 1.04844725,
+ "z": -0.542232633
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_d5570300",
+ "position": {
+ "x": -2.04982066,
+ "y": 1.323614,
+ "z": -2.981163
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_d5570300",
+ "position": {
+ "x": 1.05303526,
+ "y": 0.345585465,
+ "z": -2.1643877
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_bee62bfa",
+ "position": {
+ "x": 0.6365833,
+ "y": 1.35270047,
+ "z": -2.05370474
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_cf9afd50",
+ "position": {
+ "x": -1.73021924,
+ "y": 0.420213044,
+ "z": -0.233189613
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_cf9afd50",
+ "position": {
+ "x": 0.976771951,
+ "y": 0.345163345,
+ "z": -1.9577744
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_c15f34b3",
+ "position": {
+ "x": -1.75051689,
+ "y": 0.338814139,
+ "z": 1.21397424
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_b5e01a1e",
+ "position": {
+ "x": -1.66056311,
+ "y": 1.39912164,
+ "z": -2.72122478
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_b5e01a1e",
+ "position": {
+ "x": 1.02584076,
+ "y": 1.39912164,
+ "z": -2.42411566
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_259b36f2",
+ "position": {
+ "x": 1.02731991,
+ "y": 1.20279992,
+ "z": 1.23849058
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_259b36f2",
+ "position": {
+ "x": 0.9710001,
+ "y": 1.51951933,
+ "z": 1.601027
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_e84ad935",
+ "position": {
+ "x": 0.977774739,
+ "y": 1.72400379,
+ "z": 1.54570937
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_e84ad935",
+ "position": {
+ "x": -1.61049628,
+ "y": 0.32906872,
+ "z": 2.151774
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_dd060264",
+ "position": {
+ "x": 0.420673847,
+ "y": 1.39739525,
+ "z": -3.12197924
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_930b560d",
+ "position": {
+ "x": -1.5771203,
+ "y": 1.31039941,
+ "z": -1.58406281
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_bee62bfa",
+ "position": {
+ "x": -1.53080976,
+ "y": 1.35270047,
+ "z": 1.4197371
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_eef34b87",
+ "position": {
+ "x": 0.9202187,
+ "y": 1.52282739,
+ "z": 1.78658581
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_e8912d85",
+ "position": {
+ "x": -1.95454407,
+ "y": 1.09080327,
+ "z": -0.496626765
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_cf9afd50",
+ "position": {
+ "x": 0.77839607,
+ "y": 1.20799184,
+ "z": 1.23849058
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_61df51be",
+ "position": {
+ "x": -1.91546834,
+ "y": 1.33600366,
+ "z": -1.25536227
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_f306e730",
+ "position": {
+ "x": -1.82652426,
+ "y": 1.33053935,
+ "z": -0.9805181
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_299f2c2a",
+ "position": {
+ "x": -1.38003659,
+ "y": 1.32404137,
+ "z": -3.09262371
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_7c718722",
+ "position": {
+ "x": 1.07256269,
+ "y": 1.56534374,
+ "z": 1.477321
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pan_9d168802",
+ "position": {
+ "x": -1.88114953,
+ "y": 0.327762932,
+ "z": -2.03532434
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_b13b6e3e",
+ "position": {
+ "x": 0.5634017,
+ "y": 1.31800008,
+ "z": -3.12197924
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_560d3534",
+ "position": {
+ "x": -2.04982138,
+ "y": 1.32392883,
+ "z": 1.4197371
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_b5e01a1e",
+ "position": {
+ "x": -1.40105808,
+ "y": 1.39912164,
+ "z": -2.461287
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_f0a2d64c",
+ "position": {
+ "x": 0.6365833,
+ "y": 1.33799994,
+ "z": -0.942471862
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PaperTowelRoll_ddd73f57",
+ "position": {
+ "x": -1.53081059,
+ "y": 1.42728543,
+ "z": -1.94141138
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_93b30017",
+ "position": {
+ "x": 0.9777747,
+ "y": 1.70904112,
+ "z": 1.7224071
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_d5570300",
+ "position": {
+ "x": -1.79031563,
+ "y": 1.323614,
+ "z": 1.094923
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_c15f34b3",
+ "position": {
+ "x": 1.1555934,
+ "y": 1.31800008,
+ "z": -2.05370474
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_a15664d1",
+ "position": {
+ "x": -1.602987,
+ "y": 0.343378425,
+ "z": -1.9633193
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_e0793d4c",
+ "position": {
+ "x": 0.492037773,
+ "y": 1.32412946,
+ "z": -2.78936434
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_e84ad935",
+ "position": {
+ "x": 1.11572385,
+ "y": 1.3592943,
+ "z": 0.9650381
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.000183,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_259b36f2",
+ "position": {
+ "x": -1.0945816,
+ "y": 1.318,
+ "z": -3.31436586
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 2963035192,
+ "scene_num": 3
+ },
+ "task_id": "trial_T20190909_074653_538268",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A3F7G1FSFWQPLE_31LVTDXBLA1Y1INV3J022TA2KNYLRV",
+ "high_descs": [
+ "Turn around and walk towards the oven, then turn right and walk up to the counter.",
+ "Pick up the glass bottle off of the counter.",
+ "Turn right and walk forward, then turn right and walk forward, then turn around.",
+ "Open the black lower cabinet door in front of you and put the glass bottle inside, then close the cabinet.",
+ "Walk up to the kitchen sink.",
+ "Pick up the glass bottle off of the counter in front of the sink.",
+ "Turn around and walk forward, then turn right and walk forward and turn right to face the counter.",
+ "Open the black lower cabinet door in front of you and put the glass bottle inside, then close the cabinet."
+ ],
+ "task_desc": "Move two glass bottles into a cabinet.",
+ "votes": [1, 1, 1, 1, 1]
+ },
+ {
+ "assignment_id": "A1HKHM4NVAO98H_39DD6S19JS2TX3ZUWE7BB1MHK6NEZZ",
+ "high_descs": [
+ "turn around and walk over to the kitchen counter on the left side of the kitchen sink to your right",
+ "grab the bottle of wine off of the kitchen counter there",
+ "turn around to back up a bit and face the kitchen counter again",
+ "place the bottle of wine in the bottom left cabinet under the kitchen counter",
+ "turn right and walk over to the kitchen sink on your left",
+ "grab the bottle of wine off of the kitchen sink counter there",
+ "turn around to back up a bit and face the kitchen counter to the left of the sink again",
+ "place the bottle of wine inside of the kitchen cabinet to the bottom left of the sink"
+ ],
+ "task_desc": "place two bottles of wine inside of the kitchen cabinet to the bottom left of the sink",
+ "votes": [1, 1, 1, 1, 1]
+ },
+ {
+ "assignment_id": "A31681CCEVDIH3_3TMFV4NEPB58U7KY8O14KNWDS6G8W9",
+ "high_descs": [
+ "Make a right to right the countertop to the left of the sink.",
+ "Pick up the green bottle behind the black pot.",
+ "Turn to face the cabinet directly below the paper towel roll.",
+ "Place the green bottle in the cabinet.",
+ "Turn to face the sink.",
+ "Pick up the green bottle in front of the sink.",
+ "Turn left to face the cabinet directly below the paper towel roll.",
+ "Put the other green bottle in the cabinet."
+ ],
+ "task_desc": "Put two green bottles away in a cabinet below the roll of paper towels.",
+ "votes": [1, 1, 0]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074805_916625/traj_data.json b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074805_916625/traj_data.json
new file mode 100644
index 0000000..dc2c4dd
--- /dev/null
+++ b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-Cabinet-3/trial_T20190909_074805_916625/traj_data.json
@@ -0,0 +1,4584 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000048.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000049.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000050.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000051.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000052.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000053.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000054.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000055.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000056.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000057.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000058.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000059.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000060.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000061.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000062.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000063.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000064.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000065.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000066.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000067.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000068.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000069.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000070.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000071.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000072.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000073.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000074.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000075.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000076.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000077.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000078.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000079.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000080.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000081.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000082.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000083.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000084.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000085.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000086.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000087.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000088.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000089.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000090.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000116.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000117.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000118.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000119.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000120.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000121.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000122.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000123.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000124.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000125.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000126.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000127.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000128.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000129.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000130.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000131.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000132.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000133.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000134.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000135.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000136.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000137.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000138.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000139.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000140.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000141.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000142.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000143.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000144.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000145.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000146.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000147.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000148.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000149.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000150.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000151.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000152.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000153.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000154.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000155.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000156.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000157.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000158.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000159.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000160.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000161.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000162.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000163.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000164.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000165.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000166.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000167.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000168.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000169.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000170.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000171.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000172.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000173.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000174.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000175.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000176.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000177.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000178.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000179.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000180.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000181.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000182.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000183.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000184.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000185.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000186.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000187.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000188.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000189.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000190.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000191.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000192.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000193.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000194.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000195.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000196.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000197.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000198.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000199.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000200.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000201.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000202.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000203.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000204.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000205.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000206.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000207.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000208.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000209.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000210.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000211.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000212.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000213.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000214.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000215.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000216.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000217.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000218.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000219.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000220.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000221.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000222.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000223.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000224.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000225.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000226.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000227.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000228.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000229.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000230.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000231.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000232.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000233.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000234.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000235.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000236.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000237.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000238.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000239.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000240.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000241.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000242.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000243.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000244.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000245.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000246.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000247.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000248.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000249.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000250.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000251.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000252.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000253.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000254.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000255.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000256.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000257.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000258.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000259.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000260.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000261.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000262.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000263.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000264.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000265.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000266.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000267.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000268.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000269.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000270.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000271.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000272.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000273.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000274.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000275.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000276.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000277.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000278.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000279.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000280.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000281.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000282.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000283.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000284.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000285.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000286.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000287.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000288.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000289.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000290.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000291.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000292.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000293.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000294.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000295.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000296.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000297.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000298.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000299.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000300.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000301.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000302.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000303.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000304.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000305.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000306.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000307.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000308.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000309.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000310.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000311.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000312.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000313.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000314.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000315.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000316.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000317.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000318.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000319.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000320.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000321.png",
+ "low_idx": 58
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "WineBottle",
+ "parent_target": "Cabinet",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["countertop"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-4|-9|2|30"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -4.3783264, -4.3783264, -13.25746344, -13.25746344, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "CounterTop",
+ [-7.236, -7.236, 4.728, 4.728, 5.434, 5.434]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.09|+01.32|-03.31"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|0|3|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -4.3783264, -4.3783264, -13.25746344, -13.25746344, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [-5.84518432, -5.84518432, 1.8804, 1.8804, 3.100034236, 3.100034236]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.09|+01.32|-03.31",
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|+00.47"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["countertop"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-4|2|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.60422756, -5.60422756, 1.781179904, 1.781179904, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "CounterTop",
+ [-7.236, -7.236, 4.728, 4.728, 5.434, 5.434]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.40|+01.32|+00.45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|0|3|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "cabinet"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.60422756, -5.60422756, 1.781179904, 1.781179904, 5.29571532,
+ 5.29571532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [-5.84518432, -5.84518432, 1.8804, 1.8804, 3.100034236, 3.100034236]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.40|+01.32|+00.45",
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|+00.47"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.09|+01.32|-03.31"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [161, 46, 183, 127],
+ "mask": [
+ [13671, 8],
+ [13971, 7],
+ [14271, 7],
+ [14571, 7],
+ [14871, 7],
+ [15171, 7],
+ [15471, 7],
+ [15770, 8],
+ [16070, 8],
+ [16370, 8],
+ [16670, 8],
+ [16970, 8],
+ [17270, 8],
+ [17570, 8],
+ [17870, 8],
+ [18170, 8],
+ [18470, 8],
+ [18770, 8],
+ [19070, 8],
+ [19370, 8],
+ [19670, 8],
+ [19969, 9],
+ [20268, 11],
+ [20568, 11],
+ [20867, 13],
+ [21167, 13],
+ [21466, 15],
+ [21765, 16],
+ [22065, 17],
+ [22364, 19],
+ [22663, 20],
+ [22963, 20],
+ [23263, 21],
+ [23563, 21],
+ [23862, 22],
+ [24162, 22],
+ [24462, 22],
+ [24762, 22],
+ [25062, 22],
+ [25362, 22],
+ [25662, 22],
+ [25962, 22],
+ [26262, 22],
+ [26562, 21],
+ [26862, 21],
+ [27162, 21],
+ [27462, 21],
+ [27762, 21],
+ [28062, 21],
+ [28362, 21],
+ [28662, 21],
+ [28962, 21],
+ [29262, 21],
+ [29562, 21],
+ [29862, 21],
+ [30162, 20],
+ [30462, 20],
+ [30762, 20],
+ [31062, 20],
+ [31362, 20],
+ [31662, 20],
+ [31962, 20],
+ [32262, 20],
+ [32562, 20],
+ [32862, 20],
+ [33161, 21],
+ [33461, 20],
+ [33761, 20],
+ [34061, 20],
+ [34361, 20],
+ [34661, 20],
+ [34961, 20],
+ [35261, 20],
+ [35561, 20],
+ [35861, 20],
+ [36161, 20],
+ [36461, 20],
+ [36761, 20],
+ [37062, 19],
+ [37363, 17],
+ [37664, 15],
+ [37967, 10]
+ ],
+ "point": [172, 85]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-01.46|+00.78|+00.47"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [181, 109, 299, 199],
+ "mask": [
+ [32582, 1],
+ [32882, 10],
+ [33182, 24],
+ [33482, 39],
+ [33782, 54],
+ [34081, 119],
+ [34381, 119],
+ [34681, 119],
+ [34981, 119],
+ [35281, 119],
+ [35581, 119],
+ [35882, 118],
+ [36182, 118],
+ [36483, 117],
+ [36783, 117],
+ [37084, 116],
+ [37385, 115],
+ [37685, 115],
+ [37986, 114],
+ [38286, 114],
+ [38587, 113],
+ [38888, 112],
+ [39188, 112],
+ [39489, 111],
+ [39789, 111],
+ [40089, 111],
+ [40389, 111],
+ [40689, 111],
+ [40990, 110],
+ [41290, 110],
+ [41590, 110],
+ [41890, 110],
+ [42190, 110],
+ [42490, 110],
+ [42791, 109],
+ [43091, 109],
+ [43391, 109],
+ [43691, 109],
+ [43991, 109],
+ [44291, 109],
+ [44591, 109],
+ [44891, 109],
+ [45191, 108],
+ [45491, 108],
+ [45791, 107],
+ [46090, 108],
+ [46390, 107],
+ [46690, 106],
+ [46990, 106],
+ [47290, 105],
+ [47590, 105],
+ [47890, 104],
+ [48190, 104],
+ [48490, 103],
+ [48790, 102],
+ [49090, 102],
+ [49389, 102],
+ [49689, 102],
+ [49989, 101],
+ [50289, 101],
+ [50589, 100],
+ [50889, 99],
+ [51189, 99],
+ [51489, 98],
+ [51789, 98],
+ [52089, 97],
+ [52389, 97],
+ [52688, 97],
+ [52988, 96],
+ [53288, 96],
+ [53588, 95],
+ [53888, 95],
+ [54188, 94],
+ [54488, 94],
+ [54788, 93],
+ [55088, 92],
+ [55388, 92],
+ [55688, 91],
+ [55987, 92],
+ [56287, 91],
+ [56587, 90],
+ [56887, 90],
+ [57187, 89],
+ [57487, 89],
+ [57787, 88],
+ [58087, 87],
+ [58387, 87],
+ [58687, 86],
+ [58987, 86],
+ [59287, 85],
+ [59586, 86]
+ ],
+ "point": [240, 153]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.09|+01.32|-03.31",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|+00.47"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [176, 109, 299, 300],
+ "mask": [
+ [32581, 2],
+ [32881, 11],
+ [33181, 25],
+ [33481, 40],
+ [33780, 56],
+ [34080, 120],
+ [34380, 120],
+ [34680, 120],
+ [34980, 120],
+ [35280, 120],
+ [35581, 119],
+ [35882, 118],
+ [36182, 118],
+ [36483, 117],
+ [36783, 117],
+ [37084, 116],
+ [37385, 115],
+ [37685, 115],
+ [37986, 114],
+ [38286, 114],
+ [38587, 113],
+ [38888, 112],
+ [39188, 112],
+ [39489, 111],
+ [39789, 111],
+ [40089, 111],
+ [40389, 111],
+ [40689, 111],
+ [40990, 110],
+ [41290, 110],
+ [41590, 110],
+ [41890, 110],
+ [42190, 110],
+ [42490, 110],
+ [42791, 109],
+ [43091, 108],
+ [43391, 108],
+ [43691, 107],
+ [43991, 107],
+ [44291, 106],
+ [44591, 106],
+ [44891, 105],
+ [45191, 104],
+ [45491, 104],
+ [45791, 103],
+ [46090, 104],
+ [46390, 103],
+ [46690, 103],
+ [46990, 102],
+ [47290, 101],
+ [47590, 101],
+ [47890, 100],
+ [48190, 100],
+ [48490, 99],
+ [48790, 99],
+ [49090, 98],
+ [49389, 98],
+ [49689, 98],
+ [49989, 97],
+ [50289, 32],
+ [50333, 53],
+ [50589, 28],
+ [50635, 50],
+ [50889, 26],
+ [50929, 2],
+ [50935, 50],
+ [51189, 24],
+ [51231, 2],
+ [51236, 48],
+ [51489, 23],
+ [51533, 1],
+ [51536, 48],
+ [51789, 24],
+ [51836, 2],
+ [51841, 42],
+ [52089, 23],
+ [52141, 41],
+ [52389, 23],
+ [52442, 40],
+ [52688, 23],
+ [52742, 39],
+ [52988, 23],
+ [53041, 40],
+ [53288, 22],
+ [53339, 41],
+ [53588, 22],
+ [53638, 42],
+ [53888, 21],
+ [53938, 41],
+ [54188, 21],
+ [54239, 39],
+ [54488, 21],
+ [54539, 39],
+ [54788, 21],
+ [54839, 38],
+ [55088, 21],
+ [55139, 38],
+ [55388, 21],
+ [55439, 37],
+ [55688, 21],
+ [55739, 37],
+ [55987, 23],
+ [56038, 37],
+ [56287, 23],
+ [56338, 37],
+ [56587, 24],
+ [56638, 36],
+ [56887, 25],
+ [56938, 35],
+ [57187, 26],
+ [57237, 36],
+ [57487, 27],
+ [57537, 35],
+ [57787, 28],
+ [57836, 36],
+ [58087, 30],
+ [58135, 36],
+ [58387, 32],
+ [58433, 38],
+ [58687, 35],
+ [58731, 39],
+ [58987, 17],
+ [59287, 17],
+ [59586, 18],
+ [59886, 18],
+ [60186, 19],
+ [60486, 19],
+ [60786, 19],
+ [61086, 19],
+ [61386, 19],
+ [61686, 20],
+ [61986, 20],
+ [62286, 20],
+ [62586, 20],
+ [62885, 21],
+ [63185, 21],
+ [63485, 22],
+ [63785, 22],
+ [64085, 22],
+ [64385, 22],
+ [64685, 22],
+ [64985, 22],
+ [65285, 23],
+ [65585, 23],
+ [65885, 23],
+ [66184, 24],
+ [66484, 24],
+ [66784, 25],
+ [67084, 25],
+ [67384, 25],
+ [67684, 25],
+ [67984, 25],
+ [68284, 25],
+ [68584, 26],
+ [68884, 26],
+ [69184, 26],
+ [69483, 26],
+ [69783, 26],
+ [70083, 26],
+ [70383, 25],
+ [70683, 25],
+ [70983, 25],
+ [71283, 24],
+ [71583, 24],
+ [71883, 24],
+ [72183, 23],
+ [72483, 23],
+ [72782, 24],
+ [73082, 23],
+ [73382, 23],
+ [73682, 23],
+ [73982, 22],
+ [74282, 22],
+ [74582, 22],
+ [74882, 21],
+ [75182, 21],
+ [75482, 21],
+ [75782, 20],
+ [76081, 21],
+ [76381, 21],
+ [76681, 20],
+ [76981, 20],
+ [77281, 20],
+ [77581, 19],
+ [77881, 19],
+ [78181, 19],
+ [78481, 18],
+ [78781, 18],
+ [79081, 18],
+ [79380, 18],
+ [79680, 18],
+ [79980, 18],
+ [80279, 18],
+ [80579, 18],
+ [80879, 18],
+ [81178, 18],
+ [81478, 18],
+ [81777, 19],
+ [82077, 18],
+ [82377, 18],
+ [82677, 18],
+ [82977, 17],
+ [83277, 17],
+ [83577, 17],
+ [83877, 16],
+ [84177, 16],
+ [84477, 16],
+ [84777, 15],
+ [85077, 15],
+ [85377, 15],
+ [85677, 14],
+ [85977, 14],
+ [86276, 15],
+ [86576, 14],
+ [86876, 14],
+ [87176, 14],
+ [87476, 13],
+ [87776, 13],
+ [88076, 13],
+ [88376, 12],
+ [88678, 10],
+ [88979, 9],
+ [89279, 8],
+ [89579, 8],
+ [89879, 8]
+ ],
+ "point": [237, 195]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-01.46|+00.78|+00.47"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [172, 109, 299, 300],
+ "mask": [
+ [32581, 2],
+ [32881, 11],
+ [33181, 25],
+ [33481, 40],
+ [33780, 56],
+ [34080, 120],
+ [34380, 120],
+ [34680, 120],
+ [34980, 120],
+ [35280, 120],
+ [35580, 120],
+ [35880, 120],
+ [36180, 120],
+ [36480, 120],
+ [36779, 121],
+ [37079, 121],
+ [37379, 121],
+ [37679, 121],
+ [37979, 121],
+ [38279, 121],
+ [38579, 121],
+ [38879, 121],
+ [39179, 121],
+ [39479, 121],
+ [39778, 122],
+ [40078, 122],
+ [40378, 122],
+ [40678, 122],
+ [40978, 122],
+ [41278, 122],
+ [41578, 122],
+ [41878, 122],
+ [42178, 122],
+ [42477, 123],
+ [42777, 123],
+ [43077, 122],
+ [43377, 122],
+ [43677, 121],
+ [43977, 121],
+ [44277, 120],
+ [44577, 120],
+ [44877, 119],
+ [45177, 88],
+ [45268, 27],
+ [45476, 88],
+ [45569, 26],
+ [45776, 88],
+ [45869, 25],
+ [46076, 87],
+ [46169, 25],
+ [46376, 87],
+ [46468, 25],
+ [46676, 86],
+ [46768, 25],
+ [46976, 86],
+ [47068, 24],
+ [47276, 85],
+ [47367, 24],
+ [47576, 85],
+ [47667, 24],
+ [47876, 83],
+ [47966, 24],
+ [48176, 80],
+ [48266, 24],
+ [48475, 80],
+ [48566, 23],
+ [48775, 79],
+ [48867, 22],
+ [49075, 78],
+ [49167, 21],
+ [49375, 78],
+ [49467, 20],
+ [49675, 78],
+ [49768, 19],
+ [49975, 77],
+ [50068, 18],
+ [50275, 46],
+ [50333, 19],
+ [50368, 18],
+ [50575, 42],
+ [50635, 16],
+ [50667, 18],
+ [50875, 40],
+ [50929, 2],
+ [50935, 16],
+ [50967, 18],
+ [51175, 38],
+ [51231, 2],
+ [51236, 14],
+ [51267, 17],
+ [51474, 38],
+ [51533, 1],
+ [51536, 14],
+ [51566, 18],
+ [51774, 39],
+ [51836, 2],
+ [51841, 9],
+ [51866, 17],
+ [52074, 38],
+ [52141, 8],
+ [52165, 17],
+ [52374, 38],
+ [52442, 7],
+ [52465, 17],
+ [52674, 37],
+ [52742, 6],
+ [52764, 17],
+ [52974, 37],
+ [53041, 7],
+ [53064, 17],
+ [53274, 36],
+ [53339, 9],
+ [53363, 17],
+ [53574, 36],
+ [53638, 9],
+ [53663, 17],
+ [53874, 35],
+ [53938, 9],
+ [53962, 17],
+ [54173, 36],
+ [54239, 7],
+ [54262, 16],
+ [54473, 36],
+ [54539, 7],
+ [54561, 17],
+ [54773, 36],
+ [54839, 7],
+ [54861, 16],
+ [55073, 36],
+ [55139, 7],
+ [55160, 17],
+ [55373, 36],
+ [55439, 7],
+ [55460, 16],
+ [55673, 36],
+ [55739, 8],
+ [55759, 17],
+ [55973, 37],
+ [56038, 9],
+ [56059, 16],
+ [56273, 37],
+ [56338, 10],
+ [56358, 17],
+ [56573, 38],
+ [56638, 12],
+ [56657, 17],
+ [56873, 39],
+ [56938, 35],
+ [57172, 41],
+ [57237, 36],
+ [57472, 42],
+ [57537, 35],
+ [57772, 43],
+ [57836, 36],
+ [58072, 45],
+ [58135, 36],
+ [58372, 47],
+ [58433, 38],
+ [58672, 50],
+ [58731, 39],
+ [58972, 32],
+ [59272, 32],
+ [59572, 32],
+ [59872, 32],
+ [60172, 33],
+ [60472, 33],
+ [60772, 33],
+ [61072, 33],
+ [61372, 33],
+ [61672, 34],
+ [61972, 34],
+ [62272, 34],
+ [62572, 34],
+ [62872, 34],
+ [63172, 34],
+ [63473, 34],
+ [63773, 34],
+ [64073, 34],
+ [64373, 34],
+ [64673, 34],
+ [64973, 34],
+ [65273, 35],
+ [65573, 35],
+ [65873, 35],
+ [66173, 35],
+ [66473, 35],
+ [66773, 36],
+ [67073, 36],
+ [67373, 36],
+ [67674, 35],
+ [67974, 35],
+ [68274, 35],
+ [68574, 36],
+ [68874, 36],
+ [69174, 36],
+ [69474, 35],
+ [69774, 35],
+ [70074, 35],
+ [70374, 34],
+ [70674, 34],
+ [70974, 34],
+ [71274, 33],
+ [71574, 33],
+ [71875, 32],
+ [72175, 31],
+ [72475, 31],
+ [72775, 31],
+ [73075, 30],
+ [73375, 30],
+ [73675, 30],
+ [73975, 29],
+ [74275, 29],
+ [74575, 29],
+ [74875, 28],
+ [75175, 28],
+ [75475, 28],
+ [75775, 27],
+ [76075, 27],
+ [76376, 26],
+ [76676, 25],
+ [76976, 25],
+ [77276, 25],
+ [77576, 24],
+ [77876, 24],
+ [78176, 24],
+ [78476, 23],
+ [78776, 23],
+ [79076, 23],
+ [79376, 22],
+ [79676, 22],
+ [79976, 22],
+ [80276, 21],
+ [80577, 20],
+ [80877, 20],
+ [81177, 19],
+ [81477, 19],
+ [81777, 19],
+ [82077, 18],
+ [82377, 18],
+ [82677, 18],
+ [82977, 17],
+ [83277, 17],
+ [83577, 17],
+ [83877, 16],
+ [84177, 16],
+ [84477, 16],
+ [84777, 15],
+ [85077, 15],
+ [85377, 15],
+ [85677, 14],
+ [85977, 14],
+ [86276, 15],
+ [86576, 14],
+ [86876, 14],
+ [87176, 14],
+ [87476, 13],
+ [87776, 13],
+ [88076, 13],
+ [88376, 12],
+ [88678, 10],
+ [88979, 9],
+ [89279, 8],
+ [89579, 8],
+ [89879, 8]
+ ],
+ "point": [235, 195]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.40|+01.32|+00.45"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [92, 1, 145, 118],
+ "mask": [
+ [101, 28],
+ [401, 29],
+ [701, 30],
+ [1000, 31],
+ [1300, 32],
+ [1599, 34],
+ [1899, 34],
+ [2198, 36],
+ [2498, 37],
+ [2797, 39],
+ [3097, 39],
+ [3396, 41],
+ [3696, 42],
+ [3996, 43],
+ [4295, 44],
+ [4595, 45],
+ [4894, 47],
+ [5194, 47],
+ [5493, 49],
+ [5793, 49],
+ [6093, 49],
+ [6392, 50],
+ [6692, 51],
+ [6992, 51],
+ [7292, 51],
+ [7592, 51],
+ [7892, 52],
+ [8192, 52],
+ [8492, 52],
+ [8792, 52],
+ [9092, 52],
+ [9392, 52],
+ [9692, 52],
+ [9992, 52],
+ [10292, 52],
+ [10593, 51],
+ [10893, 51],
+ [11193, 51],
+ [11493, 52],
+ [11793, 52],
+ [12094, 51],
+ [12394, 51],
+ [12694, 51],
+ [12994, 51],
+ [13294, 51],
+ [13595, 50],
+ [13895, 50],
+ [14195, 50],
+ [14495, 50],
+ [14796, 49],
+ [15096, 49],
+ [15396, 49],
+ [15696, 49],
+ [15996, 49],
+ [16297, 48],
+ [16597, 48],
+ [16897, 48],
+ [17197, 48],
+ [17498, 47],
+ [17798, 47],
+ [18098, 47],
+ [18398, 47],
+ [18698, 47],
+ [18999, 46],
+ [19299, 46],
+ [19599, 46],
+ [19899, 46],
+ [20199, 46],
+ [20500, 45],
+ [20800, 45],
+ [21100, 45],
+ [21400, 45],
+ [21701, 44],
+ [22001, 44],
+ [22301, 44],
+ [22601, 44],
+ [22901, 44],
+ [23202, 43],
+ [23502, 43],
+ [23802, 43],
+ [24102, 43],
+ [24403, 42],
+ [24703, 42],
+ [25003, 42],
+ [25303, 42],
+ [25603, 42],
+ [25904, 41],
+ [26204, 41],
+ [26504, 41],
+ [26804, 41],
+ [27104, 41],
+ [27405, 40],
+ [27705, 40],
+ [28005, 41],
+ [28305, 41],
+ [28606, 40],
+ [28906, 40],
+ [29206, 40],
+ [29506, 40],
+ [29806, 40],
+ [30107, 39],
+ [30407, 39],
+ [30707, 39],
+ [31007, 38],
+ [31307, 38],
+ [31608, 37],
+ [31908, 37],
+ [32209, 35],
+ [32509, 34],
+ [32810, 33],
+ [33110, 32],
+ [33411, 30],
+ [33712, 28],
+ [34013, 26],
+ [34315, 23],
+ [34616, 20],
+ [34919, 14],
+ [35223, 6]
+ ],
+ "point": [118, 58]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-01.46|+00.78|+00.47"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [180, 109, 299, 199],
+ "mask": [
+ [32582, 1],
+ [32882, 10],
+ [33182, 25],
+ [33482, 40],
+ [33782, 56],
+ [34081, 119],
+ [34381, 119],
+ [34681, 119],
+ [34981, 119],
+ [35281, 119],
+ [35581, 119],
+ [35881, 119],
+ [36181, 119],
+ [36481, 119],
+ [36780, 120],
+ [37080, 120],
+ [37380, 120],
+ [37680, 120],
+ [37981, 119],
+ [38282, 118],
+ [38582, 118],
+ [38883, 117],
+ [39184, 116],
+ [39484, 116],
+ [39785, 115],
+ [40085, 115],
+ [40386, 114],
+ [40687, 113],
+ [40982, 2],
+ [40987, 113],
+ [41282, 3],
+ [41287, 113],
+ [41583, 3],
+ [41587, 113],
+ [41883, 4],
+ [41888, 112],
+ [42183, 117],
+ [42483, 117],
+ [42784, 116],
+ [43084, 116],
+ [43384, 116],
+ [43684, 116],
+ [43984, 116],
+ [44284, 116],
+ [44584, 116],
+ [44884, 116],
+ [45184, 115],
+ [45483, 116],
+ [45783, 115],
+ [46083, 115],
+ [46382, 115],
+ [46682, 114],
+ [46982, 114],
+ [47281, 114],
+ [47581, 114],
+ [47881, 4],
+ [47886, 108],
+ [48181, 4],
+ [48186, 108],
+ [48481, 112],
+ [48781, 3],
+ [48785, 107],
+ [49081, 3],
+ [49085, 107],
+ [49381, 3],
+ [49385, 106],
+ [49681, 2],
+ [49685, 106],
+ [49981, 2],
+ [49984, 106],
+ [50281, 2],
+ [50284, 106],
+ [50581, 1],
+ [50584, 105],
+ [50884, 104],
+ [51183, 105],
+ [51483, 104],
+ [51783, 104],
+ [52083, 103],
+ [52383, 103],
+ [52682, 103],
+ [52982, 102],
+ [53282, 102],
+ [53582, 101],
+ [53881, 102],
+ [54181, 101],
+ [54481, 101],
+ [54781, 100],
+ [55081, 99],
+ [55381, 99],
+ [55682, 97],
+ [55984, 95],
+ [56285, 93],
+ [56586, 91],
+ [56887, 90],
+ [57188, 88],
+ [57489, 87],
+ [57790, 85],
+ [58091, 83],
+ [58392, 82],
+ [58692, 81],
+ [58993, 80],
+ [59294, 78],
+ [59595, 77]
+ ],
+ "point": [239, 153]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.40|+01.32|+00.45",
+ "placeStationary": true,
+ "receptacleObjectId": "Cabinet|-01.46|+00.78|+00.47"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [176, 109, 299, 300],
+ "mask": [
+ [32581, 2],
+ [32881, 11],
+ [33181, 26],
+ [33481, 41],
+ [33780, 58],
+ [34080, 120],
+ [34380, 120],
+ [34680, 120],
+ [34980, 120],
+ [35280, 120],
+ [35580, 120],
+ [35880, 120],
+ [36180, 120],
+ [36480, 120],
+ [36779, 121],
+ [37079, 121],
+ [37379, 121],
+ [37680, 120],
+ [37981, 119],
+ [38282, 118],
+ [38582, 118],
+ [38883, 117],
+ [39184, 116],
+ [39484, 116],
+ [39785, 115],
+ [40085, 115],
+ [40386, 114],
+ [40687, 113],
+ [40982, 2],
+ [40987, 113],
+ [41282, 3],
+ [41287, 113],
+ [41583, 3],
+ [41587, 113],
+ [41883, 4],
+ [41888, 112],
+ [42183, 117],
+ [42483, 117],
+ [42784, 116],
+ [43084, 115],
+ [43384, 115],
+ [43684, 114],
+ [43984, 114],
+ [44284, 113],
+ [44584, 113],
+ [44884, 112],
+ [45184, 81],
+ [45268, 27],
+ [45483, 81],
+ [45569, 26],
+ [45783, 81],
+ [45869, 25],
+ [46083, 80],
+ [46169, 25],
+ [46382, 81],
+ [46468, 25],
+ [46682, 80],
+ [46768, 25],
+ [46982, 80],
+ [47068, 24],
+ [47281, 80],
+ [47367, 24],
+ [47581, 80],
+ [47667, 24],
+ [47881, 4],
+ [47886, 73],
+ [47966, 24],
+ [48181, 4],
+ [48186, 70],
+ [48266, 24],
+ [48481, 74],
+ [48566, 23],
+ [48781, 3],
+ [48785, 69],
+ [48867, 22],
+ [49081, 3],
+ [49085, 68],
+ [49167, 21],
+ [49381, 3],
+ [49385, 68],
+ [49467, 20],
+ [49681, 2],
+ [49685, 68],
+ [49768, 19],
+ [49981, 2],
+ [49984, 68],
+ [50068, 18],
+ [50281, 2],
+ [50284, 37],
+ [50333, 19],
+ [50368, 18],
+ [50581, 1],
+ [50584, 33],
+ [50635, 16],
+ [50667, 18],
+ [50884, 30],
+ [50929, 2],
+ [50936, 15],
+ [50967, 18],
+ [51183, 29],
+ [51231, 2],
+ [51236, 15],
+ [51267, 17],
+ [51483, 29],
+ [51533, 1],
+ [51536, 14],
+ [51566, 18],
+ [51783, 30],
+ [51836, 2],
+ [51841, 9],
+ [51866, 17],
+ [52083, 29],
+ [52142, 7],
+ [52165, 17],
+ [52383, 29],
+ [52442, 7],
+ [52465, 17],
+ [52682, 29],
+ [52742, 6],
+ [52764, 17],
+ [52982, 29],
+ [53041, 7],
+ [53064, 17],
+ [53282, 28],
+ [53339, 9],
+ [53363, 17],
+ [53582, 28],
+ [53638, 9],
+ [53663, 17],
+ [53881, 28],
+ [53938, 9],
+ [53962, 17],
+ [54181, 28],
+ [54239, 7],
+ [54262, 16],
+ [54481, 28],
+ [54539, 7],
+ [54561, 17],
+ [54781, 28],
+ [54839, 7],
+ [54861, 16],
+ [55081, 28],
+ [55139, 7],
+ [55160, 17],
+ [55381, 28],
+ [55439, 7],
+ [55460, 16],
+ [55682, 28],
+ [55739, 8],
+ [55759, 17],
+ [55984, 26],
+ [56038, 9],
+ [56059, 16],
+ [56285, 25],
+ [56338, 10],
+ [56358, 17],
+ [56586, 25],
+ [56638, 12],
+ [56657, 17],
+ [56887, 25],
+ [56938, 35],
+ [57188, 25],
+ [57237, 36],
+ [57489, 25],
+ [57537, 35],
+ [57790, 25],
+ [57836, 36],
+ [58091, 26],
+ [58135, 36],
+ [58392, 27],
+ [58433, 38],
+ [58692, 30],
+ [58731, 39],
+ [58993, 11],
+ [59294, 10],
+ [59595, 9],
+ [59895, 9],
+ [60196, 9],
+ [60496, 9],
+ [60797, 8],
+ [61097, 8],
+ [61398, 7],
+ [61698, 8],
+ [61999, 7],
+ [62299, 7],
+ [62600, 6],
+ [62900, 6],
+ [63201, 5],
+ [63501, 6],
+ [63801, 6],
+ [64101, 6],
+ [64402, 5],
+ [64702, 5],
+ [65002, 5],
+ [65302, 6],
+ [65602, 6],
+ [65903, 5],
+ [66203, 5],
+ [66503, 5],
+ [66803, 6],
+ [67104, 5],
+ [67404, 5],
+ [67704, 5],
+ [68004, 5],
+ [68304, 5],
+ [68604, 6],
+ [68904, 6],
+ [69204, 6],
+ [69504, 5],
+ [69804, 5],
+ [70104, 5],
+ [70404, 4],
+ [70704, 4],
+ [71004, 4],
+ [71304, 3],
+ [71604, 3],
+ [71904, 3],
+ [72204, 2],
+ [72504, 2],
+ [72804, 2],
+ [73104, 1],
+ [73403, 2],
+ [73703, 2],
+ [74003, 1],
+ [74302, 2],
+ [74602, 2],
+ [74902, 1],
+ [75201, 2],
+ [75501, 2],
+ [75801, 1],
+ [76101, 1],
+ [76400, 2],
+ [76700, 1],
+ [77000, 1],
+ [77299, 2],
+ [77598, 2],
+ [77898, 2],
+ [78197, 3],
+ [78497, 2],
+ [78796, 3],
+ [79095, 4],
+ [79395, 3],
+ [79694, 4],
+ [79993, 5],
+ [80293, 4],
+ [80592, 5],
+ [80892, 5],
+ [81191, 5],
+ [81489, 7],
+ [81788, 8],
+ [82087, 8],
+ [82386, 9],
+ [82685, 10],
+ [82984, 10],
+ [83283, 11],
+ [83582, 12],
+ [83881, 12],
+ [84179, 14],
+ [84478, 15],
+ [84777, 15],
+ [85077, 15],
+ [85377, 15],
+ [85677, 14],
+ [85977, 14],
+ [86276, 15],
+ [86576, 14],
+ [86876, 14],
+ [87176, 14],
+ [87476, 13],
+ [87776, 13],
+ [88076, 13],
+ [88376, 12],
+ [88678, 10],
+ [88979, 9],
+ [89279, 8],
+ [89579, 8],
+ [89879, 8]
+ ],
+ "point": [237, 195]
+ }
+ },
+ "high_idx": 7
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-01.46|+00.78|+00.47"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [172, 109, 299, 300],
+ "mask": [
+ [32581, 2],
+ [32881, 11],
+ [33181, 26],
+ [33481, 41],
+ [33780, 58],
+ [34080, 120],
+ [34380, 120],
+ [34680, 120],
+ [34980, 120],
+ [35280, 120],
+ [35580, 120],
+ [35880, 120],
+ [36180, 120],
+ [36480, 120],
+ [36779, 121],
+ [37079, 121],
+ [37379, 121],
+ [37679, 121],
+ [37979, 121],
+ [38279, 121],
+ [38579, 121],
+ [38879, 46],
+ [38929, 71],
+ [39179, 46],
+ [39229, 71],
+ [39479, 45],
+ [39529, 71],
+ [39778, 46],
+ [39829, 71],
+ [40078, 46],
+ [40128, 72],
+ [40378, 45],
+ [40428, 72],
+ [40678, 45],
+ [40728, 72],
+ [40978, 45],
+ [41028, 72],
+ [41278, 44],
+ [41327, 73],
+ [41578, 43],
+ [41627, 73],
+ [41878, 41],
+ [41928, 72],
+ [42178, 40],
+ [42228, 72],
+ [42477, 40],
+ [42529, 71],
+ [42777, 40],
+ [42829, 71],
+ [43077, 40],
+ [43129, 70],
+ [43377, 39],
+ [43430, 69],
+ [43677, 39],
+ [43730, 68],
+ [43977, 39],
+ [44029, 69],
+ [44277, 39],
+ [44329, 68],
+ [44577, 38],
+ [44629, 68],
+ [44877, 38],
+ [44928, 68],
+ [45177, 38],
+ [45228, 37],
+ [45268, 27],
+ [45476, 39],
+ [45528, 36],
+ [45569, 26],
+ [45776, 38],
+ [45828, 36],
+ [45869, 25],
+ [46076, 38],
+ [46127, 36],
+ [46169, 25],
+ [46376, 38],
+ [46427, 36],
+ [46468, 25],
+ [46676, 38],
+ [46727, 35],
+ [46768, 25],
+ [46976, 37],
+ [47026, 36],
+ [47068, 24],
+ [47276, 37],
+ [47326, 35],
+ [47367, 24],
+ [47576, 37],
+ [47626, 35],
+ [47667, 24],
+ [47876, 37],
+ [47925, 34],
+ [47966, 24],
+ [48176, 36],
+ [48225, 31],
+ [48266, 24],
+ [48475, 37],
+ [48525, 30],
+ [48566, 23],
+ [48775, 37],
+ [48824, 30],
+ [48867, 22],
+ [49075, 38],
+ [49124, 29],
+ [49167, 21],
+ [49375, 38],
+ [49424, 29],
+ [49467, 20],
+ [49675, 39],
+ [49723, 30],
+ [49768, 19],
+ [49975, 41],
+ [50022, 30],
+ [50068, 18],
+ [50275, 46],
+ [50333, 19],
+ [50368, 18],
+ [50575, 42],
+ [50635, 16],
+ [50667, 18],
+ [50875, 39],
+ [50929, 2],
+ [50936, 15],
+ [50967, 18],
+ [51175, 37],
+ [51231, 2],
+ [51236, 15],
+ [51267, 17],
+ [51474, 38],
+ [51533, 1],
+ [51536, 14],
+ [51566, 18],
+ [51774, 39],
+ [51836, 2],
+ [51841, 9],
+ [51866, 17],
+ [52074, 38],
+ [52142, 7],
+ [52165, 17],
+ [52374, 38],
+ [52442, 7],
+ [52465, 17],
+ [52674, 37],
+ [52742, 6],
+ [52764, 17],
+ [52974, 37],
+ [53041, 7],
+ [53064, 17],
+ [53274, 36],
+ [53339, 9],
+ [53363, 17],
+ [53574, 36],
+ [53638, 9],
+ [53663, 17],
+ [53874, 35],
+ [53938, 9],
+ [53962, 17],
+ [54173, 36],
+ [54239, 7],
+ [54262, 16],
+ [54473, 36],
+ [54539, 7],
+ [54561, 17],
+ [54773, 36],
+ [54839, 7],
+ [54861, 16],
+ [55073, 36],
+ [55139, 7],
+ [55160, 17],
+ [55373, 36],
+ [55439, 7],
+ [55460, 16],
+ [55673, 37],
+ [55739, 8],
+ [55759, 17],
+ [55973, 37],
+ [56038, 9],
+ [56059, 16],
+ [56273, 37],
+ [56338, 10],
+ [56358, 17],
+ [56573, 38],
+ [56638, 12],
+ [56657, 17],
+ [56873, 39],
+ [56938, 35],
+ [57172, 41],
+ [57237, 36],
+ [57472, 42],
+ [57537, 35],
+ [57772, 43],
+ [57836, 36],
+ [58072, 45],
+ [58135, 36],
+ [58372, 47],
+ [58433, 38],
+ [58672, 50],
+ [58731, 39],
+ [58972, 32],
+ [59272, 32],
+ [59572, 32],
+ [59872, 32],
+ [60172, 33],
+ [60472, 33],
+ [60772, 33],
+ [61072, 33],
+ [61372, 33],
+ [61672, 34],
+ [61972, 34],
+ [62272, 34],
+ [62572, 34],
+ [62872, 34],
+ [63172, 34],
+ [63473, 34],
+ [63773, 34],
+ [64073, 34],
+ [64373, 34],
+ [64673, 34],
+ [64973, 34],
+ [65273, 35],
+ [65573, 35],
+ [65873, 35],
+ [66173, 35],
+ [66473, 35],
+ [66773, 36],
+ [67073, 36],
+ [67373, 36],
+ [67674, 35],
+ [67974, 35],
+ [68274, 35],
+ [68574, 36],
+ [68874, 36],
+ [69174, 36],
+ [69474, 35],
+ [69774, 35],
+ [70074, 35],
+ [70374, 34],
+ [70674, 34],
+ [70974, 34],
+ [71274, 33],
+ [71574, 33],
+ [71875, 32],
+ [72175, 31],
+ [72475, 31],
+ [72775, 31],
+ [73075, 30],
+ [73375, 30],
+ [73675, 30],
+ [73975, 29],
+ [74275, 29],
+ [74575, 29],
+ [74875, 28],
+ [75175, 28],
+ [75475, 28],
+ [75775, 27],
+ [76075, 27],
+ [76376, 26],
+ [76676, 25],
+ [76976, 25],
+ [77276, 25],
+ [77576, 24],
+ [77876, 24],
+ [78176, 24],
+ [78476, 23],
+ [78776, 23],
+ [79076, 23],
+ [79376, 22],
+ [79676, 22],
+ [79976, 22],
+ [80276, 21],
+ [80577, 20],
+ [80877, 20],
+ [81177, 19],
+ [81477, 19],
+ [81777, 19],
+ [82077, 18],
+ [82377, 18],
+ [82677, 18],
+ [82977, 17],
+ [83277, 17],
+ [83577, 17],
+ [83877, 16],
+ [84177, 16],
+ [84477, 16],
+ [84777, 15],
+ [85077, 15],
+ [85377, 15],
+ [85677, 14],
+ [85977, 14],
+ [86276, 15],
+ [86576, 14],
+ [86876, 14],
+ [87176, 14],
+ [87476, 13],
+ [87776, 13],
+ [88076, 13],
+ [88376, 12],
+ [88678, 10],
+ [88979, 9],
+ [89279, 8],
+ [89579, 8],
+ [89879, 8]
+ ],
+ "point": [235, 195]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan3",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 0,
+ "x": 0.0,
+ "y": 1.12401652,
+ "z": 0.75
+ },
+ "object_poses": [
+ {
+ "objectName": "Potato_e8912d85",
+ "position": {
+ "x": -1.53080976,
+ "y": 1.36275363,
+ "z": 1.4197371
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_560d3534",
+ "position": {
+ "x": -1.40105689,
+ "y": 1.32392883,
+ "z": 0.445294976
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_299f2c2a",
+ "position": {
+ "x": -0.2394,
+ "y": 1.3317,
+ "z": -3.3019
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 179.999664,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_299f2c2a",
+ "position": {
+ "x": -1.6140399,
+ "y": 0.344855428,
+ "z": 0.5126284
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_f0a2d64c",
+ "position": {
+ "x": 0.5068307,
+ "y": 1.33799994,
+ "z": -3.164938
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_f0a2d64c",
+ "position": {
+ "x": 0.6365833,
+ "y": 1.33799994,
+ "z": -1.312883
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_7c718722",
+ "position": {
+ "x": -1.95454407,
+ "y": 1.09187412,
+ "z": -0.587838531
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_7c718722",
+ "position": {
+ "x": 1.27624369,
+ "y": 1.24862444,
+ "z": 1.23849058
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_f306e730",
+ "position": {
+ "x": 1.05303526,
+ "y": 0.34236908,
+ "z": -2.37100124
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_f306e730",
+ "position": {
+ "x": -1.4514004,
+ "y": 1.32039762,
+ "z": -3.42523718
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_d5570300",
+ "position": {
+ "x": 0.896088362,
+ "y": 1.323614,
+ "z": -2.05370474
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_cf9afd50",
+ "position": {
+ "x": -1.16594541,
+ "y": 1.32319188,
+ "z": -3.203495
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_cf9afd50",
+ "position": {
+ "x": -1.634,
+ "y": 0.280376852,
+ "z": 2.151774
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_eef34b87",
+ "position": {
+ "x": -1.665155,
+ "y": 0.3421222,
+ "z": -2.06300569
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_eef34b87",
+ "position": {
+ "x": 0.970999956,
+ "y": 1.52282739,
+ "z": 1.78658581
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_c15f34b3",
+ "position": {
+ "x": -1.52276421,
+ "y": 1.31800008,
+ "z": -3.31436586
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_c15f34b3",
+ "position": {
+ "x": 0.766335964,
+ "y": 1.31800008,
+ "z": -1.68329394
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_dd060264",
+ "position": {
+ "x": -1.66056263,
+ "y": 1.39739525,
+ "z": 1.4197371
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_dd060264",
+ "position": {
+ "x": 0.349309921,
+ "y": 1.39739525,
+ "z": -3.12197924
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_dd060264",
+ "position": {
+ "x": -1.51363027,
+ "y": 1.38091612,
+ "z": 0.662198663
+ },
+ "rotation": {
+ "x": -4.263596e-5,
+ "y": -3.26005757e-5,
+ "z": -6.80681551e-5
+ }
+ },
+ {
+ "objectName": "Pot_930b560d",
+ "position": {
+ "x": -0.6309,
+ "y": 1.3317,
+ "z": -3.3019
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 179.999664,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_bee62bfa",
+ "position": {
+ "x": -1.55969191,
+ "y": 1.35868657,
+ "z": -1.04922915
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_eef34b87",
+ "position": {
+ "x": 1.056315,
+ "y": 1.67342818,
+ "z": 1.78130639
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_e8912d85",
+ "position": {
+ "x": 1.21390212,
+ "y": 1.35016418,
+ "z": 0.861989737
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.000183,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_cf9afd50",
+ "position": {
+ "x": 0.747982,
+ "y": 0.345163345,
+ "z": -1.9577744
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_61df51be",
+ "position": {
+ "x": -2.00441241,
+ "y": 1.33716774,
+ "z": -1.25536227
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_f306e730",
+ "position": {
+ "x": -1.6980927,
+ "y": 1.04844725,
+ "z": -0.496626765
+ },
+ "rotation": {
+ "x": 1.40334191e-14,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_299f2c2a",
+ "position": {
+ "x": -2.04982138,
+ "y": 1.32404137,
+ "z": 1.094923
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_7c718722",
+ "position": {
+ "x": -1.5869925,
+ "y": 0.321009457,
+ "z": 2.23422623
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pan_9d168802",
+ "position": {
+ "x": -1.92006814,
+ "y": 1.32260954,
+ "z": -1.68147337
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_b13b6e3e",
+ "position": {
+ "x": 1.11029458,
+ "y": 1.2028,
+ "z": 1.23849058
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_560d3534",
+ "position": {
+ "x": -1.0945816,
+ "y": 1.32392883,
+ "z": -3.31436586
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_b5e01a1e",
+ "position": {
+ "x": -1.79031563,
+ "y": 1.39912164,
+ "z": -2.981163
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_f0a2d64c",
+ "position": {
+ "x": -1.66056311,
+ "y": 1.33799994,
+ "z": -2.20134926
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PaperTowelRoll_ddd73f57",
+ "position": {
+ "x": -1.34542334,
+ "y": 1.42728543,
+ "z": -1.03550565
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_93b30017",
+ "position": {
+ "x": 0.9443453,
+ "y": 1.241721,
+ "z": 1.25445545
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_d5570300",
+ "position": {
+ "x": -1.66056263,
+ "y": 1.323614,
+ "z": 2.069365
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_c15f34b3",
+ "position": {
+ "x": -1.0945816,
+ "y": 1.31800008,
+ "z": -2.76001024
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_a15664d1",
+ "position": {
+ "x": -1.665155,
+ "y": 0.343378425,
+ "z": -2.362065
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_e0793d4c",
+ "position": {
+ "x": -1.53080976,
+ "y": 1.32412946,
+ "z": 1.74455106
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_e84ad935",
+ "position": {
+ "x": -2.17957425,
+ "y": 1.37188375,
+ "z": 0.445294976
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_259b36f2",
+ "position": {
+ "x": 0.965999663,
+ "y": 1.3713994,
+ "z": -1.53499949
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.000183,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 3257972578,
+ "scene_num": 3
+ },
+ "task_id": "trial_T20190909_074805_916625",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A3HL2LL0LEPZT8_3I2PTA7R3WLN5BQD54Z1I3NIZ1LKQK",
+ "high_descs": [
+ "Turn left, go forward to the counter, turn left, go all the way straight.",
+ "Take the wine bottle to the right of the stove top.",
+ "Turn left, go forward a step, turn left, go forward, turn left and face the counter to the right of the sink.",
+ "Put the bottle in the cabinet underneath the counter to the right of the tea kettle.",
+ "Take a step to the right, go to the counter.",
+ "Take the wine bottle from the counter.",
+ "Turn around, go forward a step, turn right, go forward a step, turn right to face the counter.",
+ "Put the bottle in the cabinet underneath the counter behind the tea kettle."
+ ],
+ "task_desc": "Put two wine bottles in a cabinet.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A1T643M1P572AA_3NKQQ8O391W7JYRKUWXJORPHIDWUDO",
+ "high_descs": [
+ "Turn around and walk the other side of the room and face the stove",
+ "pick up the wine bottle that was on the counter",
+ "turn around and move forward and then turn left and face the left cabinet under the counter",
+ "place the bottle into the left cabinet",
+ "close the cabinet drawer and move forward and turn left and face towards the cabinet again",
+ "pick up the bottle that was on the counter",
+ "take the bottle of wine and walk over to the left cabinet",
+ "place the bottle inside the left cabinet behind the pan "
+ ],
+ "task_desc": "take both bottles of wine and place them in the left drawer that is beneath the counter",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A31681CCEVDIH3_3QAPZX2QN74402HOZ0ZI31A65XA02P",
+ "high_descs": [
+ "Turn around to walk to the stove across the room.",
+ "Pick up the green bottle next to the stove.",
+ "Turn around to walk to the counter to the right of the sink.",
+ "Put the green bottle in the cabinet directly below the loaf of bread.",
+ "Turn to face the counter above the cabinet.",
+ "Pick up the other green bottle next to the loaf of bread.",
+ "Turn to face the cabinet below the loaf of bread.",
+ "Put the other green bottle in the cabinet directly below the loaf of bread."
+ ],
+ "task_desc": "Put two green bottles in the cabinet directly below the loaf of bread on the counter.",
+ "votes": [1, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200307_446636/traj_data.json b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200307_446636/traj_data.json
new file mode 100644
index 0000000..b9eba70
--- /dev/null
+++ b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200307_446636/traj_data.json
@@ -0,0 +1,4912 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000048.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000049.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000050.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000051.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000052.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000053.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000054.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000055.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000056.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000057.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000058.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000059.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000060.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000061.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000062.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000063.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000064.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000065.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000066.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000067.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000068.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000069.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000070.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000071.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000072.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000073.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000074.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000075.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000076.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000077.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000078.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000079.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000080.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000081.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000082.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000083.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000116.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000117.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000118.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000119.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000120.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000121.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000122.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000123.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000124.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000125.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000126.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000127.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000128.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000129.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000130.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000131.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000132.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000133.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000134.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000135.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000136.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000137.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000138.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000139.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000140.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000141.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000142.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000143.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000144.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000145.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000146.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000147.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000148.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000149.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000150.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000151.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000152.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000153.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000154.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000155.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000156.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000157.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000158.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000159.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000160.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000161.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000162.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000163.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000164.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000165.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000166.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000167.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000168.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000169.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000170.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000171.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000172.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000173.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000174.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000175.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000176.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000177.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000178.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000179.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000180.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000181.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000182.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000183.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000184.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000185.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000186.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000187.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000188.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000189.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000190.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000191.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000192.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000193.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000194.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000195.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000196.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000197.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000198.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000199.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000200.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000201.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000202.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000203.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000204.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000205.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000206.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000207.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000208.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000209.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000210.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000211.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000212.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000213.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000214.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000215.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000216.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000217.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000218.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000219.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000220.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000221.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000222.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000223.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000224.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000225.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000226.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000227.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000228.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000229.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000230.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000231.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000232.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000233.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000234.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000235.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000236.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000237.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000238.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000239.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000240.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000241.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000242.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000243.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000244.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000245.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000246.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000247.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000248.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000249.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000250.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000251.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000252.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000253.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000254.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000255.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000256.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000257.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000258.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000259.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000260.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000261.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000262.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000263.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000264.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000265.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000266.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000267.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000268.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000269.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000270.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000271.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000272.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000273.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000274.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000275.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000276.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000277.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000278.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000279.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000280.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000281.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000282.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000283.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000284.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000285.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000286.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000287.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000288.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000289.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000290.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000291.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000292.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000293.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000294.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000295.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000296.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000297.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000298.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000299.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000300.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000301.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000302.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000303.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000304.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000305.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000306.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000307.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000308.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000309.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000310.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000311.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000312.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000313.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000314.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000315.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000316.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000317.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000318.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000319.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000320.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000321.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000322.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000323.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000324.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000325.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000326.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000327.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000328.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000329.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000330.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000331.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000332.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000333.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000334.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000335.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000336.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000337.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000338.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000339.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000340.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000341.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000342.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000343.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000344.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000345.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000346.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000347.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000348.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000349.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000350.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000351.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000352.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000353.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000354.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000355.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000356.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000357.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000358.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000359.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000360.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000361.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000362.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000363.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000364.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000365.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000366.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000367.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000368.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000369.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000370.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000371.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000372.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000373.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000374.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000375.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000376.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000377.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000378.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000379.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000380.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000381.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000382.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000383.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000384.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000385.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000386.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000387.png",
+ "low_idx": 82
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000388.png",
+ "low_idx": 82
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000389.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000390.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000391.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000392.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000393.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000394.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000395.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000396.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000397.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000398.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000399.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000400.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000401.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000402.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000403.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000404.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000405.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000406.png",
+ "low_idx": 87
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000407.png",
+ "low_idx": 87
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000408.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000409.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000410.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000411.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000412.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000413.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000414.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000415.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000416.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000417.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000418.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000419.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000420.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000421.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000422.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000423.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000424.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000425.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000426.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000427.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000428.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000429.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000430.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000431.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000432.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000433.png",
+ "low_idx": 89
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "WineBottle",
+ "parent_target": "GarbageCan",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-5|-7|2|0"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.82805824, -5.82805824, -10.56496336, -10.56496336, 6.63698532,
+ 6.63698532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [-6.7412, -6.7412, -9.8464, -9.8464, 8.06, 8.06]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.46|+01.66|-02.64"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["garbagecan"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-6|7|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "garbagecan"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -5.82805824, -5.82805824, -10.56496336, -10.56496336, 6.63698532,
+ 6.63698532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "GarbageCan",
+ [-7.74, -7.74, 8.116, 8.116, 0.0, 0.0]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.46|+01.66|-02.64",
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["countertop"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|2|-7|2|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ 1.815271376, 1.815271376, -10.550532, -10.550532, 3.6465152,
+ 3.6465152
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "CounterTop",
+ [2.772, 2.772, -9.936, -9.936, 3.7848, 3.7848]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|+00.45|+00.91|-02.64"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["garbagecan"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-6|7|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "garbagecan"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ 1.815271376, 1.815271376, -10.550532, -10.550532, 3.6465152,
+ 3.6465152
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "GarbageCan",
+ [-7.74, -7.74, 8.116, 8.116, 0.0, 0.0]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|+00.45|+00.91|-02.64",
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-01.69|+02.02|-02.46"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [138, 1, 299, 127],
+ "mask": [
+ [138, 162],
+ [438, 162],
+ [738, 162],
+ [1038, 162],
+ [1338, 162],
+ [1638, 162],
+ [1938, 162],
+ [2238, 162],
+ [2538, 162],
+ [2838, 162],
+ [3138, 162],
+ [3438, 162],
+ [3738, 162],
+ [4038, 162],
+ [4338, 162],
+ [4638, 162],
+ [4938, 162],
+ [5238, 162],
+ [5538, 162],
+ [5838, 162],
+ [6138, 162],
+ [6438, 162],
+ [6738, 162],
+ [7038, 162],
+ [7338, 162],
+ [7638, 162],
+ [7938, 162],
+ [8238, 162],
+ [8538, 162],
+ [8838, 162],
+ [9138, 162],
+ [9438, 162],
+ [9738, 162],
+ [10038, 162],
+ [10338, 162],
+ [10638, 162],
+ [10938, 162],
+ [11238, 162],
+ [11538, 162],
+ [11838, 162],
+ [12138, 162],
+ [12438, 162],
+ [12738, 162],
+ [13038, 162],
+ [13338, 162],
+ [13638, 162],
+ [13938, 162],
+ [14238, 162],
+ [14538, 162],
+ [14838, 162],
+ [15138, 162],
+ [15438, 162],
+ [15738, 162],
+ [16038, 162],
+ [16338, 162],
+ [16638, 162],
+ [16938, 162],
+ [17238, 162],
+ [17538, 162],
+ [17838, 162],
+ [18138, 162],
+ [18438, 162],
+ [18738, 162],
+ [19038, 162],
+ [19338, 162],
+ [19638, 162],
+ [19938, 162],
+ [20238, 162],
+ [20538, 162],
+ [20838, 162],
+ [21138, 162],
+ [21438, 162],
+ [21738, 162],
+ [22038, 162],
+ [22338, 162],
+ [22638, 162],
+ [22938, 162],
+ [23238, 162],
+ [23538, 162],
+ [23838, 162],
+ [24138, 162],
+ [24438, 162],
+ [24738, 162],
+ [25038, 162],
+ [25338, 162],
+ [25638, 162],
+ [25938, 162],
+ [26238, 162],
+ [26538, 162],
+ [26838, 162],
+ [27138, 162],
+ [27438, 162],
+ [27738, 162],
+ [28038, 162],
+ [28338, 162],
+ [28638, 162],
+ [28938, 162],
+ [29238, 162],
+ [29538, 162],
+ [29838, 162],
+ [30138, 162],
+ [30438, 162],
+ [30738, 162],
+ [31038, 162],
+ [31338, 162],
+ [31638, 162],
+ [31938, 162],
+ [32238, 162],
+ [32538, 162],
+ [32838, 162],
+ [33138, 162],
+ [33438, 162],
+ [33738, 162],
+ [34038, 162],
+ [34338, 162],
+ [34638, 162],
+ [34938, 162],
+ [35238, 162],
+ [35538, 162],
+ [35838, 162],
+ [36138, 162],
+ [36438, 162],
+ [36738, 162],
+ [37038, 162],
+ [37338, 162],
+ [37638, 162],
+ [37938, 162]
+ ],
+ "point": [218, 63]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.46|+01.66|-02.64"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [197, 30, 223, 125],
+ "mask": [
+ [8909, 5],
+ [9207, 8],
+ [9506, 9],
+ [9806, 9],
+ [10106, 9],
+ [10406, 9],
+ [10706, 9],
+ [11006, 9],
+ [11306, 9],
+ [11606, 9],
+ [11906, 9],
+ [12206, 9],
+ [12506, 9],
+ [12806, 9],
+ [13106, 9],
+ [13406, 9],
+ [13706, 9],
+ [14006, 9],
+ [14306, 9],
+ [14606, 9],
+ [14906, 9],
+ [15206, 9],
+ [15506, 9],
+ [15806, 9],
+ [16105, 11],
+ [16405, 11],
+ [16704, 13],
+ [17004, 14],
+ [17303, 16],
+ [17602, 17],
+ [17902, 18],
+ [18201, 20],
+ [18501, 20],
+ [18800, 22],
+ [19099, 24],
+ [19399, 24],
+ [19698, 25],
+ [19998, 25],
+ [20298, 26],
+ [20598, 26],
+ [20897, 27],
+ [21197, 27],
+ [21497, 27],
+ [21797, 27],
+ [22097, 27],
+ [22397, 27],
+ [22697, 27],
+ [22997, 27],
+ [23297, 27],
+ [23597, 27],
+ [23897, 27],
+ [24197, 27],
+ [24497, 27],
+ [24797, 27],
+ [25097, 27],
+ [25397, 27],
+ [25697, 27],
+ [25997, 27],
+ [26297, 27],
+ [26597, 27],
+ [26897, 27],
+ [27197, 27],
+ [27497, 27],
+ [27797, 27],
+ [28097, 27],
+ [28397, 27],
+ [28697, 27],
+ [28997, 27],
+ [29297, 27],
+ [29597, 27],
+ [29897, 27],
+ [30197, 27],
+ [30497, 27],
+ [30797, 27],
+ [31097, 27],
+ [31397, 27],
+ [31697, 27],
+ [31997, 27],
+ [32297, 27],
+ [32597, 27],
+ [32897, 27],
+ [33197, 27],
+ [33497, 27],
+ [33797, 27],
+ [34097, 27],
+ [34397, 27],
+ [34697, 27],
+ [34997, 27],
+ [35297, 27],
+ [35597, 27],
+ [35897, 27],
+ [36197, 27],
+ [36497, 27],
+ [36797, 27],
+ [37097, 27],
+ [37397, 27]
+ ],
+ "point": [210, 76]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-01.69|+02.02|-02.46"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [112, 1, 139, 116],
+ "mask": [
+ [112, 6],
+ [121, 19],
+ [412, 6],
+ [421, 19],
+ [712, 6],
+ [721, 19],
+ [1012, 6],
+ [1021, 19],
+ [1312, 6],
+ [1321, 19],
+ [1612, 6],
+ [1621, 19],
+ [1912, 6],
+ [1921, 19],
+ [2212, 6],
+ [2221, 19],
+ [2512, 6],
+ [2521, 19],
+ [2812, 6],
+ [2821, 19],
+ [3112, 6],
+ [3121, 19],
+ [3412, 6],
+ [3421, 19],
+ [3712, 6],
+ [3721, 19],
+ [4012, 6],
+ [4021, 19],
+ [4312, 6],
+ [4321, 19],
+ [4612, 6],
+ [4621, 19],
+ [4912, 6],
+ [4921, 19],
+ [5212, 6],
+ [5221, 19],
+ [5512, 6],
+ [5521, 19],
+ [5812, 6],
+ [5821, 19],
+ [6112, 6],
+ [6121, 19],
+ [6412, 6],
+ [6421, 19],
+ [6712, 6],
+ [6721, 19],
+ [7012, 6],
+ [7021, 19],
+ [7312, 6],
+ [7321, 19],
+ [7612, 6],
+ [7621, 19],
+ [7912, 6],
+ [7921, 19],
+ [8212, 6],
+ [8221, 19],
+ [8512, 6],
+ [8521, 19],
+ [8812, 6],
+ [8821, 19],
+ [9112, 6],
+ [9121, 19],
+ [9412, 6],
+ [9421, 19],
+ [9712, 6],
+ [9721, 19],
+ [10012, 6],
+ [10021, 19],
+ [10312, 6],
+ [10321, 19],
+ [10612, 6],
+ [10621, 19],
+ [10912, 6],
+ [10921, 19],
+ [11212, 6],
+ [11221, 19],
+ [11512, 6],
+ [11521, 19],
+ [11812, 6],
+ [11821, 19],
+ [12112, 6],
+ [12121, 19],
+ [12412, 6],
+ [12421, 19],
+ [12712, 6],
+ [12721, 19],
+ [13012, 6],
+ [13021, 19],
+ [13312, 6],
+ [13321, 19],
+ [13612, 6],
+ [13621, 19],
+ [13912, 6],
+ [13921, 19],
+ [14212, 6],
+ [14221, 19],
+ [14512, 6],
+ [14521, 19],
+ [14812, 6],
+ [14821, 19],
+ [15112, 6],
+ [15121, 19],
+ [15412, 6],
+ [15421, 19],
+ [15712, 6],
+ [15721, 19],
+ [16012, 6],
+ [16021, 19],
+ [16312, 6],
+ [16321, 19],
+ [16612, 6],
+ [16621, 19],
+ [16912, 6],
+ [16921, 19],
+ [17212, 6],
+ [17221, 19],
+ [17512, 6],
+ [17521, 19],
+ [17812, 6],
+ [17821, 19],
+ [18112, 6],
+ [18121, 19],
+ [18412, 6],
+ [18421, 19],
+ [18712, 6],
+ [18721, 19],
+ [19012, 6],
+ [19021, 19],
+ [19312, 6],
+ [19321, 19],
+ [19612, 6],
+ [19621, 19],
+ [19912, 6],
+ [19921, 19],
+ [20212, 6],
+ [20221, 19],
+ [20512, 6],
+ [20521, 19],
+ [20812, 6],
+ [20821, 19],
+ [21112, 6],
+ [21121, 19],
+ [21412, 6],
+ [21421, 19],
+ [21712, 6],
+ [21721, 19],
+ [22012, 6],
+ [22021, 19],
+ [22312, 6],
+ [22321, 18],
+ [22612, 6],
+ [22621, 18],
+ [22912, 6],
+ [22921, 18],
+ [23212, 6],
+ [23221, 18],
+ [23512, 6],
+ [23521, 18],
+ [23812, 6],
+ [23821, 18],
+ [24112, 6],
+ [24121, 18],
+ [24412, 6],
+ [24421, 18],
+ [24712, 6],
+ [24721, 18],
+ [25012, 6],
+ [25021, 18],
+ [25312, 6],
+ [25321, 18],
+ [25612, 6],
+ [25621, 18],
+ [25912, 6],
+ [25921, 18],
+ [26212, 6],
+ [26221, 18],
+ [26512, 6],
+ [26521, 18],
+ [26812, 6],
+ [26821, 17],
+ [27112, 6],
+ [27121, 17],
+ [27412, 6],
+ [27421, 17],
+ [27712, 6],
+ [27721, 16],
+ [28012, 24],
+ [28312, 24],
+ [28612, 23],
+ [28912, 6],
+ [28921, 13],
+ [29212, 6],
+ [29221, 13],
+ [29512, 6],
+ [29521, 12],
+ [29812, 6],
+ [29821, 12],
+ [30112, 6],
+ [30121, 11],
+ [30412, 6],
+ [30421, 10],
+ [30713, 5],
+ [30721, 10],
+ [31021, 9],
+ [31321, 8],
+ [31621, 8],
+ [31921, 7],
+ [32221, 7],
+ [32521, 6],
+ [32821, 5],
+ [33121, 5],
+ [33421, 4],
+ [33721, 4],
+ [34021, 3],
+ [34321, 2],
+ [34622, 1]
+ ],
+ "point": [125, 57]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.46|+01.66|-02.64",
+ "placeStationary": true,
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [180, 163, 266, 236],
+ "mask": [
+ [48780, 63],
+ [49080, 66],
+ [49380, 68],
+ [49680, 70],
+ [49980, 72],
+ [50280, 73],
+ [50580, 73],
+ [50880, 74],
+ [51180, 75],
+ [51480, 76],
+ [51780, 76],
+ [52080, 77],
+ [52380, 77],
+ [52680, 78],
+ [52980, 78],
+ [53280, 78],
+ [53580, 79],
+ [53880, 79],
+ [54180, 79],
+ [54480, 79],
+ [54780, 79],
+ [55080, 80],
+ [55380, 80],
+ [55680, 80],
+ [55980, 80],
+ [56280, 81],
+ [56580, 81],
+ [56880, 81],
+ [57180, 81],
+ [57480, 82],
+ [57780, 82],
+ [58080, 82],
+ [58380, 82],
+ [58680, 83],
+ [58980, 83],
+ [59280, 83],
+ [59580, 83],
+ [59880, 83],
+ [60180, 84],
+ [60480, 84],
+ [60780, 84],
+ [61080, 84],
+ [61380, 85],
+ [61680, 85],
+ [61980, 85],
+ [62280, 85],
+ [62580, 86],
+ [62880, 86],
+ [63180, 86],
+ [63480, 86],
+ [63780, 86],
+ [64080, 86],
+ [64380, 86],
+ [64680, 87],
+ [64980, 87],
+ [65280, 87],
+ [65580, 86],
+ [65880, 86],
+ [66180, 85],
+ [66480, 85],
+ [66780, 85],
+ [67080, 84],
+ [67380, 84],
+ [67680, 82],
+ [67980, 81],
+ [68280, 80],
+ [68580, 78],
+ [68880, 77],
+ [69180, 73],
+ [69480, 56],
+ [69780, 52],
+ [70080, 49],
+ [70380, 46],
+ [70680, 42]
+ ],
+ "point": [223, 198]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|+00.45|+00.91|-02.64"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [150, 33, 174, 119],
+ "mask": [
+ [9762, 4],
+ [10060, 8],
+ [10359, 9],
+ [10659, 9],
+ [10959, 9],
+ [11259, 9],
+ [11559, 9],
+ [11859, 9],
+ [12159, 9],
+ [12459, 9],
+ [12759, 9],
+ [13059, 9],
+ [13359, 9],
+ [13659, 9],
+ [13959, 9],
+ [14259, 9],
+ [14559, 9],
+ [14859, 9],
+ [15159, 9],
+ [15459, 9],
+ [15759, 9],
+ [16059, 9],
+ [16359, 9],
+ [16658, 10],
+ [16958, 10],
+ [17257, 12],
+ [17556, 13],
+ [17856, 14],
+ [18155, 15],
+ [18454, 17],
+ [18754, 18],
+ [19053, 19],
+ [19352, 21],
+ [19652, 21],
+ [19951, 23],
+ [20251, 23],
+ [20551, 23],
+ [20851, 23],
+ [21150, 25],
+ [21450, 24],
+ [21750, 24],
+ [22050, 24],
+ [22350, 24],
+ [22650, 24],
+ [22950, 24],
+ [23250, 24],
+ [23550, 24],
+ [23850, 24],
+ [24150, 24],
+ [24450, 24],
+ [24750, 24],
+ [25050, 24],
+ [25350, 24],
+ [25650, 23],
+ [25950, 23],
+ [26250, 23],
+ [26550, 23],
+ [26850, 23],
+ [27150, 23],
+ [27450, 23],
+ [27750, 23],
+ [28050, 23],
+ [28350, 23],
+ [28650, 23],
+ [28950, 23],
+ [29250, 23],
+ [29550, 23],
+ [29850, 22],
+ [30150, 22],
+ [30450, 22],
+ [30750, 22],
+ [31050, 22],
+ [31350, 22],
+ [31650, 22],
+ [31950, 22],
+ [32250, 22],
+ [32550, 22],
+ [32850, 22],
+ [33150, 22],
+ [33450, 22],
+ [33751, 20],
+ [34051, 20],
+ [34351, 20],
+ [34652, 18],
+ [34953, 16],
+ [35255, 13],
+ [35558, 7]
+ ],
+ "point": [162, 75]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|+00.45|+00.91|-02.64",
+ "placeStationary": true,
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [187, 163, 266, 236],
+ "mask": [
+ [48795, 48],
+ [49095, 51],
+ [49396, 52],
+ [49696, 54],
+ [49996, 56],
+ [50296, 57],
+ [50596, 57],
+ [50897, 57],
+ [51197, 58],
+ [51497, 59],
+ [51797, 59],
+ [52097, 60],
+ [52397, 60],
+ [52697, 61],
+ [52997, 61],
+ [53297, 61],
+ [53597, 62],
+ [53897, 62],
+ [54197, 62],
+ [54497, 62],
+ [54797, 62],
+ [55097, 63],
+ [55397, 63],
+ [55697, 63],
+ [55997, 63],
+ [56297, 64],
+ [56597, 28],
+ [56627, 34],
+ [56897, 27],
+ [56929, 32],
+ [57196, 27],
+ [57229, 32],
+ [57496, 26],
+ [57530, 32],
+ [57796, 20],
+ [57829, 33],
+ [58096, 19],
+ [58129, 33],
+ [58396, 17],
+ [58428, 34],
+ [58695, 18],
+ [58727, 36],
+ [58995, 17],
+ [59028, 35],
+ [59295, 17],
+ [59328, 35],
+ [59595, 16],
+ [59628, 35],
+ [59894, 16],
+ [59929, 34],
+ [60194, 16],
+ [60229, 35],
+ [60494, 15],
+ [60529, 35],
+ [60794, 15],
+ [60828, 36],
+ [61094, 14],
+ [61128, 36],
+ [61393, 14],
+ [61428, 37],
+ [61693, 14],
+ [61727, 38],
+ [61993, 13],
+ [62026, 39],
+ [62293, 13],
+ [62326, 39],
+ [62593, 12],
+ [62625, 41],
+ [62892, 13],
+ [62924, 42],
+ [63192, 13],
+ [63223, 43],
+ [63492, 14],
+ [63522, 44],
+ [63792, 14],
+ [63821, 45],
+ [64092, 14],
+ [64121, 45],
+ [64391, 16],
+ [64420, 46],
+ [64691, 17],
+ [64719, 48],
+ [64991, 18],
+ [65018, 49],
+ [65291, 20],
+ [65316, 51],
+ [65590, 76],
+ [65890, 76],
+ [66190, 75],
+ [66490, 75],
+ [66790, 75],
+ [67089, 75],
+ [67389, 75],
+ [67689, 73],
+ [67989, 72],
+ [68289, 71],
+ [68588, 70],
+ [68888, 69],
+ [69188, 65],
+ [69488, 48],
+ [69788, 44],
+ [70087, 42],
+ [70387, 39],
+ [70687, 35]
+ ],
+ "point": [228, 198]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan1",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 90,
+ "x": -1.25,
+ "y": 0.9009995,
+ "z": -1.0
+ },
+ "object_poses": [
+ {
+ "objectName": "Statue_1a4cbefa",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.1103971,
+ "z": -0.7593218
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_1a4cbefa",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.1103971,
+ "z": -0.00100004673
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_01a9d33b",
+ "position": {
+ "x": 0.969296634,
+ "y": 0.907696068,
+ "z": -2.33036685
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_01a9d33b",
+ "position": {
+ "x": 1.58206713,
+ "y": 0.5500546,
+ "z": -2.51112533
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Plate_ba789e3c",
+ "position": {
+ "x": -2.11400819,
+ "y": 1.30295467,
+ "z": 1.17630422
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_77fad61b",
+ "position": {
+ "x": -0.173900008,
+ "y": 1.7883817,
+ "z": -2.5463
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_77fad61b",
+ "position": {
+ "x": -0.9558873,
+ "y": 1.65418184,
+ "z": -2.64072633
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_30762d8a",
+ "position": {
+ "x": -1.79754007,
+ "y": 0.8049194,
+ "z": -1.50123394
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_b714915a",
+ "position": {
+ "x": 0.506796241,
+ "y": 0.136949062,
+ "z": -2.387
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_816f44ce",
+ "position": {
+ "x": 1.78926146,
+ "y": 0.8771373,
+ "z": -2.53643179
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Bread_35d530e8",
+ "position": {
+ "x": 1.09816635,
+ "y": 0.9831652,
+ "z": -2.637633
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_35d530e8",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.18406522,
+ "z": 0.251773834
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_a0b666be",
+ "position": {
+ "x": -2.01912928,
+ "y": 0.9619776,
+ "z": -2.146406
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_a0b666be",
+ "position": {
+ "x": -1.99705982,
+ "y": 0.5910905,
+ "z": 1.00317287
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_c9d70d0f",
+ "position": {
+ "x": -1.586057,
+ "y": 0.9367496,
+ "z": -1.68284321
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_cd066502",
+ "position": {
+ "x": -1.96338,
+ "y": 0.7708855,
+ "z": -1.76027608
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_1e920a81",
+ "position": {
+ "x": -1.90809989,
+ "y": 0.784756,
+ "z": -1.24219179
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_1e920a81",
+ "position": {
+ "x": -1.79754007,
+ "y": 0.784756,
+ "z": -1.24219179
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_7ed44c70",
+ "position": {
+ "x": -0.4652,
+ "y": 0.950499952,
+ "z": -2.576
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.00001,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_c5dfb511",
+ "position": {
+ "x": 2.096321,
+ "y": 0.881548,
+ "z": -2.5364337
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Glassbottle_c5dfb511",
+ "position": {
+ "x": -1.90810013,
+ "y": 0.7704729,
+ "z": -1.67392874
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_c21bc5e7",
+ "position": {
+ "x": -1.45701456,
+ "y": 1.65924633,
+ "z": -2.64124084
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_c21bc5e7",
+ "position": {
+ "x": 0.505984664,
+ "y": 1.66092885,
+ "z": -2.52531672
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_c21bc5e7",
+ "position": {
+ "x": 1.99396789,
+ "y": 0.88176,
+ "z": -2.563601
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "DishSponge_56e11318",
+ "position": {
+ "x": -1.82675266,
+ "y": 0.153403431,
+ "z": -0.10143061
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Book_f5814e4b",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.11098993,
+ "z": 0.7573217
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_c5dfb511",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.11231673,
+ "z": 0.251773834
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_c9d70d0f",
+ "position": {
+ "x": -0.8480768,
+ "y": 0.9367496,
+ "z": -2.40664244
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_35d530e8",
+ "position": {
+ "x": -0.52238363,
+ "y": 1.170449,
+ "z": -0.0282799453
+ },
+ "rotation": {
+ "x": -1.60015825e-5,
+ "y": -6.096452e-6,
+ "z": 5.407774e-5
+ }
+ },
+ {
+ "objectName": "Fork_89238ee6",
+ "position": {
+ "x": 0.2172907,
+ "y": 1.11214864,
+ "z": -0.5065479
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_dc7b7f7e",
+ "position": {
+ "x": -1.99939144,
+ "y": 1.53346038,
+ "z": 1.34379089
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_0fe5b61f",
+ "position": {
+ "x": 0.2172907,
+ "y": 1.11258078,
+ "z": 0.5045478
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_7ed44c70",
+ "position": {
+ "x": -0.0361,
+ "y": 0.950499952,
+ "z": -2.3722
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.000061,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pan_e8d2711b",
+ "position": {
+ "x": 0.2172907,
+ "y": 1.11120951,
+ "z": 0.7573217
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_ba789e3c",
+ "position": {
+ "x": 0.355485976,
+ "y": 1.10851872,
+ "z": -0.253773928
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_811f3b02",
+ "position": {
+ "x": -1.43842626,
+ "y": 0.9504683,
+ "z": -2.713901
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_d1ae33eb",
+ "position": {
+ "x": 0.895846367,
+ "y": 1.66315961,
+ "z": -2.60066533
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_30762d8a",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.14676332,
+ "z": 0.7573217
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_01a9d33b",
+ "position": {
+ "x": 0.969296634,
+ "y": 0.907696068,
+ "z": -2.40718341
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_1a4cbefa",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.1103971,
+ "z": -0.253773928
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_c21bc5e7",
+ "position": {
+ "x": 0.453817844,
+ "y": 0.9116288,
+ "z": -2.637633
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_9e34d9fc",
+ "position": {
+ "x": -1.77484643,
+ "y": 0.9156651,
+ "z": -0.8849293
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_1e920a81",
+ "position": {
+ "x": -1.77484679,
+ "y": 0.9263998,
+ "z": -2.03659749
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PaperTowelRoll_2c38299b",
+ "position": {
+ "x": 1.89316761,
+ "y": 0.657344,
+ "z": -2.45935369
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Cup_77fad61b",
+ "position": {
+ "x": -2.01865983,
+ "y": 0.7676379,
+ "z": -1.58758128
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_5ffb3206",
+ "position": {
+ "x": -1.39226007,
+ "y": 0.134699583,
+ "z": -2.35227013
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_9960ee75",
+ "position": {
+ "x": 0.3364076,
+ "y": 0.1372633,
+ "z": -2.33787346
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_b714915a",
+ "position": {
+ "x": 1.48220158,
+ "y": 0.8771372,
+ "z": -2.53643012
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "PepperShaker_816f44ce",
+ "position": {
+ "x": -1.73807192,
+ "y": 0.474345446,
+ "z": -0.05177319
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_e166a32f",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.19122255,
+ "z": -0.5065479
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_f63cc56c",
+ "position": {
+ "x": -0.197295129,
+ "y": 1.11164212,
+ "z": -0.5065479
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_a0b666be",
+ "position": {
+ "x": -2.01865983,
+ "y": 0.8203338,
+ "z": -1.41488659
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_56e11318",
+ "position": {
+ "x": -1.79754007,
+ "y": 0.769320369,
+ "z": -1.41488659
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_cd066502",
+ "position": {
+ "x": -1.93770218,
+ "y": 0.9125294,
+ "z": -0.513000965
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_b5db8038",
+ "position": {
+ "x": -1.70543051,
+ "y": 0.131299973,
+ "z": -1.27320933
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 742409392,
+ "scene_num": 1
+ },
+ "task_id": "trial_T20190906_200307_446636",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A3F7G1FSFWQPLE_3CFJTT4SXW7E899CDUG24A787AFI7S",
+ "high_descs": [
+ "Turn right and walk up to the kitchen counter, then look up at the upper cabinets.",
+ "Open the left hand door of the rightmost cupboard in front of you and remove the glass bottle, then close the door.",
+ "Turn around and begin walking across the room, stop at small black trash can just beyond the fridge and turn left to face it.",
+ "Place the glass bottle into the small black trash can on the right side.",
+ "Turn around and take a step, then turn right and begin walking across the room, hand a left and walk up the area of kitchen counter to the left of the stove.",
+ "Pick up the glass bottle that is on the kitchen counter to the left of the stove.",
+ "Turn right and walk around the kitchen island back to the small black trash can in the corner of the room.",
+ "Place the second glass bottle into the trash can to the left the bottle that is already in there."
+ ],
+ "task_desc": "Put two glass bottles in a small trash can.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A1ELPYAFO7MANS_3L4D84MIL297W9ZU8LNE7OB2YWRJH6",
+ "high_descs": [
+ "Turn right and walk to the counter.",
+ "Take the wine bottle out of the right top cabinet.",
+ "Turn around and walk to the wall. Face the bin on the left.",
+ "Put the bottle in the bin.",
+ "Turn left and walk towards the counter to the left of the stove.",
+ "Pick up the wine bottle.",
+ "Turn right and walk following the counter past the fridge back to the bin.",
+ "Put the bottle in the bin to the left and slightly in front of the previous bottle."
+ ],
+ "task_desc": "Place two win bottles in a bin.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "AFU00NU09CFXE_3OCHAWUVGR1ZTJ5RVA5CBPZ917VKXC",
+ "high_descs": [
+ "Move to stand at the counter, directly to the right of the stove. ",
+ "Open the right cupboard and remove the bottle of wine. ",
+ "Carry the bottle until you are standing lined up to the space between the fridge and trash can. ",
+ "Place the bottle in the trash can. ",
+ "Move to the counter directly to the left of the stove. ",
+ "Pick up the wine bottle from the counter. ",
+ "Carry the bottle to the trash can beside the fridge. ",
+ "Place the bottle in the trash can."
+ ],
+ "task_desc": "Throw away two wine bottles in the trash can. ",
+ "votes": [1, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200415_535998/traj_data.json b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200415_535998/traj_data.json
new file mode 100644
index 0000000..aaee81c
--- /dev/null
+++ b/storage/fixtures/alfred/train/pick_two_obj_and_place-WineBottle-None-GarbageCan-1/trial_T20190906_200415_535998/traj_data.json
@@ -0,0 +1,4857 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000048.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000049.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000050.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000051.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000052.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000053.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000054.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000055.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000056.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000057.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000058.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000059.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000060.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000061.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000062.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000063.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000064.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000065.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000066.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000067.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000068.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000069.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000070.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000071.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000072.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000073.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000074.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000075.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000076.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000077.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000078.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000079.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000080.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000081.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000082.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000083.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000116.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000117.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000118.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000119.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000120.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000121.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000122.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000123.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000124.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000125.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000126.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000127.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000128.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000129.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000130.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000131.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000132.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000133.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000134.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000135.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000136.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000137.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000138.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000139.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000140.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000141.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000142.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000143.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000144.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000145.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000146.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000147.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000148.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000149.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000150.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000151.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000152.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000153.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000154.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000155.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000156.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000157.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000158.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000159.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000160.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000161.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000162.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000163.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000164.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000165.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000166.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000167.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000168.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000169.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000170.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000171.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000172.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000173.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000174.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000175.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000176.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000177.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000178.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000179.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000180.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000181.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000182.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000183.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000184.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000185.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000186.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000187.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000188.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000189.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000190.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000191.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000192.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000193.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000194.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000195.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000196.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000197.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000198.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000199.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000200.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000201.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000202.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000203.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000204.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000205.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000206.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000207.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000208.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000209.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000210.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000211.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000212.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000213.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000214.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000215.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000216.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000217.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000218.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000219.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000220.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000221.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000222.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000223.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000224.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000225.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000226.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000227.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000228.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000229.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000230.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000231.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000232.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000233.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000234.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000235.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000236.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000237.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000238.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000239.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000240.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000241.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000242.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000243.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000244.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000245.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000246.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000247.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000248.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000249.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000250.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000251.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000252.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000253.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000254.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000255.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000256.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000257.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000258.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000259.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000260.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000261.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000262.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000263.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000264.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000265.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000266.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000267.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000268.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000269.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000270.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000271.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000272.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000273.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000274.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000275.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000276.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000277.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000278.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000279.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000280.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000281.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000282.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000283.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000284.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000285.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000286.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000287.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000288.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000289.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000290.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000291.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000292.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000293.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000294.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000295.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000296.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000297.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000298.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000299.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000300.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000301.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000302.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000303.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000304.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000305.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000306.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000307.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000308.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000309.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000310.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000311.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000312.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000313.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000314.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000315.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000316.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000317.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000318.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000319.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000320.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000321.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000322.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000323.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000324.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000325.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000326.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000327.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000328.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000329.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000330.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000331.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000332.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000333.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000334.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000335.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000336.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000337.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000338.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000339.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000340.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000341.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000342.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000343.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000344.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000345.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000346.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000347.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000348.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000349.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000350.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000351.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000352.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000353.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000354.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000355.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000356.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000357.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000358.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000359.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000360.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000361.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000362.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000363.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000364.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000365.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000366.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000367.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000368.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000369.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000370.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000371.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000372.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000373.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000374.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000375.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000376.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000377.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000378.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000379.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000380.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000381.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000382.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000383.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000384.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000385.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000386.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000387.png",
+ "low_idx": 82
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000388.png",
+ "low_idx": 82
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000389.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000390.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000391.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000392.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000393.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000394.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000395.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000396.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000397.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000398.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000399.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000400.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000401.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000402.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000403.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000404.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000405.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000406.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000407.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000408.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000409.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000410.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000411.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000412.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000413.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000414.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000415.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000416.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000417.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000418.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000419.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000420.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000421.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000422.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000423.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000424.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000425.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000426.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000427.png",
+ "low_idx": 86
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "WineBottle",
+ "parent_target": "GarbageCan",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["countertop"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|0|-5|0|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -0.236399412, -0.236399412, -3.0372872, -3.0372872, 4.4501152,
+ 4.4501152
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "CounterTop",
+ [-0.316, -0.316, -0.004, -0.004, 4.5884, 4.5884]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-00.06|+01.11|-00.76"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["garbagecan"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-6|7|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "garbagecan"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -0.236399412, -0.236399412, -3.0372872, -3.0372872, 4.4501152,
+ 4.4501152
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "GarbageCan",
+ [-7.74, -7.74, 8.116, 8.116, 0.0, 0.0]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-00.06|+01.11|-00.76",
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-5|-7|2|0"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["winebottle"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -6.270442, -6.270442, -10.27190876, -10.27190876, 6.63698532,
+ 6.63698532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [-6.7412, -6.7412, -9.8464, -9.8464, 8.06, 8.06]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.57|+01.66|-02.57"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["garbagecan"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-6|7|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["winebottle", "garbagecan"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "WineBottle",
+ [
+ -6.270442, -6.270442, -10.27190876, -10.27190876, 6.63698532,
+ 6.63698532
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "GarbageCan",
+ [-7.74, -7.74, 8.116, 8.116, 0.0, 0.0]
+ ],
+ "forceVisible": true,
+ "objectId": "WineBottle|-01.57|+01.66|-02.57",
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-00.06|+01.11|-00.76"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [100, 3, 143, 154],
+ "mask": [
+ [711, 10],
+ [1009, 14],
+ [1307, 17],
+ [1607, 17],
+ [1907, 17],
+ [2207, 17],
+ [2507, 17],
+ [2807, 17],
+ [3108, 16],
+ [3408, 16],
+ [3708, 17],
+ [4008, 17],
+ [4308, 17],
+ [4608, 17],
+ [4908, 17],
+ [5208, 17],
+ [5508, 17],
+ [5808, 17],
+ [6108, 17],
+ [6409, 16],
+ [6709, 16],
+ [7009, 16],
+ [7309, 17],
+ [7609, 17],
+ [7909, 17],
+ [8209, 17],
+ [8509, 17],
+ [8809, 17],
+ [9109, 17],
+ [9409, 17],
+ [9710, 16],
+ [10010, 16],
+ [10310, 16],
+ [10610, 16],
+ [10910, 16],
+ [11210, 17],
+ [11510, 17],
+ [11810, 17],
+ [12110, 17],
+ [12410, 17],
+ [12710, 17],
+ [13011, 16],
+ [13311, 16],
+ [13611, 16],
+ [13911, 17],
+ [14211, 17],
+ [14510, 18],
+ [14810, 19],
+ [15110, 20],
+ [15409, 21],
+ [15709, 22],
+ [16008, 24],
+ [16308, 25],
+ [16607, 26],
+ [16907, 27],
+ [17206, 29],
+ [17506, 29],
+ [17805, 31],
+ [18105, 32],
+ [18404, 34],
+ [18704, 34],
+ [19003, 36],
+ [19303, 37],
+ [19602, 38],
+ [19902, 39],
+ [20201, 40],
+ [20501, 40],
+ [20801, 41],
+ [21100, 42],
+ [21400, 42],
+ [21700, 42],
+ [22000, 43],
+ [22300, 43],
+ [22600, 43],
+ [22900, 43],
+ [23200, 43],
+ [23500, 43],
+ [23800, 43],
+ [24100, 43],
+ [24400, 43],
+ [24701, 42],
+ [25001, 42],
+ [25301, 42],
+ [25601, 42],
+ [25901, 42],
+ [26201, 42],
+ [26502, 41],
+ [26802, 41],
+ [27102, 41],
+ [27402, 41],
+ [27702, 41],
+ [28002, 41],
+ [28302, 41],
+ [28603, 40],
+ [28903, 40],
+ [29203, 40],
+ [29503, 41],
+ [29803, 41],
+ [30103, 41],
+ [30404, 40],
+ [30704, 40],
+ [31004, 40],
+ [31304, 40],
+ [31604, 40],
+ [31904, 40],
+ [32204, 40],
+ [32505, 39],
+ [32805, 39],
+ [33105, 39],
+ [33405, 39],
+ [33705, 39],
+ [34005, 39],
+ [34305, 39],
+ [34606, 38],
+ [34906, 38],
+ [35206, 38],
+ [35506, 38],
+ [35806, 38],
+ [36106, 38],
+ [36407, 37],
+ [36707, 37],
+ [37007, 37],
+ [37307, 37],
+ [37607, 37],
+ [37907, 37],
+ [38207, 37],
+ [38508, 36],
+ [38808, 36],
+ [39108, 36],
+ [39408, 36],
+ [39708, 36],
+ [40008, 36],
+ [40308, 36],
+ [40609, 35],
+ [40909, 35],
+ [41209, 35],
+ [41509, 35],
+ [41809, 35],
+ [42109, 35],
+ [42410, 34],
+ [42710, 34],
+ [43010, 34],
+ [43310, 34],
+ [43611, 32],
+ [43911, 32],
+ [44211, 31],
+ [44512, 29],
+ [44813, 27],
+ [45114, 25],
+ [45415, 22],
+ [45717, 19],
+ [46020, 13]
+ ],
+ "point": [121, 77]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-00.06|+01.11|-00.76",
+ "placeStationary": true,
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [187, 163, 266, 236],
+ "mask": [
+ [48795, 48],
+ [49095, 51],
+ [49396, 52],
+ [49696, 54],
+ [49996, 56],
+ [50296, 57],
+ [50596, 57],
+ [50897, 57],
+ [51197, 58],
+ [51497, 59],
+ [51797, 59],
+ [52097, 60],
+ [52397, 60],
+ [52697, 61],
+ [52997, 61],
+ [53297, 61],
+ [53597, 62],
+ [53897, 62],
+ [54197, 62],
+ [54497, 62],
+ [54797, 62],
+ [55097, 63],
+ [55397, 63],
+ [55697, 63],
+ [55997, 63],
+ [56297, 64],
+ [56597, 64],
+ [56897, 64],
+ [57196, 65],
+ [57496, 66],
+ [57796, 66],
+ [58096, 66],
+ [58396, 66],
+ [58695, 68],
+ [58995, 68],
+ [59295, 68],
+ [59595, 68],
+ [59894, 69],
+ [60194, 70],
+ [60494, 70],
+ [60794, 70],
+ [61094, 70],
+ [61393, 72],
+ [61693, 72],
+ [61993, 72],
+ [62293, 72],
+ [62593, 73],
+ [62892, 74],
+ [63192, 74],
+ [63492, 74],
+ [63792, 74],
+ [64092, 74],
+ [64391, 75],
+ [64691, 76],
+ [64991, 76],
+ [65291, 76],
+ [65590, 76],
+ [65890, 76],
+ [66190, 75],
+ [66490, 75],
+ [66790, 75],
+ [67089, 75],
+ [67389, 75],
+ [67689, 73],
+ [67989, 72],
+ [68289, 71],
+ [68588, 70],
+ [68888, 69],
+ [69188, 65],
+ [69488, 48],
+ [69788, 44],
+ [70087, 42],
+ [70387, 39],
+ [70687, 35]
+ ],
+ "point": [226, 198]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-01.69|+02.02|-02.46"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [138, 1, 299, 127],
+ "mask": [
+ [138, 162],
+ [438, 162],
+ [738, 162],
+ [1038, 162],
+ [1338, 162],
+ [1638, 162],
+ [1938, 162],
+ [2238, 162],
+ [2538, 162],
+ [2838, 162],
+ [3138, 162],
+ [3438, 162],
+ [3738, 162],
+ [4038, 162],
+ [4338, 162],
+ [4638, 162],
+ [4938, 162],
+ [5238, 162],
+ [5538, 162],
+ [5838, 162],
+ [6138, 162],
+ [6438, 162],
+ [6738, 162],
+ [7038, 162],
+ [7338, 162],
+ [7638, 162],
+ [7938, 162],
+ [8238, 162],
+ [8538, 162],
+ [8838, 162],
+ [9138, 162],
+ [9438, 162],
+ [9738, 162],
+ [10038, 162],
+ [10338, 162],
+ [10638, 162],
+ [10938, 162],
+ [11238, 162],
+ [11538, 162],
+ [11838, 162],
+ [12138, 162],
+ [12438, 162],
+ [12738, 162],
+ [13038, 162],
+ [13338, 162],
+ [13638, 162],
+ [13938, 162],
+ [14238, 162],
+ [14538, 162],
+ [14838, 162],
+ [15138, 162],
+ [15438, 162],
+ [15738, 162],
+ [16038, 162],
+ [16338, 162],
+ [16638, 162],
+ [16938, 162],
+ [17238, 162],
+ [17538, 162],
+ [17838, 162],
+ [18138, 162],
+ [18438, 162],
+ [18738, 162],
+ [19038, 162],
+ [19338, 162],
+ [19638, 162],
+ [19938, 162],
+ [20238, 162],
+ [20538, 162],
+ [20838, 162],
+ [21138, 162],
+ [21438, 162],
+ [21738, 162],
+ [22038, 162],
+ [22338, 162],
+ [22638, 162],
+ [22938, 162],
+ [23238, 162],
+ [23538, 162],
+ [23838, 162],
+ [24138, 162],
+ [24438, 162],
+ [24738, 162],
+ [25038, 162],
+ [25338, 162],
+ [25638, 162],
+ [25938, 162],
+ [26238, 162],
+ [26538, 162],
+ [26838, 162],
+ [27138, 162],
+ [27438, 162],
+ [27738, 162],
+ [28038, 162],
+ [28338, 162],
+ [28638, 162],
+ [28938, 162],
+ [29238, 162],
+ [29538, 162],
+ [29838, 162],
+ [30138, 162],
+ [30438, 162],
+ [30738, 162],
+ [31038, 162],
+ [31338, 162],
+ [31638, 162],
+ [31938, 162],
+ [32238, 162],
+ [32538, 162],
+ [32838, 162],
+ [33138, 162],
+ [33438, 162],
+ [33738, 162],
+ [34038, 162],
+ [34338, 162],
+ [34638, 162],
+ [34938, 162],
+ [35238, 162],
+ [35538, 162],
+ [35838, 162],
+ [36138, 162],
+ [36438, 162],
+ [36738, 162],
+ [37038, 162],
+ [37338, 162],
+ [37638, 162],
+ [37938, 162]
+ ],
+ "point": [218, 63]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "WineBottle|-01.57|+01.66|-02.57"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [236, 19, 265, 125],
+ "mask": [
+ [5650, 5],
+ [5947, 9],
+ [6246, 10],
+ [6546, 10],
+ [6846, 10],
+ [7146, 10],
+ [7446, 10],
+ [7746, 10],
+ [8046, 10],
+ [8346, 10],
+ [8646, 10],
+ [8946, 10],
+ [9246, 10],
+ [9546, 10],
+ [9846, 10],
+ [10146, 10],
+ [10446, 10],
+ [10746, 10],
+ [11046, 10],
+ [11346, 10],
+ [11646, 10],
+ [11946, 10],
+ [12246, 10],
+ [12546, 10],
+ [12846, 10],
+ [13146, 11],
+ [13445, 12],
+ [13745, 13],
+ [14045, 14],
+ [14344, 15],
+ [14643, 17],
+ [14943, 18],
+ [15242, 20],
+ [15542, 20],
+ [15841, 22],
+ [16140, 24],
+ [16440, 25],
+ [16739, 26],
+ [17039, 26],
+ [17338, 28],
+ [17637, 29],
+ [17937, 29],
+ [18237, 29],
+ [18536, 30],
+ [18836, 30],
+ [19136, 30],
+ [19436, 30],
+ [19736, 30],
+ [20036, 30],
+ [20336, 30],
+ [20636, 30],
+ [20936, 30],
+ [21236, 30],
+ [21536, 30],
+ [21836, 30],
+ [22136, 30],
+ [22436, 30],
+ [22736, 30],
+ [23036, 30],
+ [23336, 30],
+ [23636, 30],
+ [23936, 30],
+ [24236, 30],
+ [24536, 30],
+ [24836, 30],
+ [25136, 30],
+ [25436, 30],
+ [25736, 30],
+ [26036, 30],
+ [26336, 30],
+ [26636, 30],
+ [26936, 30],
+ [27236, 30],
+ [27536, 30],
+ [27836, 30],
+ [28136, 30],
+ [28436, 30],
+ [28736, 30],
+ [29036, 30],
+ [29336, 30],
+ [29636, 30],
+ [29936, 30],
+ [30236, 30],
+ [30536, 30],
+ [30836, 30],
+ [31136, 30],
+ [31436, 30],
+ [31736, 30],
+ [32036, 30],
+ [32336, 30],
+ [32636, 30],
+ [32936, 30],
+ [33236, 30],
+ [33536, 30],
+ [33836, 30],
+ [34136, 30],
+ [34436, 30],
+ [34736, 30],
+ [35036, 30],
+ [35336, 30],
+ [35636, 30],
+ [35936, 30],
+ [36236, 30],
+ [36536, 30],
+ [36836, 30],
+ [37136, 29],
+ [37438, 19]
+ ],
+ "point": [250, 71]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-01.69|+02.02|-02.46"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [112, 1, 139, 116],
+ "mask": [
+ [112, 6],
+ [121, 19],
+ [412, 6],
+ [421, 19],
+ [712, 6],
+ [721, 19],
+ [1012, 6],
+ [1021, 19],
+ [1312, 6],
+ [1321, 19],
+ [1612, 6],
+ [1621, 19],
+ [1912, 6],
+ [1921, 19],
+ [2212, 6],
+ [2221, 19],
+ [2512, 6],
+ [2521, 19],
+ [2812, 6],
+ [2821, 19],
+ [3112, 6],
+ [3121, 19],
+ [3412, 6],
+ [3421, 19],
+ [3712, 6],
+ [3721, 19],
+ [4012, 6],
+ [4021, 19],
+ [4312, 6],
+ [4321, 19],
+ [4612, 6],
+ [4621, 19],
+ [4912, 6],
+ [4921, 19],
+ [5212, 6],
+ [5221, 19],
+ [5512, 6],
+ [5521, 19],
+ [5812, 6],
+ [5821, 19],
+ [6112, 6],
+ [6121, 19],
+ [6412, 6],
+ [6421, 19],
+ [6712, 6],
+ [6721, 19],
+ [7012, 6],
+ [7021, 19],
+ [7312, 6],
+ [7321, 19],
+ [7612, 6],
+ [7621, 19],
+ [7912, 6],
+ [7921, 19],
+ [8212, 6],
+ [8221, 19],
+ [8512, 6],
+ [8521, 19],
+ [8812, 6],
+ [8821, 19],
+ [9112, 6],
+ [9121, 19],
+ [9412, 6],
+ [9421, 19],
+ [9712, 6],
+ [9721, 19],
+ [10012, 6],
+ [10021, 19],
+ [10312, 6],
+ [10321, 19],
+ [10612, 6],
+ [10621, 19],
+ [10912, 6],
+ [10921, 19],
+ [11212, 6],
+ [11221, 19],
+ [11512, 6],
+ [11521, 19],
+ [11812, 6],
+ [11821, 19],
+ [12112, 6],
+ [12121, 19],
+ [12412, 6],
+ [12421, 19],
+ [12712, 6],
+ [12721, 19],
+ [13012, 6],
+ [13021, 19],
+ [13312, 6],
+ [13321, 19],
+ [13612, 6],
+ [13621, 19],
+ [13912, 6],
+ [13921, 19],
+ [14212, 6],
+ [14221, 19],
+ [14512, 6],
+ [14521, 19],
+ [14812, 6],
+ [14821, 19],
+ [15112, 6],
+ [15121, 19],
+ [15412, 6],
+ [15421, 19],
+ [15712, 6],
+ [15721, 19],
+ [16012, 6],
+ [16021, 19],
+ [16312, 6],
+ [16321, 19],
+ [16612, 6],
+ [16621, 19],
+ [16912, 6],
+ [16921, 19],
+ [17212, 6],
+ [17221, 19],
+ [17512, 6],
+ [17521, 19],
+ [17812, 6],
+ [17821, 19],
+ [18112, 6],
+ [18121, 19],
+ [18412, 6],
+ [18421, 19],
+ [18712, 6],
+ [18721, 19],
+ [19012, 6],
+ [19021, 19],
+ [19312, 6],
+ [19321, 19],
+ [19612, 6],
+ [19621, 19],
+ [19912, 6],
+ [19921, 19],
+ [20212, 6],
+ [20221, 19],
+ [20512, 6],
+ [20521, 19],
+ [20812, 6],
+ [20821, 19],
+ [21112, 6],
+ [21121, 19],
+ [21412, 6],
+ [21421, 19],
+ [21712, 6],
+ [21721, 19],
+ [22012, 6],
+ [22021, 19],
+ [22312, 6],
+ [22321, 18],
+ [22612, 6],
+ [22621, 18],
+ [22912, 6],
+ [22921, 18],
+ [23212, 6],
+ [23221, 18],
+ [23512, 6],
+ [23521, 18],
+ [23812, 6],
+ [23821, 18],
+ [24112, 6],
+ [24121, 18],
+ [24412, 6],
+ [24421, 18],
+ [24712, 6],
+ [24721, 18],
+ [25012, 6],
+ [25021, 18],
+ [25312, 6],
+ [25321, 18],
+ [25612, 6],
+ [25621, 18],
+ [25912, 6],
+ [25921, 18],
+ [26212, 6],
+ [26221, 18],
+ [26512, 6],
+ [26521, 18],
+ [26812, 6],
+ [26821, 17],
+ [27112, 6],
+ [27121, 17],
+ [27412, 6],
+ [27421, 17],
+ [27712, 6],
+ [27721, 16],
+ [28012, 24],
+ [28312, 24],
+ [28612, 23],
+ [28912, 6],
+ [28921, 13],
+ [29212, 6],
+ [29221, 13],
+ [29512, 6],
+ [29521, 12],
+ [29812, 6],
+ [29821, 12],
+ [30112, 6],
+ [30121, 11],
+ [30412, 6],
+ [30421, 10],
+ [30713, 5],
+ [30721, 10],
+ [31021, 9],
+ [31321, 8],
+ [31621, 8],
+ [31921, 7],
+ [32221, 7],
+ [32521, 6],
+ [32821, 5],
+ [33121, 5],
+ [33421, 4],
+ [33721, 4],
+ [34021, 3],
+ [34321, 2],
+ [34622, 1]
+ ],
+ "point": [125, 57]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "WineBottle|-01.57|+01.66|-02.57",
+ "placeStationary": true,
+ "receptacleObjectId": "GarbageCan|-01.94|+00.00|+02.03"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [180, 163, 266, 236],
+ "mask": [
+ [48780, 63],
+ [49080, 66],
+ [49380, 68],
+ [49680, 70],
+ [49980, 72],
+ [50280, 73],
+ [50580, 73],
+ [50880, 74],
+ [51180, 75],
+ [51480, 76],
+ [51780, 76],
+ [52080, 77],
+ [52380, 77],
+ [52680, 78],
+ [52980, 78],
+ [53280, 78],
+ [53580, 79],
+ [53880, 79],
+ [54180, 79],
+ [54480, 79],
+ [54780, 79],
+ [55080, 80],
+ [55380, 80],
+ [55680, 80],
+ [55980, 80],
+ [56280, 81],
+ [56580, 45],
+ [56627, 34],
+ [56880, 44],
+ [56929, 32],
+ [57180, 43],
+ [57229, 32],
+ [57480, 42],
+ [57530, 32],
+ [57780, 36],
+ [57829, 33],
+ [58080, 35],
+ [58129, 33],
+ [58380, 33],
+ [58428, 34],
+ [58680, 33],
+ [58727, 36],
+ [58980, 32],
+ [59028, 35],
+ [59280, 32],
+ [59328, 35],
+ [59580, 31],
+ [59628, 35],
+ [59880, 30],
+ [59929, 34],
+ [60180, 30],
+ [60229, 35],
+ [60480, 29],
+ [60529, 35],
+ [60780, 29],
+ [60828, 36],
+ [61080, 28],
+ [61128, 36],
+ [61380, 27],
+ [61428, 37],
+ [61680, 27],
+ [61727, 38],
+ [61980, 26],
+ [62026, 39],
+ [62280, 26],
+ [62326, 39],
+ [62580, 25],
+ [62625, 41],
+ [62880, 25],
+ [62924, 42],
+ [63180, 25],
+ [63223, 43],
+ [63480, 26],
+ [63522, 44],
+ [63780, 26],
+ [63821, 45],
+ [64080, 26],
+ [64121, 45],
+ [64380, 27],
+ [64420, 46],
+ [64680, 28],
+ [64719, 48],
+ [64980, 29],
+ [65018, 49],
+ [65280, 31],
+ [65316, 51],
+ [65580, 86],
+ [65880, 86],
+ [66180, 85],
+ [66480, 85],
+ [66780, 85],
+ [67080, 84],
+ [67380, 84],
+ [67680, 82],
+ [67980, 81],
+ [68280, 80],
+ [68580, 78],
+ [68880, 77],
+ [69180, 73],
+ [69480, 56],
+ [69780, 52],
+ [70080, 49],
+ [70380, 46],
+ [70680, 42]
+ ],
+ "point": [227, 195]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan1",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 270,
+ "x": -1.25,
+ "y": 0.9009995,
+ "z": 0.25
+ },
+ "object_poses": [
+ {
+ "objectName": "Book_f5814e4b",
+ "position": {
+ "x": -1.77484679,
+ "y": 0.910789847,
+ "z": -2.146406
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_1a4cbefa",
+ "position": {
+ "x": -0.9956643,
+ "y": 0.910197,
+ "z": -2.48345661
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_dc7b7f7e",
+ "position": {
+ "x": -0.328587532,
+ "y": 1.82098532,
+ "z": -2.578435
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_ba789e3c",
+ "position": {
+ "x": 0.451126277,
+ "y": 1.65691876,
+ "z": -2.5966444
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_77fad61b",
+ "position": {
+ "x": 1.119703,
+ "y": 1.6588819,
+ "z": -2.67333269
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Cup_77fad61b",
+ "position": {
+ "x": -1.60560286,
+ "y": 0.134181738,
+ "z": -1.62344646
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_811f3b02",
+ "position": {
+ "x": -2.12060976,
+ "y": 0.837581336,
+ "z": 1.00317216
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_811f3b02",
+ "position": {
+ "x": -1.61199057,
+ "y": 0.950468361,
+ "z": -0.6989651
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_0fe5b61f",
+ "position": {
+ "x": -1.10414863,
+ "y": 0.137981415,
+ "z": -2.35227013
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_0fe5b61f",
+ "position": {
+ "x": -1.14325166,
+ "y": 0.9123807,
+ "z": -2.32982731
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_b714915a",
+ "position": {
+ "x": 1.89316678,
+ "y": 0.5493648,
+ "z": -2.61467481
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Bread_35d530e8",
+ "position": {
+ "x": 0.2172907,
+ "y": 1.18406522,
+ "z": 0.251773834
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Lettuce_e166a32f",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.19122255,
+ "z": -0.253773928
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_89238ee6",
+ "position": {
+ "x": -1.96338,
+ "y": 0.7703047,
+ "z": -1.67392874
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_cd066502",
+ "position": {
+ "x": 0.0790954158,
+ "y": 1.11272943,
+ "z": -0.7593218
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_cd066502",
+ "position": {
+ "x": 0.8929328,
+ "y": 0.143670291,
+ "z": -2.43111968
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_9e34d9fc",
+ "position": {
+ "x": -0.0361,
+ "y": 0.950499952,
+ "z": -2.5762
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.000061,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_f63cc56c",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.11164212,
+ "z": 0.7573217
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_c21bc5e7",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.1125288,
+ "z": -0.7593218
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_56e11318",
+ "position": {
+ "x": -1.90809989,
+ "y": 0.769320369,
+ "z": -1.32853913
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Book_f5814e4b",
+ "position": {
+ "x": 0.155,
+ "y": 1.1,
+ "z": 0.617
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 315.826447,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Glassbottle_c5dfb511",
+ "position": {
+ "x": 0.951810539,
+ "y": 1.66171682,
+ "z": -2.527998
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Knife_c9d70d0f",
+ "position": {
+ "x": -1.586057,
+ "y": 0.9367496,
+ "z": -2.05619359
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bread_35d530e8",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.18406522,
+ "z": -0.253773928
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Fork_89238ee6",
+ "position": {
+ "x": 1.0065074,
+ "y": 0.776772439,
+ "z": -2.3341682
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Potato_dc7b7f7e",
+ "position": {
+ "x": -2.080045,
+ "y": 0.570998251,
+ "z": 1.16859972
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_0fe5b61f",
+ "position": {
+ "x": -2.10055828,
+ "y": 0.912380755,
+ "z": -0.6989651
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Kettle_7ed44c70",
+ "position": {
+ "x": -0.059099853,
+ "y": 1.11264133,
+ "z": 0.251773834
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pan_e8d2711b",
+ "position": {
+ "x": 0.7211994,
+ "y": 0.9,
+ "z": -2.41542959
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plate_ba789e3c",
+ "position": {
+ "x": -1.43842626,
+ "y": 0.908318639,
+ "z": -2.5602715
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Tomato_811f3b02",
+ "position": {
+ "x": -2.08159924,
+ "y": 1.54204333,
+ "z": 1.26004815
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_d1ae33eb",
+ "position": {
+ "x": -1.01363826,
+ "y": 1.65845954,
+ "z": -2.604735
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Egg_30762d8a",
+ "position": {
+ "x": -1.95805407,
+ "y": 0.26363945,
+ "z": 0.920457661
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_01a9d33b",
+ "position": {
+ "x": -1.65420806,
+ "y": 0.7909139,
+ "z": -0.05457677
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_1a4cbefa",
+ "position": {
+ "x": 0.0790954158,
+ "y": 1.1103971,
+ "z": -0.253773928
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WineBottle_c21bc5e7",
+ "position": {
+ "x": -1.5676105,
+ "y": 1.65924633,
+ "z": -2.56797719
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pot_9e34d9fc",
+ "position": {
+ "x": -0.3354904,
+ "y": 1.11586511,
+ "z": -0.5065479
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spatula_1e920a81",
+ "position": {
+ "x": 0.8404269,
+ "y": 0.9256999,
+ "z": -2.33036685
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PaperTowelRoll_2c38299b",
+ "position": {
+ "x": 1.584555,
+ "y": 0.9851163,
+ "z": -2.50926256
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Cup_77fad61b",
+ "position": {
+ "x": -1.98200166,
+ "y": 1.301755,
+ "z": 1.3437891
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_5ffb3206",
+ "position": {
+ "x": 1.09816635,
+ "y": 0.9083989,
+ "z": -2.637633
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Bowl_9960ee75",
+ "position": {
+ "x": 0.355485976,
+ "y": 1.10822046,
+ "z": -0.5065479
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SaltShaker_b714915a",
+ "position": {
+ "x": -0.197295129,
+ "y": 1.10790622,
+ "z": 0.5045478
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "PepperShaker_816f44ce",
+ "position": {
+ "x": 1.89161444,
+ "y": 0.8771373,
+ "z": -2.59076881
+ },
+ "rotation": {
+ "x": -3.41504619e-6,
+ "y": 180.00032,
+ "z": -1.70754829e-5
+ }
+ },
+ {
+ "objectName": "Lettuce_e166a32f",
+ "position": {
+ "x": -0.197295129,
+ "y": 1.19122255,
+ "z": -0.00100004673
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ButterKnife_f63cc56c",
+ "position": {
+ "x": 0.582687557,
+ "y": 0.9107421,
+ "z": -2.25355029
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Apple_a0b666be",
+ "position": {
+ "x": -0.07077502,
+ "y": 1.84107757,
+ "z": -2.48203
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "DishSponge_56e11318",
+ "position": {
+ "x": 0.949909866,
+ "y": 0.6453233,
+ "z": -2.37530422
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Spoon_cd066502",
+ "position": {
+ "x": -2.01913023,
+ "y": 0.9125294,
+ "z": -0.8849293
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Mug_b5db8038",
+ "position": {
+ "x": -1.8551724,
+ "y": 0.131299973,
+ "z": -1.62344623
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 4176521029,
+ "scene_num": 1
+ },
+ "task_id": "trial_T20190906_200415_535998",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A267GLM78AMQ75_3CTOC39K3A7A3KTIVC12GBM8KLJJ7C",
+ "high_descs": [
+ "Walk to the kitchen island behind you",
+ "Grab the bottle off of the island",
+ "Walk to the trash can to the left next to the fridge",
+ "Place the bottle inside of the can",
+ "Walk to the cabinet next to the stove top to your left",
+ "Grab the bottle from the shelf",
+ "Walk back to the trash can behind you",
+ "Place the bottle inside of the can"
+ ],
+ "task_desc": "Place two bottles inside of the can",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A2M7VEYAS1405L_3TR2532VISBRZKFDC2WAAXMCPEO6JX",
+ "high_descs": [
+ "turn left and approach the oven, then turn left to face the counter across from the oven",
+ "pick up the bottle",
+ "cross the room to the trashcan next to the refrigerator",
+ "put the bottle in the trashcan",
+ "cross the room to the counter to the right of the oven",
+ "open the cabinet above the counter, take the bottle, and close the cabinet",
+ "cross the room to the trashcan next to the refrigerator",
+ "place the bottle in the trashcan in front of and to the left of the other bottle"
+ ],
+ "task_desc": "Recycle two wine bottles",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A1GVTH5YS3WOK0_3YMU66OBIQPX579T0F2BABJM6UKGHP",
+ "high_descs": [
+ "Turn left and head towards the kitchen island to your left.",
+ "Pick up the wine bottle from the kitchen island.",
+ "Head straight passed the fridge on your left and face the bin on the floor.",
+ "Place the bottle in the bin.",
+ "Turn left and head straight towards the kitchen cabinet above the plate on the counter.",
+ "Open the cabinet and take out the bottle from the cabinet.",
+ "Turn around and walk passed the fridge to the small bin on the floor to your left.",
+ "Place the bottle in the bin."
+ ],
+ "task_desc": "Put the two bottles inside the bin next to the fridge.",
+ "votes": [1, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-ToiletPaper-None-Toilet-408/trial_T20190909_080302_174780/traj_data.json b/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-ToiletPaper-None-Toilet-408/trial_T20190909_080302_174780/traj_data.json
new file mode 100644
index 0000000..487600a
--- /dev/null
+++ b/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-ToiletPaper-None-Toilet-408/trial_T20190909_080302_174780/traj_data.json
@@ -0,0 +1,3840 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000038.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000039.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000040.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000041.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000042.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000043.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000044.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000045.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000046.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000047.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000048.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000049.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000050.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000051.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000052.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000053.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000054.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000055.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000056.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000057.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000058.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000059.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000060.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000061.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000062.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000063.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000064.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000065.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000066.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000067.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000068.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000069.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000070.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000071.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000072.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000073.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000074.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000075.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000076.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000077.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000078.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000079.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000080.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000081.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000082.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000083.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000116.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000117.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000118.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000119.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000120.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000121.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000122.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000123.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000124.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000125.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000126.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000127.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000128.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000129.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000130.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000131.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000132.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000133.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000134.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000135.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000136.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000137.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000138.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000139.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000140.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000141.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000142.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000143.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000144.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000145.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000146.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000147.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000148.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000149.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000150.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000151.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000152.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000153.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000154.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000155.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000156.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000157.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000158.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000159.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000160.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000161.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000162.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000163.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000164.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000165.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000166.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000167.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000168.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000169.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000170.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000171.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000172.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000173.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000174.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000175.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000176.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000177.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000178.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000179.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000180.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000181.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000182.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000183.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000184.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000185.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000186.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000187.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000188.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000189.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000190.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000191.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000192.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000193.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000194.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000195.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000196.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000197.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000198.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000199.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000200.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000201.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000202.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000203.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000204.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000205.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000206.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000207.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000208.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000209.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000210.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000211.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000212.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000213.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000214.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000215.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000216.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000217.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000218.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000219.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000220.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000221.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000222.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000223.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000224.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000225.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000226.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000227.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000228.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000229.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000230.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000231.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000232.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000233.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000234.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000235.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000236.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000237.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000238.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000239.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000240.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000241.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000242.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000243.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000244.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000245.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000246.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000247.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000248.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000249.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000250.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000251.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000252.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000253.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000254.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000255.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000256.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000257.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000258.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000259.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000260.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000261.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000262.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000263.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000264.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000265.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000266.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000267.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000268.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000269.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000270.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000271.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000272.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000273.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000274.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000275.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000276.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000277.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000278.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000279.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000280.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000281.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000282.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000283.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000284.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000285.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000286.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000287.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000288.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000289.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000290.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000291.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000292.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000293.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000294.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000295.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000296.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000297.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000298.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000299.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000300.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000301.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000302.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000303.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000304.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000305.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000306.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000307.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000308.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000309.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000310.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000311.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000312.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000313.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000314.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000315.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000316.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000317.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000318.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000319.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000320.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000321.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000322.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000323.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000324.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000325.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000326.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000327.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000328.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000329.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000330.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000331.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000332.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000333.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000334.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000335.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000336.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000337.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000338.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000339.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000340.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000341.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000342.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000343.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000344.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000345.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000346.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000347.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000348.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000349.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000350.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000351.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000352.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000353.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000354.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000355.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000356.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000357.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000358.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000359.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000360.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000361.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000362.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000363.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000364.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000365.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000366.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000367.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000368.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000369.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000370.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000371.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000372.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000373.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000374.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000375.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000376.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000377.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000378.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000379.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000380.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000381.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000382.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000383.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000384.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000385.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000386.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000387.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000388.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000389.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000390.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000391.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000392.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000393.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000394.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000395.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000396.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000397.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000398.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000399.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000400.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000401.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000402.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000403.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000404.png",
+ "low_idx": 70
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "ToiletPaper",
+ "parent_target": "Toilet",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["toiletpaperhanger"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-6|0|0|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["toiletpaper"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "ToiletPaper",
+ [-5.664, -5.664, 2.6615996, 2.6615996, 3.2648, 3.2648]
+ ],
+ "coordinateReceptacleObjectId": [
+ "ToiletPaperHanger",
+ [-5.94, -5.94, 2.768, 2.768, 3.22, 3.22]
+ ],
+ "forceVisible": true,
+ "objectId": "ToiletPaper|-01.42|+00.82|+00.67"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["toilet"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|2|3|15"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["toiletpaper", "toilet"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "ToiletPaper",
+ [-5.664, -5.664, 2.6615996, 2.6615996, 3.2648, 3.2648]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Toilet",
+ [-4.216, -4.216, 2.212, 2.212, 0.00419187544, 0.00419187544]
+ ],
+ "forceVisible": true,
+ "objectId": "ToiletPaper|-01.42|+00.82|+00.67",
+ "receptacleObjectId": "Toilet|-01.05|+00.00|+00.55"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["cabinet"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-11|0|0|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["toiletpaper"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "ToiletPaper",
+ [
+ -11.61108304, -11.61108304, 2.78491068, 2.78491068, 0.31272364,
+ 0.31272364
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Cabinet",
+ [
+ -12.37948324, -12.37948324, 1.685427664, 1.685427664, 1.5627072,
+ 1.5627072
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "ToiletPaper|-02.90|+00.08|+00.70"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["toilet"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|2|3|15"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["toiletpaper", "toilet"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "ToiletPaper",
+ [
+ -11.61108304, -11.61108304, 2.78491068, 2.78491068, 0.31272364,
+ 0.31272364
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Toilet",
+ [-4.216, -4.216, 2.212, 2.212, 0.00419187544, 0.00419187544]
+ ],
+ "forceVisible": true,
+ "objectId": "ToiletPaper|-02.90|+00.08|+00.70",
+ "receptacleObjectId": "Toilet|-01.05|+00.00|+00.55"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "ToiletPaper|-01.42|+00.82|+00.67"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [162, 160, 187, 201],
+ "mask": [
+ [47868, 10],
+ [48165, 15],
+ [48463, 18],
+ [48762, 21],
+ [49062, 22],
+ [49362, 22],
+ [49662, 22],
+ [49962, 23],
+ [50262, 23],
+ [50562, 23],
+ [50862, 23],
+ [51163, 22],
+ [51463, 22],
+ [51763, 22],
+ [52063, 23],
+ [52363, 23],
+ [52663, 23],
+ [52963, 23],
+ [53263, 23],
+ [53563, 23],
+ [53863, 23],
+ [54163, 23],
+ [54463, 24],
+ [54763, 24],
+ [55063, 24],
+ [55363, 24],
+ [55663, 24],
+ [55963, 24],
+ [56263, 24],
+ [56563, 24],
+ [56863, 25],
+ [57163, 25],
+ [57463, 8],
+ [57477, 11],
+ [57764, 6],
+ [57777, 11],
+ [58064, 6],
+ [58077, 11],
+ [58364, 6],
+ [58377, 10],
+ [58664, 6],
+ [58677, 9],
+ [58964, 6],
+ [58977, 9],
+ [59264, 6],
+ [59277, 8],
+ [59564, 6],
+ [59578, 6],
+ [59865, 4],
+ [59878, 3],
+ [60167, 2]
+ ],
+ "point": [174, 179]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "ToiletPaper|-01.42|+00.82|+00.67",
+ "placeStationary": true,
+ "receptacleObjectId": "Toilet|-01.05|+00.00|+00.55"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [219, 238, 299, 300],
+ "mask": [
+ [71324, 43],
+ [71622, 72],
+ [71921, 74],
+ [72221, 75],
+ [72521, 76],
+ [72821, 77],
+ [73121, 78],
+ [73421, 79],
+ [73721, 79],
+ [74021, 79],
+ [74321, 79],
+ [74621, 79],
+ [74921, 79],
+ [75221, 79],
+ [75521, 79],
+ [75821, 79],
+ [76122, 78],
+ [76422, 78],
+ [76722, 78],
+ [77022, 78],
+ [77322, 78],
+ [77622, 78],
+ [77922, 78],
+ [78222, 78],
+ [78521, 79],
+ [78821, 79],
+ [79121, 79],
+ [79421, 79],
+ [79720, 80],
+ [80021, 79],
+ [80321, 79],
+ [80621, 79],
+ [80921, 79],
+ [81221, 79],
+ [81521, 79],
+ [81821, 79],
+ [82121, 79],
+ [82421, 79],
+ [82720, 80],
+ [83020, 80],
+ [83320, 80],
+ [83620, 80],
+ [83920, 80],
+ [84220, 80],
+ [84520, 80],
+ [84820, 80],
+ [85120, 80],
+ [85420, 80],
+ [85720, 80],
+ [86020, 80],
+ [86320, 80],
+ [86619, 81],
+ [86919, 81],
+ [87219, 81],
+ [87519, 81],
+ [87819, 81],
+ [88119, 81],
+ [88419, 81],
+ [88719, 81],
+ [89019, 81],
+ [89319, 56],
+ [89619, 55],
+ [89919, 55]
+ ],
+ "point": [259, 268]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "OpenObject",
+ "objectId": "Cabinet|-03.09|+00.39|+00.42"
+ },
+ "discrete_action": {
+ "action": "OpenObject",
+ "args": {
+ "bbox": [56, 168, 159, 218],
+ "mask": [
+ [50156, 104],
+ [50456, 104],
+ [50756, 104],
+ [51056, 104],
+ [51357, 103],
+ [51658, 102],
+ [51959, 101],
+ [52259, 101],
+ [52560, 100],
+ [52861, 99],
+ [53162, 98],
+ [53462, 97],
+ [53763, 96],
+ [54064, 95],
+ [54364, 95],
+ [54665, 94],
+ [54966, 93],
+ [55267, 92],
+ [55567, 92],
+ [55868, 91],
+ [56169, 90],
+ [56469, 90],
+ [56770, 89],
+ [57071, 88],
+ [57372, 86],
+ [57672, 86],
+ [57973, 85],
+ [58274, 84],
+ [58575, 83],
+ [58875, 83],
+ [59176, 82],
+ [59477, 81],
+ [59777, 81],
+ [60078, 80],
+ [60379, 79],
+ [60680, 78],
+ [60980, 78],
+ [61281, 76],
+ [61582, 75],
+ [61882, 75],
+ [62183, 74],
+ [62484, 73],
+ [62785, 72],
+ [63085, 72],
+ [63386, 71],
+ [63687, 70],
+ [63988, 69],
+ [64288, 69],
+ [64589, 68],
+ [64890, 66],
+ [65190, 66]
+ ],
+ "point": [107, 192]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "ToiletPaper|-02.90|+00.08|+00.70"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [116, 168, 133, 180],
+ "mask": [
+ [50216, 17],
+ [50516, 18],
+ [50816, 18],
+ [51117, 17],
+ [51417, 17],
+ [51717, 17],
+ [52017, 17],
+ [52318, 16],
+ [52618, 15],
+ [52919, 14],
+ [53219, 13],
+ [53520, 11],
+ [53822, 8]
+ ],
+ "point": [124, 173]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "CloseObject",
+ "objectId": "Cabinet|-03.09|+00.39|+00.42"
+ },
+ "discrete_action": {
+ "action": "CloseObject",
+ "args": {
+ "bbox": [30, 168, 155, 291],
+ "mask": [
+ [50162, 94],
+ [50454, 6],
+ [50463, 93],
+ [50754, 7],
+ [50763, 93],
+ [51054, 7],
+ [51064, 92],
+ [51353, 9],
+ [51365, 91],
+ [51653, 10],
+ [51665, 91],
+ [51953, 10],
+ [51966, 90],
+ [52253, 11],
+ [52266, 90],
+ [52553, 12],
+ [52567, 89],
+ [52852, 13],
+ [52868, 88],
+ [53152, 14],
+ [53168, 88],
+ [53452, 15],
+ [53469, 87],
+ [53752, 15],
+ [53770, 86],
+ [54052, 16],
+ [54070, 86],
+ [54351, 18],
+ [54371, 85],
+ [54651, 18],
+ [54672, 84],
+ [54951, 19],
+ [54972, 84],
+ [55251, 20],
+ [55273, 83],
+ [55551, 20],
+ [55574, 82],
+ [55850, 22],
+ [55874, 82],
+ [56150, 23],
+ [56175, 46],
+ [56225, 30],
+ [56450, 24],
+ [56476, 42],
+ [56528, 27],
+ [56750, 24],
+ [56776, 41],
+ [56829, 26],
+ [57050, 25],
+ [57077, 39],
+ [57130, 25],
+ [57349, 27],
+ [57378, 37],
+ [57430, 25],
+ [57649, 27],
+ [57678, 36],
+ [57731, 24],
+ [57949, 28],
+ [57979, 35],
+ [58032, 23],
+ [58249, 29],
+ [58280, 34],
+ [58332, 23],
+ [58548, 30],
+ [58580, 34],
+ [58632, 23],
+ [58848, 31],
+ [58881, 32],
+ [58932, 23],
+ [59148, 32],
+ [59182, 31],
+ [59232, 21],
+ [59448, 32],
+ [59482, 32],
+ [59533, 16],
+ [59748, 33],
+ [59783, 31],
+ [59833, 11],
+ [60047, 35],
+ [60084, 30],
+ [60133, 6],
+ [60347, 35],
+ [60384, 31],
+ [60433, 2],
+ [60647, 36],
+ [60685, 30],
+ [60947, 37],
+ [60986, 29],
+ [61247, 38],
+ [61286, 30],
+ [61546, 39],
+ [61587, 29],
+ [61846, 40],
+ [61888, 29],
+ [62146, 41],
+ [62188, 29],
+ [62446, 41],
+ [62489, 29],
+ [62746, 42],
+ [62790, 29],
+ [63045, 44],
+ [63090, 30],
+ [63345, 44],
+ [63391, 28],
+ [63645, 45],
+ [63692, 26],
+ [63945, 46],
+ [63992, 25],
+ [64245, 46],
+ [64293, 23],
+ [64544, 48],
+ [64844, 49],
+ [65144, 49],
+ [65444, 49],
+ [65744, 49],
+ [66043, 50],
+ [66343, 50],
+ [66643, 50],
+ [66943, 49],
+ [67243, 49],
+ [67542, 50],
+ [67842, 50],
+ [68142, 50],
+ [68442, 50],
+ [68742, 50],
+ [69041, 51],
+ [69341, 51],
+ [69641, 50],
+ [69941, 50],
+ [70240, 51],
+ [70540, 51],
+ [70840, 51],
+ [71140, 51],
+ [71440, 51],
+ [71739, 52],
+ [72039, 52],
+ [72339, 51],
+ [72639, 51],
+ [72939, 51],
+ [73238, 52],
+ [73538, 52],
+ [73838, 52],
+ [74138, 52],
+ [74438, 52],
+ [74737, 53],
+ [75037, 52],
+ [75337, 52],
+ [75637, 52],
+ [75937, 52],
+ [76236, 53],
+ [76536, 53],
+ [76836, 53],
+ [77136, 53],
+ [77436, 53],
+ [77735, 53],
+ [78035, 53],
+ [78335, 53],
+ [78635, 53],
+ [78935, 53],
+ [79234, 54],
+ [79534, 54],
+ [79834, 54],
+ [80134, 54],
+ [80434, 53],
+ [80733, 54],
+ [81033, 54],
+ [81333, 54],
+ [81633, 54],
+ [81933, 54],
+ [82232, 55],
+ [82532, 55],
+ [82832, 55],
+ [83132, 54],
+ [83431, 55],
+ [83731, 55],
+ [84031, 55],
+ [84331, 55],
+ [84631, 55],
+ [84930, 56],
+ [85230, 56],
+ [85537, 49],
+ [85845, 40],
+ [86153, 32],
+ [86461, 24],
+ [86768, 17],
+ [87076, 9]
+ ],
+ "point": [91, 228]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "ToiletPaper|-02.90|+00.08|+00.70",
+ "placeStationary": true,
+ "receptacleObjectId": "Toilet|-01.05|+00.00|+00.55"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [219, 238, 299, 300],
+ "mask": [
+ [71324, 22],
+ [71622, 23],
+ [71685, 9],
+ [71921, 24],
+ [71985, 10],
+ [72221, 24],
+ [72285, 11],
+ [72521, 24],
+ [72586, 11],
+ [72821, 24],
+ [72886, 12],
+ [73121, 24],
+ [73186, 13],
+ [73421, 24],
+ [73486, 14],
+ [73721, 24],
+ [73786, 14],
+ [74021, 24],
+ [74086, 14],
+ [74321, 24],
+ [74386, 14],
+ [74621, 23],
+ [74685, 15],
+ [74921, 23],
+ [74985, 15],
+ [75221, 23],
+ [75285, 15],
+ [75521, 23],
+ [75585, 15],
+ [75821, 23],
+ [75885, 15],
+ [76122, 22],
+ [76185, 15],
+ [76422, 22],
+ [76485, 15],
+ [76722, 22],
+ [76784, 16],
+ [77022, 22],
+ [77084, 16],
+ [77322, 21],
+ [77384, 16],
+ [77622, 21],
+ [77684, 16],
+ [77922, 21],
+ [77984, 16],
+ [78222, 21],
+ [78284, 16],
+ [78521, 22],
+ [78583, 17],
+ [78821, 22],
+ [78883, 17],
+ [79121, 22],
+ [79183, 17],
+ [79421, 22],
+ [79483, 17],
+ [79720, 23],
+ [79783, 17],
+ [80021, 21],
+ [80083, 17],
+ [80321, 21],
+ [80383, 17],
+ [80621, 21],
+ [80682, 18],
+ [80921, 21],
+ [80982, 18],
+ [81221, 21],
+ [81282, 18],
+ [81521, 21],
+ [81582, 18],
+ [81821, 21],
+ [81882, 18],
+ [82121, 21],
+ [82182, 18],
+ [82421, 22],
+ [82481, 19],
+ [82720, 24],
+ [82781, 19],
+ [83020, 25],
+ [83081, 19],
+ [83320, 25],
+ [83381, 19],
+ [83620, 26],
+ [83681, 19],
+ [83920, 27],
+ [83981, 19],
+ [84220, 28],
+ [84281, 19],
+ [84520, 29],
+ [84580, 20],
+ [84820, 31],
+ [84880, 20],
+ [85120, 33],
+ [85180, 20],
+ [85420, 35],
+ [85478, 22],
+ [85720, 37],
+ [85776, 24],
+ [86020, 39],
+ [86075, 25],
+ [86320, 49],
+ [86373, 27],
+ [86619, 81],
+ [86919, 81],
+ [87219, 81],
+ [87519, 81],
+ [87819, 81],
+ [88119, 81],
+ [88419, 81],
+ [88719, 81],
+ [89019, 81],
+ [89319, 56],
+ [89619, 55],
+ [89919, 55]
+ ],
+ "point": [252, 283]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan408",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 90,
+ "x": -2.75,
+ "y": 0.9020473,
+ "z": -0.75
+ },
+ "object_poses": [
+ {
+ "objectName": "Candle_785b187e",
+ "position": {
+ "x": -0.8607261,
+ "y": 1.08715963,
+ "z": 0.814731956
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.000336,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Candle_785b187e",
+ "position": {
+ "x": -0.173411727,
+ "y": 0.5583001,
+ "z": 0.6902845
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBar_3fe03e51",
+ "position": {
+ "x": -2.11202145,
+ "y": 0.970966339,
+ "z": 0.6458133
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBar_3fe03e51",
+ "position": {
+ "x": -2.54131413,
+ "y": 0.08125061,
+ "z": 0.889824569
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e993ea70",
+ "position": {
+ "x": -2.99230146,
+ "y": 0.0830844045,
+ "z": 0.8252923
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e993ea70",
+ "position": {
+ "x": -2.496549,
+ "y": 0.0830844045,
+ "z": 0.567163
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ToiletPaper_3de2642c",
+ "position": {
+ "x": -2.90277076,
+ "y": 0.07818091,
+ "z": 0.5026307
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ToiletPaper_3de2642c",
+ "position": {
+ "x": -2.90277076,
+ "y": 0.07818091,
+ "z": 0.69622767
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Towel_b839ade7",
+ "position": {
+ "x": -0.490000516,
+ "y": 1.3670001,
+ "z": 0.9026544
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.000259,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Candle_785b187e",
+ "position": {
+ "x": -0.173411727,
+ "y": 0.558476865,
+ "z": 0.178573072
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "HandTowel_f391da11",
+ "position": {
+ "x": -3.09641314,
+ "y": 1.587,
+ "z": 0.744
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 270.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBar_3fe03e51",
+ "position": {
+ "x": -0.9918696,
+ "y": 1.04581511,
+ "z": 0.84536624
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.000336,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ToiletPaper_3de2642c",
+ "position": {
+ "x": -1.416,
+ "y": 0.8162,
+ "z": 0.6653999
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.00002,
+ "z": 269.999969
+ }
+ },
+ {
+ "objectName": "Cloth_6a80aa54",
+ "position": {
+ "x": -1.6876781,
+ "y": 0.08189297,
+ "z": 0.8252923
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ToiletPaper_94faa429",
+ "position": {
+ "x": -2.924,
+ "y": 0.1797607,
+ "z": -1.56
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SprayBottle_0d562139",
+ "position": {
+ "x": -2.45178366,
+ "y": 0.08258498,
+ "z": 0.8252923
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "ScrubBrush_ca1847f9",
+ "position": {
+ "x": -0.4850965,
+ "y": 0.00104796886,
+ "z": 0.873910666
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "SoapBottle_e993ea70",
+ "position": {
+ "x": -0.926297247,
+ "y": 1.04764891,
+ "z": 0.937266
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 180.000336,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Plunger_6b4e4cec",
+ "position": {
+ "x": -0.710990548,
+ "y": 0.000584982336,
+ "z": 0.828180134
+ },
+ "rotation": {
+ "x": -0.00118286943,
+ "y": 0.0004387156,
+ "z": 0.0007826461
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 3798616151,
+ "scene_num": 408
+ },
+ "task_id": "trial_T20190909_080302_174780",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "AJQGWGESKQT4Y_3DIP6YHAPFJED7Y7NO7YYHPDLY78EH",
+ "high_descs": [
+ "Turn to the left and face the toilet paper holder to the left of the toilet.",
+ "Pick the toilet paper roll up from the holder.",
+ "Turn to stand on the right side of the toilet.",
+ "Put the toilet paper on the back of the toilet.",
+ "Cross the room to stand in front of the sink on the left.",
+ "Open the cabinet on the bottom left and pick up the toilet paper and shut the cabinet.",
+ "Cross the room to stand on the right side of the toilet.",
+ "Put the toilet paper on the back of the toilet."
+ ],
+ "task_desc": "Put two rolls of toilet paper on the back of a toilet.",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A1CY7IOJ9YH136_3SUWZRL0M14R9TFJU9A0E3TMF3OE68",
+ "high_descs": [
+ "go to left side of toilet to the left",
+ "pick up toilet paper roll from holder to the left of toilet",
+ "go to right side of toilet",
+ "place toilet paper roll on center of toilet",
+ "go to sink closest to wall, look at cabinet closest to wall under sink",
+ "open lower cabinet closest to wall, pick up toilet paper behind toilet paper roll from cabinet, close cabinet",
+ "turn right, go to right side of toilet",
+ "place toilet paper roll behind toilet paper roll on toilet"
+ ],
+ "task_desc": "place two toilet paper rolls on toilet",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A20FCMWP43CVIU_3OS4RQUCRC6PLJWALBBE710E55GFBE",
+ "high_descs": [
+ "walk to face toilet",
+ "pick up toilet paper from hanger",
+ "walk to face right side of toilet",
+ "put toilet paper on toilet tank lid",
+ "walk to face left hand cabinets under sink",
+ "pick up toilet paper from cabinet",
+ "walk to face right side of toilet",
+ "put toilet paper on toilet tank lid"
+ ],
+ "task_desc": "put two toilet papers on toilet tank lid",
+ "votes": [0, 1, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Vase-None-Desk-204/trial_T20190906_181531_703961/traj_data.json b/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Vase-None-Desk-204/trial_T20190906_181531_703961/traj_data.json
new file mode 100644
index 0000000..dc09459
--- /dev/null
+++ b/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Vase-None-Desk-204/trial_T20190906_181531_703961/traj_data.json
@@ -0,0 +1,4351 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000048.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000049.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000050.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000051.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000052.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000053.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000054.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000055.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000056.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000057.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000058.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000059.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000060.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000061.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000062.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000063.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000064.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000065.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000066.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000067.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000068.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000069.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000070.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000071.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000072.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000073.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000074.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000075.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000076.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000077.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000078.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000079.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000080.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000081.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000082.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000083.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000084.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000085.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000086.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000087.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000088.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000089.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000090.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000091.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000092.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000093.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000094.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000095.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000096.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000097.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000098.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000099.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000100.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000101.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000102.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000103.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000104.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000105.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000106.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000107.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000108.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000109.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000110.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000111.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000112.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000113.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000114.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000115.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000116.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000117.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000118.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000119.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000120.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000121.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000122.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000123.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000124.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000125.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000126.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000127.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000128.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000129.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000130.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000131.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000132.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000133.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000134.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000135.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000136.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000137.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000138.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000139.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000140.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000141.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000142.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000143.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000144.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000145.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000146.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000147.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000148.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000149.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000150.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000151.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000152.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000153.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000154.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000155.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000156.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000157.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000158.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000159.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000160.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000161.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000162.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000163.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000164.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000165.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000166.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000167.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000168.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000169.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000170.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000171.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000172.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000173.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000174.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000175.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000176.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000177.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000178.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000179.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000180.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000181.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000182.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000183.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000184.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000185.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000186.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000187.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000188.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000189.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000190.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000191.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000192.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000193.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000194.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000195.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000196.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000197.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000198.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000199.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000200.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000201.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000202.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000203.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000204.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000205.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000206.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000207.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000208.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000209.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000210.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000211.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000212.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000213.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000214.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000215.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000216.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000217.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000218.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000219.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000220.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000221.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000222.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000223.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000224.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000225.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000226.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000227.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000228.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000229.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000230.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000231.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000232.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000233.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000234.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000235.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000236.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000237.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000238.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000239.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000240.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000241.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000242.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000243.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000244.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000245.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000246.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000247.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000248.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000249.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000250.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000251.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000252.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000253.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000254.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000255.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000256.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000257.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000258.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000259.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000260.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000261.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000262.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000263.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000264.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000265.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000266.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000267.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000268.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000269.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000270.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000271.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000272.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000273.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000274.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000275.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000276.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000277.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000278.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000279.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000280.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000281.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000282.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000283.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000284.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000285.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000286.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000287.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000288.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000289.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000290.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000291.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000292.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000293.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000294.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000295.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000296.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000297.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000298.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000299.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000300.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000301.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000302.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000303.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000304.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000305.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000306.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000307.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000308.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000309.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000310.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000311.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000312.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000313.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000314.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000315.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000316.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000317.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000318.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000319.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000320.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000321.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000322.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000323.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000324.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000325.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000326.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000327.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000328.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000329.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000330.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000331.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000332.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000333.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000334.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000335.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000336.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000337.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000338.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000339.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000340.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000341.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000342.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000343.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000344.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000345.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000346.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000347.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000348.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000349.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000350.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000351.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000352.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000353.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000354.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000355.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000356.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000357.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000358.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000359.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000360.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000361.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000362.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000363.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000364.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000365.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000366.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000367.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000368.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000369.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000370.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000371.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000372.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000373.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000374.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000375.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000376.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000377.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000378.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000379.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000380.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000381.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000382.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000383.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000384.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000385.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000386.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000387.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000388.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000389.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000390.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000391.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000392.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000393.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000394.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000395.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000396.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000397.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000398.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000399.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000400.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000401.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000402.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000403.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000404.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000405.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000406.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000407.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000408.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000409.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000410.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000411.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000412.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000413.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000414.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000415.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000416.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000417.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000418.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000419.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000420.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000421.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000422.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000423.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000424.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000425.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000426.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000427.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000428.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000429.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000430.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000431.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000432.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000433.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000434.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000435.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000436.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000437.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000438.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000439.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000440.png",
+ "low_idx": 81
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "Vase",
+ "parent_target": "Desk",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["shelf"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-15|2|3|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["vase"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "Vase",
+ [-16.901989, -16.901989, 1.5288076, 1.5288076, 3.1562012, 3.1562012]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Shelf",
+ [-17.044, -17.044, 3.084, 3.084, 3.3328, 3.3328]
+ ],
+ "forceVisible": true,
+ "objectId": "Vase|-04.23|+00.79|+00.38"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["desk"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|10|2|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["vase", "desk"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "Vase",
+ [-16.901989, -16.901989, 1.5288076, 1.5288076, 3.1562012, 3.1562012]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Desk",
+ [-0.988, -0.988, 5.63599968, 5.63599968, 0.012, 0.012]
+ ],
+ "forceVisible": true,
+ "objectId": "Vase|-04.23|+00.79|+00.38",
+ "receptacleObjectId": "Desk|-00.25|+00.00|+01.41"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["vase"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-3|22|0|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["vase"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "Vase",
+ [
+ -2.832582, -2.832582, 24.154824, 24.154824, 2.806682588,
+ 2.806682588
+ ]
+ ],
+ "forceVisible": true,
+ "objectId": "Vase|-00.71|+00.70|+06.04"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["desk"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-2|10|2|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["vase", "desk"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "Vase",
+ [
+ -2.832582, -2.832582, 24.154824, 24.154824, 2.806682588,
+ 2.806682588
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Desk",
+ [-0.988, -0.988, 5.63599968, 5.63599968, 0.012, 0.012]
+ ],
+ "forceVisible": true,
+ "objectId": "Vase|-00.71|+00.70|+06.04",
+ "receptacleObjectId": "Desk|-00.25|+00.00|+01.41"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "Vase|-04.23|+00.79|+00.38"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [86, 108, 141, 160],
+ "mask": [
+ [32207, 6],
+ [32506, 14],
+ [32805, 19],
+ [33103, 24],
+ [33401, 28],
+ [33699, 32],
+ [33997, 35],
+ [34296, 37],
+ [34595, 39],
+ [34894, 41],
+ [35192, 44],
+ [35491, 46],
+ [35791, 47],
+ [36090, 49],
+ [36389, 50],
+ [36689, 51],
+ [36988, 52],
+ [37288, 53],
+ [37588, 53],
+ [37887, 54],
+ [38187, 54],
+ [38487, 55],
+ [38786, 56],
+ [39086, 56],
+ [39386, 56],
+ [39686, 56],
+ [39986, 56],
+ [40286, 56],
+ [40586, 56],
+ [40886, 56],
+ [41186, 56],
+ [41486, 55],
+ [41786, 55],
+ [42087, 54],
+ [42387, 54],
+ [42687, 53],
+ [42988, 52],
+ [43288, 51],
+ [43589, 50],
+ [43889, 49],
+ [44190, 48],
+ [44491, 46],
+ [44791, 45],
+ [45092, 43],
+ [45393, 41],
+ [45694, 39],
+ [45995, 37],
+ [46297, 34],
+ [46598, 32],
+ [46900, 28],
+ [47202, 24],
+ [47505, 19],
+ [47807, 14]
+ ],
+ "point": [113, 133]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "Vase|-04.23|+00.79|+00.38",
+ "placeStationary": true,
+ "receptacleObjectId": "Desk|-00.25|+00.00|+01.41"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [0, 1, 299, 173],
+ "mask": [
+ [0, 34],
+ [156, 143],
+ [300, 36],
+ [456, 143],
+ [600, 37],
+ [756, 182],
+ [1055, 185],
+ [1355, 186],
+ [1655, 187],
+ [1954, 190],
+ [2254, 191],
+ [2553, 193],
+ [2853, 194],
+ [3153, 196],
+ [3452, 198],
+ [3752, 199],
+ [4052, 201],
+ [4351, 203],
+ [4651, 204],
+ [4950, 207],
+ [5250, 208],
+ [5550, 209],
+ [5849, 212],
+ [6149, 212],
+ [6449, 212],
+ [6749, 213],
+ [7049, 213],
+ [7349, 213],
+ [7649, 151],
+ [7803, 59],
+ [7949, 151],
+ [8107, 56],
+ [8249, 151],
+ [8409, 54],
+ [8549, 151],
+ [8711, 52],
+ [8849, 151],
+ [9012, 52],
+ [9149, 151],
+ [9312, 52],
+ [9449, 151],
+ [9613, 51],
+ [9749, 151],
+ [9913, 52],
+ [10049, 151],
+ [10214, 51],
+ [10349, 151],
+ [10514, 51],
+ [10649, 151],
+ [10814, 52],
+ [10949, 151],
+ [11114, 52],
+ [11249, 151],
+ [11414, 52],
+ [11549, 151],
+ [11713, 54],
+ [11849, 151],
+ [12013, 54],
+ [12149, 151],
+ [12312, 55],
+ [12449, 151],
+ [12611, 57],
+ [12749, 151],
+ [12911, 57],
+ [13049, 151],
+ [13210, 58],
+ [13349, 151],
+ [13508, 61],
+ [13649, 151],
+ [13807, 62],
+ [13949, 151],
+ [14106, 63],
+ [14249, 151],
+ [14404, 66],
+ [14549, 151],
+ [14702, 68],
+ [14849, 221],
+ [15149, 221],
+ [15449, 222],
+ [15749, 222],
+ [16049, 222],
+ [16349, 223],
+ [16649, 223],
+ [16949, 223],
+ [17249, 224],
+ [17549, 224],
+ [17849, 224],
+ [18149, 225],
+ [18449, 225],
+ [18749, 225],
+ [19049, 226],
+ [19349, 226],
+ [19649, 226],
+ [19949, 227],
+ [20249, 227],
+ [20549, 227],
+ [20849, 228],
+ [21149, 228],
+ [21449, 228],
+ [21749, 229],
+ [22049, 229],
+ [22349, 229],
+ [22649, 229],
+ [22949, 230],
+ [23249, 230],
+ [23549, 230],
+ [23849, 231],
+ [24149, 231],
+ [24449, 231],
+ [24749, 232],
+ [25049, 232],
+ [25349, 232],
+ [25649, 233],
+ [25949, 233],
+ [26249, 233],
+ [26549, 5364],
+ [32010, 203],
+ [32310, 203],
+ [32610, 203],
+ [32910, 203],
+ [33210, 203],
+ [33510, 203],
+ [33810, 203],
+ [34111, 201],
+ [34411, 201],
+ [34711, 201],
+ [35011, 201],
+ [35311, 201],
+ [35611, 201],
+ [35911, 201],
+ [36212, 200],
+ [36512, 200],
+ [36812, 200],
+ [37112, 200],
+ [37412, 199],
+ [37712, 199],
+ [38012, 199],
+ [38313, 198],
+ [38613, 198],
+ [38913, 198],
+ [39213, 198],
+ [39513, 198],
+ [39813, 198],
+ [40113, 198],
+ [40414, 197],
+ [40714, 196],
+ [41014, 196],
+ [41314, 196],
+ [41614, 196],
+ [41914, 196],
+ [42214, 196],
+ [42515, 195],
+ [42815, 84],
+ [42900, 110],
+ [43115, 83],
+ [43200, 110],
+ [43415, 82],
+ [43500, 110],
+ [43715, 81],
+ [43800, 110],
+ [44015, 80],
+ [44100, 109],
+ [44316, 78],
+ [44400, 109],
+ [44616, 77],
+ [44700, 109],
+ [44916, 76],
+ [45000, 109],
+ [45216, 75],
+ [45300, 109],
+ [45516, 74],
+ [45600, 109],
+ [45816, 73],
+ [45900, 109],
+ [46116, 72],
+ [46200, 109],
+ [46417, 71],
+ [46500, 109],
+ [46717, 70],
+ [46800, 109],
+ [47017, 69],
+ [47100, 109],
+ [47317, 68],
+ [47400, 108],
+ [47617, 67],
+ [47701, 107],
+ [47917, 66],
+ [48002, 106],
+ [48217, 65],
+ [48302, 106],
+ [48518, 63],
+ [48603, 105],
+ [48818, 62],
+ [48904, 104],
+ [49118, 61],
+ [49204, 104],
+ [49418, 60],
+ [49505, 103],
+ [49718, 60],
+ [49806, 102],
+ [50018, 60],
+ [50106, 102],
+ [50318, 60],
+ [50407, 101],
+ [50619, 58],
+ [50708, 99],
+ [50919, 57],
+ [51009, 98],
+ [51219, 56],
+ [51309, 98],
+ [51519, 55],
+ [51610, 97],
+ [51819, 54]
+ ],
+ "point": [149, 86]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "Vase|-00.71|+00.70|+06.04"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [136, 88, 186, 155],
+ "mask": [
+ [26261, 6],
+ [26560, 8],
+ [26860, 8],
+ [27160, 9],
+ [27460, 8],
+ [27760, 8],
+ [28059, 9],
+ [28359, 9],
+ [28659, 9],
+ [28959, 9],
+ [29259, 9],
+ [29559, 9],
+ [29859, 9],
+ [30159, 9],
+ [30459, 9],
+ [30759, 9],
+ [31059, 9],
+ [31359, 9],
+ [31658, 10],
+ [31956, 12],
+ [32252, 18],
+ [32549, 24],
+ [32848, 27],
+ [33146, 31],
+ [33445, 33],
+ [33744, 35],
+ [34043, 37],
+ [34342, 39],
+ [34641, 41],
+ [34940, 43],
+ [35240, 43],
+ [35539, 45],
+ [35839, 46],
+ [36138, 47],
+ [36438, 47],
+ [36738, 48],
+ [37037, 49],
+ [37337, 49],
+ [37637, 49],
+ [37937, 49],
+ [38237, 50],
+ [38536, 51],
+ [38836, 51],
+ [39137, 50],
+ [39437, 50],
+ [39737, 49],
+ [40037, 49],
+ [40337, 49],
+ [40637, 49],
+ [40937, 49],
+ [41237, 48],
+ [41538, 47],
+ [41838, 47],
+ [42139, 45],
+ [42439, 45],
+ [42740, 43],
+ [43041, 42],
+ [43341, 41],
+ [43642, 39],
+ [43943, 37],
+ [44244, 35],
+ [44545, 33],
+ [44846, 31],
+ [45147, 29],
+ [45448, 26],
+ [45750, 23],
+ [46052, 19],
+ [46355, 13]
+ ],
+ "point": [161, 120]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "Vase|-00.71|+00.70|+06.04",
+ "placeStationary": true,
+ "receptacleObjectId": "Desk|-00.25|+00.00|+01.41"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [0, 1, 299, 173],
+ "mask": [
+ [0, 34],
+ [156, 143],
+ [300, 36],
+ [456, 143],
+ [600, 37],
+ [756, 182],
+ [1055, 185],
+ [1355, 186],
+ [1655, 187],
+ [1954, 190],
+ [2254, 191],
+ [2553, 193],
+ [2853, 194],
+ [3153, 196],
+ [3452, 198],
+ [3752, 199],
+ [4052, 201],
+ [4351, 203],
+ [4651, 204],
+ [4950, 207],
+ [5250, 208],
+ [5550, 209],
+ [5849, 212],
+ [6149, 212],
+ [6449, 212],
+ [6749, 213],
+ [7049, 213],
+ [7349, 213],
+ [7649, 151],
+ [7803, 59],
+ [7949, 151],
+ [8107, 56],
+ [8249, 26],
+ [8277, 123],
+ [8409, 54],
+ [8549, 24],
+ [8579, 121],
+ [8711, 52],
+ [8849, 23],
+ [8880, 120],
+ [9012, 52],
+ [9149, 23],
+ [9180, 120],
+ [9312, 52],
+ [9449, 23],
+ [9480, 120],
+ [9613, 51],
+ [9749, 23],
+ [9780, 120],
+ [9913, 52],
+ [10049, 23],
+ [10080, 120],
+ [10214, 51],
+ [10349, 23],
+ [10379, 121],
+ [10514, 51],
+ [10649, 23],
+ [10679, 121],
+ [10814, 52],
+ [10949, 21],
+ [10980, 120],
+ [11114, 52],
+ [11249, 17],
+ [11281, 119],
+ [11414, 52],
+ [11549, 14],
+ [11584, 116],
+ [11713, 54],
+ [11849, 12],
+ [11886, 114],
+ [12013, 54],
+ [12149, 10],
+ [12188, 112],
+ [12312, 55],
+ [12449, 9],
+ [12489, 111],
+ [12611, 57],
+ [12749, 8],
+ [12790, 110],
+ [12911, 57],
+ [13049, 7],
+ [13092, 108],
+ [13210, 58],
+ [13349, 6],
+ [13392, 108],
+ [13508, 61],
+ [13649, 6],
+ [13693, 107],
+ [13807, 62],
+ [13949, 5],
+ [13994, 106],
+ [14106, 63],
+ [14249, 5],
+ [14294, 106],
+ [14404, 66],
+ [14549, 4],
+ [14594, 106],
+ [14702, 68],
+ [14849, 4],
+ [14895, 175],
+ [15149, 4],
+ [15195, 175],
+ [15449, 4],
+ [15495, 176],
+ [15749, 3],
+ [15796, 175],
+ [16049, 3],
+ [16096, 175],
+ [16349, 3],
+ [16395, 177],
+ [16649, 3],
+ [16695, 177],
+ [16949, 3],
+ [16995, 177],
+ [17249, 4],
+ [17295, 178],
+ [17549, 4],
+ [17595, 178],
+ [17849, 4],
+ [17895, 178],
+ [18149, 4],
+ [18195, 179],
+ [18449, 5],
+ [18494, 180],
+ [18749, 5],
+ [18794, 180],
+ [19049, 6],
+ [19093, 182],
+ [19349, 6],
+ [19393, 182],
+ [19649, 7],
+ [19692, 183],
+ [19949, 7],
+ [19991, 185],
+ [20249, 8],
+ [20290, 186],
+ [20549, 8],
+ [20589, 187],
+ [20849, 10],
+ [20889, 188],
+ [21149, 11],
+ [21188, 189],
+ [21449, 12],
+ [21486, 191],
+ [21749, 13],
+ [21785, 193],
+ [22049, 15],
+ [22083, 195],
+ [22349, 16],
+ [22381, 197],
+ [22649, 19],
+ [22678, 200],
+ [22949, 230],
+ [23249, 230],
+ [23549, 230],
+ [23849, 231],
+ [24149, 231],
+ [24449, 231],
+ [24749, 232],
+ [25049, 232],
+ [25349, 232],
+ [25649, 233],
+ [25949, 233],
+ [26249, 233],
+ [26549, 5364],
+ [32010, 203],
+ [32310, 203],
+ [32610, 203],
+ [32910, 203],
+ [33210, 203],
+ [33510, 203],
+ [33810, 203],
+ [34111, 201],
+ [34411, 201],
+ [34711, 201],
+ [35011, 201],
+ [35311, 201],
+ [35611, 201],
+ [35911, 201],
+ [36212, 200],
+ [36512, 200],
+ [36812, 200],
+ [37112, 200],
+ [37412, 199],
+ [37712, 199],
+ [38012, 199],
+ [38313, 198],
+ [38613, 198],
+ [38913, 198],
+ [39213, 198],
+ [39513, 198],
+ [39813, 198],
+ [40113, 198],
+ [40414, 197],
+ [40714, 196],
+ [41014, 196],
+ [41314, 196],
+ [41614, 196],
+ [41914, 196],
+ [42214, 196],
+ [42515, 195],
+ [42815, 84],
+ [42900, 110],
+ [43115, 83],
+ [43200, 110],
+ [43415, 82],
+ [43500, 110],
+ [43715, 81],
+ [43800, 110],
+ [44015, 80],
+ [44100, 109],
+ [44316, 78],
+ [44400, 109],
+ [44616, 77],
+ [44700, 109],
+ [44916, 76],
+ [45000, 109],
+ [45216, 75],
+ [45300, 109],
+ [45516, 74],
+ [45600, 109],
+ [45816, 73],
+ [45900, 109],
+ [46116, 72],
+ [46200, 109],
+ [46417, 71],
+ [46500, 109],
+ [46717, 70],
+ [46800, 109],
+ [47017, 69],
+ [47100, 109],
+ [47317, 68],
+ [47400, 108],
+ [47617, 67],
+ [47701, 107],
+ [47917, 66],
+ [48002, 106],
+ [48217, 65],
+ [48302, 106],
+ [48518, 63],
+ [48603, 105],
+ [48818, 62],
+ [48904, 104],
+ [49118, 61],
+ [49204, 104],
+ [49418, 60],
+ [49505, 103],
+ [49718, 60],
+ [49806, 102],
+ [50018, 60],
+ [50106, 102],
+ [50318, 60],
+ [50407, 101],
+ [50619, 58],
+ [50708, 99],
+ [50919, 57],
+ [51009, 98],
+ [51219, 56],
+ [51309, 98],
+ [51519, 55],
+ [51610, 97],
+ [51819, 54]
+ ],
+ "point": [149, 86]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan204",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 90,
+ "x": -3.75,
+ "y": 0.9023143,
+ "z": 0.0
+ },
+ "object_poses": [
+ {
+ "objectName": "CellPhone_204455c6",
+ "position": {
+ "x": -0.310754538,
+ "y": 0.6956049,
+ "z": 5.572293
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 314.9998,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CellPhone_204455c6",
+ "position": {
+ "x": -2.23807335,
+ "y": 0.6583049,
+ "z": -2.20216084
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_1332ecdc",
+ "position": {
+ "x": -2.10600162,
+ "y": 0.452786773,
+ "z": 4.048838
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_1332ecdc",
+ "position": {
+ "x": -4.287632,
+ "y": 1.652496,
+ "z": 0.322230339
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Box_6194c360",
+ "position": {
+ "x": -0.355232179,
+ "y": 1.0317893,
+ "z": 1.69095564
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pillow_b4695ca2",
+ "position": {
+ "x": -3.585542,
+ "y": 0.451097369,
+ "z": 4.41550159
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.9998245,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Laptop_b52a600c",
+ "position": {
+ "x": -2.46511,
+ "y": 0.653,
+ "z": -1.82036531
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Laptop_b52a600c",
+ "position": {
+ "x": -1.1028899,
+ "y": 0.653,
+ "z": -2.20216084
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Box_6194c360",
+ "position": {
+ "x": -2.01103663,
+ "y": 0.945289254,
+ "z": -2.20216084
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_dcfe6563",
+ "position": {
+ "x": -0.7081455,
+ "y": 0.701670647,
+ "z": 6.038706
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 314.9998,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CellPhone_204455c6",
+ "position": {
+ "x": -2.10600162,
+ "y": 0.4560957,
+ "z": 3.91032052
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WateringCan_e84430bf",
+ "position": {
+ "x": -3.58006978,
+ "y": 0.003281735,
+ "z": 5.50719547
+ },
+ "rotation": {
+ "x": 2.6860044,
+ "y": 0.470533878,
+ "z": 359.630249
+ }
+ },
+ {
+ "objectName": "KeyChain_dc99b2bc",
+ "position": {
+ "x": -2.24615574,
+ "y": 0.453626543,
+ "z": 4.602909
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_6ec6da3b",
+ "position": {
+ "x": -4.24254131,
+ "y": 0.7890503,
+ "z": 1.18166792
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_a35e5095",
+ "position": {
+ "x": -1.55696332,
+ "y": 0.660159469,
+ "z": -2.32942581
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Laptop_b52a600c",
+ "position": {
+ "x": -1.66392732,
+ "y": 0.3875025,
+ "z": 5.82666874
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 179.999664,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pillow_b4695ca2",
+ "position": {
+ "x": -3.58554053,
+ "y": 0.451097369,
+ "z": 3.88196445
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 89.9998245,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "RemoteControl_c0567e89",
+ "position": {
+ "x": -4.136371,
+ "y": 0.7960634,
+ "z": 1.07017982
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_1332ecdc",
+ "position": {
+ "x": -1.68554,
+ "y": 0.452786773,
+ "z": 4.602909
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Vase_e6ddb463",
+ "position": {
+ "x": -4.22549725,
+ "y": 0.7890503,
+ "z": 0.3822019
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_0b2c9eee",
+ "position": {
+ "x": -4.223063,
+ "y": 1.263494,
+ "z": 0.3990282
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_aa71ba08",
+ "position": {
+ "x": -4.32727242,
+ "y": 1.66256392,
+ "z": 0.621410131
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 90.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_be040014",
+ "position": {
+ "x": -1.68554,
+ "y": 0.554315031,
+ "z": 3.91032052
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 3261514095,
+ "scene_num": 204
+ },
+ "task_id": "trial_T20190906_181531_703961",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A28HB7240OFGEW_3OVHNO1VE9IGK8ZW4B7A4XKTNA4DZH",
+ "high_descs": [
+ "Turn around and stand in front of the white shelves.",
+ "Pick up the blue jar from the white shelf.",
+ "Turn around and walk over to the black desk with the box on top of it.",
+ "Put the Blue jar next to the open box.",
+ "Turn around and walk to the black entertainment center.",
+ "Pick up the yellow jar from the entertainment center.",
+ "Walk over to the black desk. ",
+ "Put the yellow jar on the black desk next to the blue jar."
+ ],
+ "task_desc": "Put the yellow and blue jars on the black desk.",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A3HL2LL0LEPZT8_3WMOAN2SREE8X0LZS8WAFWJRD2NNVU",
+ "high_descs": [
+ "Turn around and face the shelves.",
+ "Pick up the blue vase on the bottom shelf.",
+ "Turn right, go towards the couch, turn right, walk in front of the black desk.",
+ "Put the blue vase on the desk to the right of the box.",
+ "Turn around, walk to the television stand.",
+ "Pick up the yellow vase on the left side of the television stand.",
+ "Turn around, walk to the black desk.",
+ "Put the yellow vase on the black desk to the right of the blue vase."
+ ],
+ "task_desc": "Put all the vases on the black desk.",
+ "votes": [1, 1, 1]
+ },
+ {
+ "assignment_id": "A13OOAT2ORKH6V_3018Q3ZVOL79KAATAKMVSTAPWMMRAV",
+ "high_descs": [
+ "Turn left and left again to face the shelf.",
+ "Pick up the vase from the lower shelf.",
+ "Turn around and walk to the black table to your right.",
+ "Place the vase on the table.",
+ "Turn around and walk to the television stand to your right.",
+ "Grab the yellow vase on the table.",
+ "Turn around and take the yellow vase to the table to your left.",
+ "Place the yellow vase next to the blue vase on the table."
+ ],
+ "task_desc": "Place the yellow and blue vase on the table.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A3MXBLYX2CDGTP_3V5Q80FXI08SW5UNMFSK4DOBEJV23A",
+ "high_descs": [
+ "Turn around to the shelf with the blue vase on it.",
+ "Take the blue vase from the shelf.",
+ "Turn around and walk towards the desk, walk around to the front of the desk.",
+ "Put the vase on the desk.",
+ "Turn around and walk to the stand with the TV on it.",
+ "Pick up the yellow vase on the TV stand.",
+ "Turn around and walk to the desk.",
+ "Put the yellow vase next to the blue vase on the desk."
+ ],
+ "task_desc": "Put two vases on the desk.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A1ELPYAFO7MANS_3M0NZ3JDP4FLGVK3P5PR6LW1AT85Z3",
+ "high_descs": [
+ "Turn around and face the shelves.",
+ "Pick up the blue object from the bottom shelf.",
+ "Turn around and veer left to the far side of the black desk.",
+ "Place the blue object on the desk to the right of the box.",
+ "Turn around and walk straight to the TV stand.",
+ "Pick the yellow object up off the TV stand.",
+ "Turn around and walk back to the desk.",
+ "Put the yellow item on the desk to the right of the blue item."
+ ],
+ "task_desc": "Put two items on a desk.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "AO33H4GL9KZX9_3Y5140Z9D0X3EFDC9GAJ4WYT8CPPIR",
+ "high_descs": [
+ "Turn around and face the book shelf on the wall.",
+ "Pick up the blue bottle on the bottom shelf. ",
+ "Turn around and go to the black desk on the other side of the room. ",
+ "Place the blue bottle on the desk on the right of the box.",
+ "Turn around and go to the TV stand. ",
+ "Pick up the yellow bottle in front of the TV.",
+ "Turn around and go back to the black desk. ",
+ "Place the yellow bottle on the desk to the right of the blue bottle. "
+ ],
+ "task_desc": "Move the bottles to the desk. ",
+ "votes": [1, 1, 0]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Watch-None-Dresser-205/trial_T20190907_182211_592010/traj_data.json b/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Watch-None-Dresser-205/trial_T20190907_182211_592010/traj_data.json
new file mode 100644
index 0000000..6ad35e0
--- /dev/null
+++ b/storage/fixtures/alfred/valid_seen/pick_two_obj_and_place-Watch-None-Dresser-205/trial_T20190907_182211_592010/traj_data.json
@@ -0,0 +1,5149 @@
+{
+ "images": [
+ {
+ "high_idx": 0,
+ "image_name": "000000000.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000001.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000002.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000003.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000004.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000005.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000006.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000007.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000008.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000009.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000010.png",
+ "low_idx": 0
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000011.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000012.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000013.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000014.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000015.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000016.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000017.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000018.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000019.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000020.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000021.png",
+ "low_idx": 1
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000022.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000023.png",
+ "low_idx": 2
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000024.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000025.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000026.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000027.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000028.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000029.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000030.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000031.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000032.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000033.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000034.png",
+ "low_idx": 3
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000035.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000036.png",
+ "low_idx": 4
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000037.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000038.png",
+ "low_idx": 5
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000039.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000040.png",
+ "low_idx": 6
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000041.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000042.png",
+ "low_idx": 7
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000043.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000044.png",
+ "low_idx": 8
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000045.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000046.png",
+ "low_idx": 9
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000047.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000048.png",
+ "low_idx": 10
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000049.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000050.png",
+ "low_idx": 11
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000051.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000052.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000053.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000054.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000055.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000056.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000057.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000058.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000059.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000060.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000061.png",
+ "low_idx": 12
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000062.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000063.png",
+ "low_idx": 13
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000064.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000065.png",
+ "low_idx": 14
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000066.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000067.png",
+ "low_idx": 15
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000068.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000069.png",
+ "low_idx": 16
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000070.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000071.png",
+ "low_idx": 17
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000072.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000073.png",
+ "low_idx": 18
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000074.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000075.png",
+ "low_idx": 19
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000076.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000077.png",
+ "low_idx": 20
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000078.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000079.png",
+ "low_idx": 21
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000080.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000081.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000082.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000083.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000084.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000085.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000086.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000087.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000088.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000089.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000090.png",
+ "low_idx": 22
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000091.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000092.png",
+ "low_idx": 23
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000093.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000094.png",
+ "low_idx": 24
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000095.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000096.png",
+ "low_idx": 25
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000097.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000098.png",
+ "low_idx": 26
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000099.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000100.png",
+ "low_idx": 27
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000101.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000102.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000103.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000104.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000105.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000106.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000107.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000108.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000109.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000110.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000111.png",
+ "low_idx": 28
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000112.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000113.png",
+ "low_idx": 29
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000114.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000115.png",
+ "low_idx": 30
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000116.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000117.png",
+ "low_idx": 31
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000118.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000119.png",
+ "low_idx": 32
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000120.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000121.png",
+ "low_idx": 33
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000122.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000123.png",
+ "low_idx": 34
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000124.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000125.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000126.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000127.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000128.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000129.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000130.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000131.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000132.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000133.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 0,
+ "image_name": "000000134.png",
+ "low_idx": 35
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000135.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000136.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000137.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000138.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000139.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000140.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000141.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000142.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000143.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000144.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000145.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000146.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000147.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000148.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 1,
+ "image_name": "000000149.png",
+ "low_idx": 36
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000150.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000151.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000152.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000153.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000154.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000155.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000156.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000157.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000158.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000159.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000160.png",
+ "low_idx": 37
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000161.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000162.png",
+ "low_idx": 38
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000163.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000164.png",
+ "low_idx": 39
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000165.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000166.png",
+ "low_idx": 40
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000167.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000168.png",
+ "low_idx": 41
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000169.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000170.png",
+ "low_idx": 42
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000171.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000172.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000173.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000174.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000175.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000176.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000177.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000178.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000179.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000180.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000181.png",
+ "low_idx": 43
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000182.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000183.png",
+ "low_idx": 44
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000184.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000185.png",
+ "low_idx": 45
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000186.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000187.png",
+ "low_idx": 46
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000188.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000189.png",
+ "low_idx": 47
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000190.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000191.png",
+ "low_idx": 48
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000192.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000193.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000194.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000195.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000196.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000197.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000198.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000199.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000200.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000201.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000202.png",
+ "low_idx": 49
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000203.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000204.png",
+ "low_idx": 50
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000205.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000206.png",
+ "low_idx": 51
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000207.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000208.png",
+ "low_idx": 52
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000209.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000210.png",
+ "low_idx": 53
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000211.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000212.png",
+ "low_idx": 54
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000213.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000214.png",
+ "low_idx": 55
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000215.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000216.png",
+ "low_idx": 56
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000217.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000218.png",
+ "low_idx": 57
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000219.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000220.png",
+ "low_idx": 58
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000221.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000222.png",
+ "low_idx": 59
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000223.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000224.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000225.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000226.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000227.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000228.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000229.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000230.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000231.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000232.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000233.png",
+ "low_idx": 60
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000234.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000235.png",
+ "low_idx": 61
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000236.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000237.png",
+ "low_idx": 62
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000238.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000239.png",
+ "low_idx": 63
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000240.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000241.png",
+ "low_idx": 64
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000242.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000243.png",
+ "low_idx": 65
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000244.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000245.png",
+ "low_idx": 66
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000246.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000247.png",
+ "low_idx": 67
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000248.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000249.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000250.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000251.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000252.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000253.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000254.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000255.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000256.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000257.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000258.png",
+ "low_idx": 68
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000259.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000260.png",
+ "low_idx": 69
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000261.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000262.png",
+ "low_idx": 70
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000263.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000264.png",
+ "low_idx": 71
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000265.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000266.png",
+ "low_idx": 72
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000267.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000268.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000269.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000270.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000271.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000272.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000273.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000274.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000275.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000276.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 2,
+ "image_name": "000000277.png",
+ "low_idx": 73
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000278.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000279.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000280.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000281.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000282.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000283.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000284.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000285.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000286.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000287.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000288.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000289.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000290.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000291.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 3,
+ "image_name": "000000292.png",
+ "low_idx": 74
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000293.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000294.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000295.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000296.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000297.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000298.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000299.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000300.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000301.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000302.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000303.png",
+ "low_idx": 75
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000304.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000305.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000306.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000307.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000308.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000309.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000310.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000311.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000312.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000313.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000314.png",
+ "low_idx": 76
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000315.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000316.png",
+ "low_idx": 77
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000317.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000318.png",
+ "low_idx": 78
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000319.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000320.png",
+ "low_idx": 79
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000321.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000322.png",
+ "low_idx": 80
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000323.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000324.png",
+ "low_idx": 81
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000325.png",
+ "low_idx": 82
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000326.png",
+ "low_idx": 82
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000327.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000328.png",
+ "low_idx": 83
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000329.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000330.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000331.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000332.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000333.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000334.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000335.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000336.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000337.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000338.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000339.png",
+ "low_idx": 84
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000340.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000341.png",
+ "low_idx": 85
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000342.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000343.png",
+ "low_idx": 86
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000344.png",
+ "low_idx": 87
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000345.png",
+ "low_idx": 87
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000346.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000347.png",
+ "low_idx": 88
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000348.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000349.png",
+ "low_idx": 89
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000350.png",
+ "low_idx": 90
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000351.png",
+ "low_idx": 90
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000352.png",
+ "low_idx": 91
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000353.png",
+ "low_idx": 91
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000354.png",
+ "low_idx": 92
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000355.png",
+ "low_idx": 92
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000356.png",
+ "low_idx": 93
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000357.png",
+ "low_idx": 93
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000358.png",
+ "low_idx": 94
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000359.png",
+ "low_idx": 94
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000360.png",
+ "low_idx": 95
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000361.png",
+ "low_idx": 95
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000362.png",
+ "low_idx": 96
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000363.png",
+ "low_idx": 96
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000364.png",
+ "low_idx": 97
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000365.png",
+ "low_idx": 97
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000366.png",
+ "low_idx": 98
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000367.png",
+ "low_idx": 98
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000368.png",
+ "low_idx": 99
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000369.png",
+ "low_idx": 99
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000370.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000371.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000372.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000373.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000374.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000375.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000376.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000377.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000378.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000379.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 4,
+ "image_name": "000000380.png",
+ "low_idx": 100
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000381.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000382.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000383.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000384.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000385.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000386.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000387.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000388.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000389.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000390.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000391.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000392.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000393.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000394.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 5,
+ "image_name": "000000395.png",
+ "low_idx": 101
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000396.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000397.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000398.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000399.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000400.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000401.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000402.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000403.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000404.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000405.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000406.png",
+ "low_idx": 102
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000407.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000408.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000409.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000410.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000411.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000412.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000413.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000414.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000415.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000416.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000417.png",
+ "low_idx": 103
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000418.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000419.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000420.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000421.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000422.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000423.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000424.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000425.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000426.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000427.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000428.png",
+ "low_idx": 104
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000429.png",
+ "low_idx": 105
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000430.png",
+ "low_idx": 105
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000431.png",
+ "low_idx": 106
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000432.png",
+ "low_idx": 106
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000433.png",
+ "low_idx": 107
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000434.png",
+ "low_idx": 107
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000435.png",
+ "low_idx": 108
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000436.png",
+ "low_idx": 108
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000437.png",
+ "low_idx": 109
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000438.png",
+ "low_idx": 109
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000439.png",
+ "low_idx": 110
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000440.png",
+ "low_idx": 110
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000441.png",
+ "low_idx": 111
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000442.png",
+ "low_idx": 111
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000443.png",
+ "low_idx": 112
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000444.png",
+ "low_idx": 112
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000445.png",
+ "low_idx": 113
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000446.png",
+ "low_idx": 113
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000447.png",
+ "low_idx": 114
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000448.png",
+ "low_idx": 114
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000449.png",
+ "low_idx": 115
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000450.png",
+ "low_idx": 115
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000451.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000452.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000453.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000454.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000455.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000456.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000457.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000458.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000459.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000460.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000461.png",
+ "low_idx": 116
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000462.png",
+ "low_idx": 117
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000463.png",
+ "low_idx": 117
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000464.png",
+ "low_idx": 118
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000465.png",
+ "low_idx": 118
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000466.png",
+ "low_idx": 119
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000467.png",
+ "low_idx": 119
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000468.png",
+ "low_idx": 120
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000469.png",
+ "low_idx": 120
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000470.png",
+ "low_idx": 121
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000471.png",
+ "low_idx": 121
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000472.png",
+ "low_idx": 122
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000473.png",
+ "low_idx": 122
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000474.png",
+ "low_idx": 123
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000475.png",
+ "low_idx": 123
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000476.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000477.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000478.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000479.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000480.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000481.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000482.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000483.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000484.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000485.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000486.png",
+ "low_idx": 124
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000487.png",
+ "low_idx": 125
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000488.png",
+ "low_idx": 125
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000489.png",
+ "low_idx": 126
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000490.png",
+ "low_idx": 126
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000491.png",
+ "low_idx": 127
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000492.png",
+ "low_idx": 127
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000493.png",
+ "low_idx": 128
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000494.png",
+ "low_idx": 128
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000495.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000496.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000497.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000498.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000499.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000500.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000501.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000502.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000503.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000504.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 6,
+ "image_name": "000000505.png",
+ "low_idx": 129
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000506.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000507.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000508.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000509.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000510.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000511.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000512.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000513.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000514.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000515.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000516.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000517.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000518.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000519.png",
+ "low_idx": 130
+ },
+ {
+ "high_idx": 7,
+ "image_name": "000000520.png",
+ "low_idx": 130
+ }
+ ],
+ "pddl_params": {
+ "mrecep_target": "",
+ "object_sliced": false,
+ "object_target": "Watch",
+ "parent_target": "Dresser",
+ "toggle_target": ""
+ },
+ "plan": {
+ "high_pddl": [
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["diningtable"]
+ },
+ "high_idx": 0,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-11|5|1|45"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["watch"]
+ },
+ "high_idx": 1,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "Watch",
+ [
+ -7.49467088, -7.49467088, 5.096312, 5.096312, 3.025145052,
+ 3.025145052
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "DiningTable",
+ [-6.368032, -6.368032, 5.096312, 5.096312, 1.2581852, 1.2581852]
+ ],
+ "forceVisible": true,
+ "objectId": "Watch|-01.87|+00.76|+01.27"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["dresser"]
+ },
+ "high_idx": 2,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-13|24|0|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["watch", "dresser"]
+ },
+ "high_idx": 3,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "Watch",
+ [
+ -7.49467088, -7.49467088, 5.096312, 5.096312, 3.025145052,
+ 3.025145052
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Dresser",
+ [-12.804, -12.804, 27.164, 27.164, -0.032, -0.032]
+ ],
+ "forceVisible": true,
+ "objectId": "Watch|-01.87|+00.76|+01.27",
+ "receptacleObjectId": "Dresser|-03.20|-00.01|+06.79"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["diningtable"]
+ },
+ "high_idx": 4,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-6|9|2|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": ["watch"]
+ },
+ "high_idx": 5,
+ "planner_action": {
+ "action": "PickupObject",
+ "coordinateObjectId": [
+ "Watch",
+ [
+ -6.93135168, -6.93135168, 6.78114748, 6.78114748, 3.025145052,
+ 3.025145052
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "DiningTable",
+ [-6.368032, -6.368032, 5.096312, 5.096312, 1.2581852, 1.2581852]
+ ],
+ "forceVisible": true,
+ "objectId": "Watch|-01.73|+00.76|+01.70"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "GotoLocation",
+ "args": ["dresser"]
+ },
+ "high_idx": 6,
+ "planner_action": {
+ "action": "GotoLocation",
+ "location": "loc|-13|24|0|60"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "PutObject",
+ "args": ["watch", "dresser"]
+ },
+ "high_idx": 7,
+ "planner_action": {
+ "action": "PutObject",
+ "coordinateObjectId": [
+ "Watch",
+ [
+ -6.93135168, -6.93135168, 6.78114748, 6.78114748, 3.025145052,
+ 3.025145052
+ ]
+ ],
+ "coordinateReceptacleObjectId": [
+ "Dresser",
+ [-12.804, -12.804, 27.164, 27.164, -0.032, -0.032]
+ ],
+ "forceVisible": true,
+ "objectId": "Watch|-01.73|+00.76|+01.70",
+ "receptacleObjectId": "Dresser|-03.20|-00.01|+06.79"
+ }
+ },
+ {
+ "discrete_action": {
+ "action": "NoOp",
+ "args": []
+ },
+ "high_idx": 8,
+ "planner_action": {
+ "action": "End",
+ "value": 1
+ }
+ }
+ ],
+ "low_actions": [
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 0
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "Watch|-01.87|+00.76|+01.27"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [140, 135, 149, 148],
+ "mask": [
+ [40343, 4],
+ [40642, 6],
+ [40941, 4],
+ [40946, 2],
+ [41240, 3],
+ [41247, 2],
+ [41540, 2],
+ [41547, 2],
+ [41840, 1],
+ [41847, 2],
+ [42140, 1],
+ [42147, 2],
+ [42440, 1],
+ [42447, 3],
+ [42740, 1],
+ [42747, 3],
+ [43040, 1],
+ [43047, 2],
+ [43346, 2],
+ [43641, 7],
+ [43942, 5],
+ [44243, 3]
+ ],
+ "point": [147, 140]
+ }
+ },
+ "high_idx": 1
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 2
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "Watch|-01.87|+00.76|+01.27",
+ "placeStationary": true,
+ "receptacleObjectId": "Dresser|-03.20|-00.01|+06.79"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [17, 79, 299, 191],
+ "mask": [
+ [23433, 34],
+ [23658, 29],
+ [23732, 34],
+ [23959, 29],
+ [24032, 33],
+ [24259, 29],
+ [24332, 33],
+ [24560, 28],
+ [24632, 33],
+ [24860, 29],
+ [24931, 34],
+ [25160, 29],
+ [25231, 33],
+ [25461, 28],
+ [25531, 33],
+ [25761, 29],
+ [25830, 34],
+ [26061, 29],
+ [26130, 34],
+ [26361, 29],
+ [26430, 34],
+ [26662, 29],
+ [26729, 34],
+ [26962, 29],
+ [27029, 34],
+ [27262, 30],
+ [27329, 34],
+ [27563, 29],
+ [27628, 35],
+ [27863, 29],
+ [27928, 34],
+ [28163, 30],
+ [28228, 34],
+ [28463, 30],
+ [28527, 35],
+ [28764, 29],
+ [28827, 35],
+ [29064, 30],
+ [29127, 35],
+ [29364, 30],
+ [29427, 34],
+ [29665, 29],
+ [29726, 35],
+ [29965, 30],
+ [30026, 35],
+ [30265, 30],
+ [30326, 35],
+ [30565, 31],
+ [30625, 35],
+ [30866, 30],
+ [30925, 35],
+ [31166, 30],
+ [31225, 35],
+ [31466, 31],
+ [31524, 36],
+ [31767, 30],
+ [31824, 36],
+ [32067, 30],
+ [32124, 35],
+ [32367, 31],
+ [32423, 36],
+ [32668, 30],
+ [32723, 36],
+ [32968, 30],
+ [33023, 36],
+ [33268, 31],
+ [33323, 35],
+ [33568, 31],
+ [33622, 36],
+ [33869, 31],
+ [33922, 36],
+ [34169, 31],
+ [34222, 36],
+ [34469, 31],
+ [34521, 37],
+ [34770, 30],
+ [34821, 36],
+ [35070, 30],
+ [35121, 36],
+ [35370, 30],
+ [35420, 37],
+ [35670, 30],
+ [35720, 37],
+ [35971, 29],
+ [36020, 37],
+ [36271, 29],
+ [36319, 38],
+ [36570, 30],
+ [36619, 281],
+ [36919, 281],
+ [37219, 281],
+ [37518, 282],
+ [37818, 282],
+ [38118, 282],
+ [38417, 283],
+ [38717, 283],
+ [39017, 283],
+ [39318, 282],
+ [39618, 282],
+ [39919, 281],
+ [40220, 280],
+ [40521, 279],
+ [40823, 276],
+ [41124, 11],
+ [41260, 2],
+ [41388, 10],
+ [41425, 9],
+ [41561, 1],
+ [41689, 8],
+ [41725, 9],
+ [41861, 1],
+ [41989, 7],
+ [42026, 7],
+ [42161, 1],
+ [42290, 5],
+ [42327, 7],
+ [42589, 5],
+ [42628, 7],
+ [42888, 5],
+ [42928, 7],
+ [43187, 5],
+ [43229, 7],
+ [43486, 6],
+ [43530, 7],
+ [43785, 6],
+ [43831, 7],
+ [44084, 6],
+ [44132, 6],
+ [44384, 5],
+ [44432, 7],
+ [44683, 5],
+ [44733, 7],
+ [44860, 1],
+ [44982, 5],
+ [45034, 7],
+ [45160, 1],
+ [45281, 5],
+ [45335, 6],
+ [45460, 1],
+ [45580, 5],
+ [45635, 7],
+ [45760, 1],
+ [45879, 5],
+ [45936, 7],
+ [46060, 1],
+ [46178, 5],
+ [46237, 6],
+ [46360, 1],
+ [46477, 5],
+ [46538, 6],
+ [46777, 5],
+ [46839, 6],
+ [47076, 5],
+ [47139, 7],
+ [47375, 5],
+ [47440, 6],
+ [47674, 5],
+ [47741, 6],
+ [47973, 5],
+ [48042, 6],
+ [48272, 5],
+ [48342, 7],
+ [48571, 5],
+ [48643, 6],
+ [48870, 5],
+ [48944, 6],
+ [49059, 1],
+ [49170, 4],
+ [49245, 6],
+ [49359, 1],
+ [49469, 4],
+ [49546, 6],
+ [49659, 1],
+ [49768, 4],
+ [49846, 6],
+ [49959, 1],
+ [50067, 5],
+ [50147, 6],
+ [50259, 1],
+ [50366, 5],
+ [50448, 6],
+ [50559, 1],
+ [50665, 5],
+ [50749, 5],
+ [50964, 5],
+ [51049, 6],
+ [51263, 5],
+ [51350, 6],
+ [51562, 5],
+ [51651, 6],
+ [51862, 4],
+ [51952, 5],
+ [52161, 4],
+ [52253, 5],
+ [52460, 4],
+ [52553, 6],
+ [52759, 4],
+ [52854, 6],
+ [53058, 4],
+ [53155, 5],
+ [53357, 5],
+ [53456, 5],
+ [53558, 1],
+ [53656, 5],
+ [53756, 6],
+ [53858, 1],
+ [53956, 4],
+ [54057, 6],
+ [54158, 1],
+ [54255, 4],
+ [54358, 5],
+ [54458, 1],
+ [54554, 4],
+ [54659, 5],
+ [54758, 1],
+ [54853, 4],
+ [54960, 5],
+ [55152, 4],
+ [55260, 5],
+ [55451, 4],
+ [55561, 5],
+ [55750, 4],
+ [55862, 5],
+ [56049, 4],
+ [56163, 5],
+ [56349, 3],
+ [56463, 5],
+ [56648, 3],
+ [56764, 5],
+ [56947, 4],
+ [57065, 5],
+ [57246, 4]
+ ],
+ "point": [158, 134]
+ }
+ },
+ "high_idx": 3
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 4
+ },
+ {
+ "api_action": {
+ "action": "PickupObject",
+ "objectId": "Watch|-01.73|+00.76|+01.70"
+ },
+ "discrete_action": {
+ "action": "PickupObject",
+ "args": {
+ "bbox": [201, 126, 221, 137],
+ "mask": [
+ [37708, 7],
+ [38005, 14],
+ [38303, 18],
+ [38602, 2],
+ [38608, 5],
+ [38618, 4],
+ [38920, 2],
+ [39201, 1],
+ [39221, 1],
+ [39501, 1],
+ [39521, 1],
+ [39801, 2],
+ [40102, 2],
+ [40120, 1],
+ [40403, 3],
+ [40418, 2],
+ [40704, 15],
+ [41007, 9]
+ ],
+ "point": [211, 128]
+ }
+ },
+ "high_idx": 5
+ },
+ {
+ "api_action": {
+ "action": "LookUp",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookUp_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateLeft",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateLeft_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "RotateRight",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "RotateRight_90",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "MoveAhead",
+ "forceAction": true,
+ "moveMagnitude": 0.25
+ },
+ "discrete_action": {
+ "action": "MoveAhead_25",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "LookDown",
+ "forceAction": true
+ },
+ "discrete_action": {
+ "action": "LookDown_15",
+ "args": {}
+ },
+ "high_idx": 6
+ },
+ {
+ "api_action": {
+ "action": "PutObject",
+ "forceAction": true,
+ "objectId": "Watch|-01.73|+00.76|+01.70",
+ "placeStationary": true,
+ "receptacleObjectId": "Dresser|-03.20|-00.01|+06.79"
+ },
+ "discrete_action": {
+ "action": "PutObject",
+ "args": {
+ "bbox": [17, 79, 299, 191],
+ "mask": [
+ [23433, 34],
+ [23658, 29],
+ [23732, 34],
+ [23959, 29],
+ [24032, 33],
+ [24259, 29],
+ [24332, 33],
+ [24560, 28],
+ [24632, 33],
+ [24860, 29],
+ [24931, 34],
+ [25160, 29],
+ [25231, 33],
+ [25461, 28],
+ [25531, 33],
+ [25761, 29],
+ [25830, 34],
+ [26061, 29],
+ [26130, 34],
+ [26361, 29],
+ [26430, 34],
+ [26662, 29],
+ [26729, 34],
+ [26962, 29],
+ [27029, 34],
+ [27262, 30],
+ [27329, 34],
+ [27563, 29],
+ [27628, 35],
+ [27863, 29],
+ [27928, 34],
+ [28163, 30],
+ [28228, 34],
+ [28463, 30],
+ [28527, 35],
+ [28764, 29],
+ [28827, 35],
+ [29064, 30],
+ [29127, 35],
+ [29364, 30],
+ [29427, 34],
+ [29665, 29],
+ [29726, 35],
+ [29965, 30],
+ [30026, 35],
+ [30265, 30],
+ [30326, 35],
+ [30565, 31],
+ [30625, 35],
+ [30866, 30],
+ [30925, 35],
+ [31166, 30],
+ [31225, 35],
+ [31466, 31],
+ [31524, 36],
+ [31767, 30],
+ [31824, 36],
+ [32067, 30],
+ [32124, 35],
+ [32367, 31],
+ [32423, 36],
+ [32668, 30],
+ [32723, 36],
+ [32968, 30],
+ [33023, 36],
+ [33268, 31],
+ [33323, 35],
+ [33568, 31],
+ [33622, 36],
+ [33869, 31],
+ [33922, 36],
+ [34169, 31],
+ [34222, 36],
+ [34469, 31],
+ [34521, 37],
+ [34770, 30],
+ [34821, 36],
+ [35070, 30],
+ [35121, 36],
+ [35370, 30],
+ [35420, 37],
+ [35670, 30],
+ [35720, 37],
+ [35971, 29],
+ [36020, 37],
+ [36271, 29],
+ [36319, 38],
+ [36570, 30],
+ [36619, 281],
+ [36919, 281],
+ [37219, 281],
+ [37518, 282],
+ [37818, 282],
+ [38118, 282],
+ [38417, 283],
+ [38717, 283],
+ [39017, 283],
+ [39318, 282],
+ [39618, 282],
+ [39919, 281],
+ [40220, 280],
+ [40521, 279],
+ [40823, 276],
+ [41124, 11],
+ [41260, 2],
+ [41388, 10],
+ [41425, 9],
+ [41561, 1],
+ [41689, 8],
+ [41725, 9],
+ [41861, 1],
+ [41989, 7],
+ [42026, 7],
+ [42161, 1],
+ [42290, 5],
+ [42327, 7],
+ [42589, 5],
+ [42628, 7],
+ [42888, 5],
+ [42928, 7],
+ [43187, 5],
+ [43229, 7],
+ [43486, 6],
+ [43530, 7],
+ [43785, 6],
+ [43831, 7],
+ [44084, 6],
+ [44132, 6],
+ [44384, 5],
+ [44432, 7],
+ [44683, 5],
+ [44733, 7],
+ [44860, 1],
+ [44982, 5],
+ [45034, 7],
+ [45160, 1],
+ [45281, 5],
+ [45335, 6],
+ [45460, 1],
+ [45580, 5],
+ [45635, 7],
+ [45760, 1],
+ [45879, 5],
+ [45936, 7],
+ [46060, 1],
+ [46178, 5],
+ [46237, 6],
+ [46360, 1],
+ [46477, 5],
+ [46538, 6],
+ [46777, 5],
+ [46839, 6],
+ [47076, 5],
+ [47139, 7],
+ [47375, 5],
+ [47440, 6],
+ [47674, 5],
+ [47741, 6],
+ [47973, 5],
+ [48042, 6],
+ [48272, 5],
+ [48342, 7],
+ [48571, 5],
+ [48643, 6],
+ [48870, 5],
+ [48944, 6],
+ [49059, 1],
+ [49170, 4],
+ [49245, 6],
+ [49359, 1],
+ [49469, 4],
+ [49546, 6],
+ [49659, 1],
+ [49768, 4],
+ [49846, 6],
+ [49959, 1],
+ [50067, 5],
+ [50147, 6],
+ [50259, 1],
+ [50366, 5],
+ [50448, 6],
+ [50559, 1],
+ [50665, 5],
+ [50749, 5],
+ [50964, 5],
+ [51049, 6],
+ [51263, 5],
+ [51350, 6],
+ [51562, 5],
+ [51651, 6],
+ [51862, 4],
+ [51952, 5],
+ [52161, 4],
+ [52253, 5],
+ [52460, 4],
+ [52553, 6],
+ [52759, 4],
+ [52854, 6],
+ [53058, 4],
+ [53155, 5],
+ [53357, 5],
+ [53456, 5],
+ [53558, 1],
+ [53656, 5],
+ [53756, 6],
+ [53858, 1],
+ [53956, 4],
+ [54057, 6],
+ [54158, 1],
+ [54255, 4],
+ [54358, 5],
+ [54458, 1],
+ [54554, 4],
+ [54659, 5],
+ [54758, 1],
+ [54853, 4],
+ [54960, 5],
+ [55152, 4],
+ [55260, 5],
+ [55451, 4],
+ [55561, 5],
+ [55750, 4],
+ [55862, 5],
+ [56049, 4],
+ [56163, 5],
+ [56349, 3],
+ [56463, 5],
+ [56648, 3],
+ [56764, 5],
+ [56947, 4],
+ [57065, 5],
+ [57246, 4]
+ ],
+ "point": [158, 134]
+ }
+ },
+ "high_idx": 7
+ }
+ ]
+ },
+ "scene": {
+ "dirty_and_empty": false,
+ "floor_plan": "FloorPlan205",
+ "init_action": {
+ "action": "TeleportFull",
+ "horizon": 30,
+ "rotateOnTeleport": true,
+ "rotation": 90,
+ "x": -3.5,
+ "y": 0.9011251,
+ "z": 4.75
+ },
+ "object_poses": [
+ {
+ "objectName": "Watch_6926efef",
+ "position": {
+ "x": -1.73283792,
+ "y": 0.756286263,
+ "z": 1.69528687
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_aa8e7163",
+ "position": {
+ "x": -1.93903673,
+ "y": 0.8475736,
+ "z": 6.699
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_aa8e7163",
+ "position": {
+ "x": -1.16951835,
+ "y": 0.7614341,
+ "z": 1.1336751
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "KeyChain_07fab907",
+ "position": {
+ "x": -2.98634958,
+ "y": 0.3763718,
+ "z": 6.723596
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_9d14e7c7",
+ "position": {
+ "x": -3.045517,
+ "y": 0.06613601,
+ "z": 6.69908047
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "RemoteControl_ce66a10f",
+ "position": {
+ "x": -2.48511577,
+ "y": 0.4034819,
+ "z": 3.70120835
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "RemoteControl_ce66a10f",
+ "position": {
+ "x": -4.11551857,
+ "y": 0.4867072,
+ "z": 3.62630868
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Laptop_0fe92e8d",
+ "position": {
+ "x": -2.48511577,
+ "y": 0.4609443,
+ "z": 3.6261735
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Laptop_0fe92e8d",
+ "position": {
+ "x": -1.87366772,
+ "y": 0.753546238,
+ "z": 0.9932721
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Box_d314e78a",
+ "position": {
+ "x": -1.607,
+ "y": 0.151,
+ "z": 6.854
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Statue_aa8e7163",
+ "position": {
+ "x": -1.16951835,
+ "y": 0.7614341,
+ "z": 1.69528687
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Watch_6926efef",
+ "position": {
+ "x": -1.87366772,
+ "y": 0.756286263,
+ "z": 1.274078
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "WateringCan_404c0a66",
+ "position": {
+ "x": -0.208212316,
+ "y": -0.000733211637,
+ "z": 3.22562766
+ },
+ "rotation": {
+ "x": -0.00117355876,
+ "y": 63.9287148,
+ "z": 0.00114551524
+ }
+ },
+ {
+ "objectName": "Laptop_0fe92e8d",
+ "position": {
+ "x": -1.68310452,
+ "y": 0.747589,
+ "z": 1.48901808
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 338.703461,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "CreditCard_9d14e7c7",
+ "position": {
+ "x": -3.664151,
+ "y": 0.396496,
+ "z": 3.81112432
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "KeyChain_07fab907",
+ "position": {
+ "x": -4.300413,
+ "y": 0.478610456,
+ "z": 5.556703
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "Pillow_65434bec",
+ "position": {
+ "x": -4.335,
+ "y": 0.465,
+ "z": 4.398
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ },
+ {
+ "objectName": "RemoteControl_ce66a10f",
+ "position": {
+ "x": -1.31034827,
+ "y": 0.758253455,
+ "z": 1.41448092
+ },
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ }
+ }
+ ],
+ "object_toggles": [],
+ "random_seed": 874820597,
+ "scene_num": 205
+ },
+ "task_id": "trial_T20190907_182211_592010",
+ "task_type": "pick_two_obj_and_place",
+ "turk_annotations": {
+ "anns": [
+ {
+ "assignment_id": "A1RLO9LNUJIW5S_3L70J4KAZJ3FJ0ROSJRBN4TLHEXADW",
+ "high_descs": [
+ "Take a half step left and walk until you are about two feet from the fireplace then turn right and walk to the chair then turn right and walk to the red couch and turn left and walk to the chair at the table and turn left.",
+ "Pick up the watch you see on the table.",
+ "Turn left and walk to the red chair then turn right and walk past the red chair and turn left and walk and stand in front of the tv you can see in front of you.",
+ "Put the watch in the middle of the tv stand.",
+ "Turn right and walk to the fireplace and then turn right and walk to the chair.",
+ "Pick up the watch you see on the table.",
+ "Walk back to where you put the first watch.",
+ "Put the watch to the left of the first one."
+ ],
+ "task_desc": "Put two watches on the tv stand.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A32W24TWSWXW_3QFUFYSY91WXFVP3AOCAY1A61CSF42",
+ "high_descs": [
+ "Take one step to the right, turn left for several steps, turn right past the red chair, turn right for one steps, take a left and stop at the table. ",
+ "Pick up the watch from the table that is next to the lap top, closest to the wall.",
+ "Turn to the left and walk three steps, turn right at the red chair for three steps, take a left for seven steps, turn left again for five steps, turn right and walk three steps to the TV stand.",
+ "Set the watch down on the TV stand, in front of the TV at the center of the stand.",
+ "Turn right for five steps, turn right and walk to the table with the lap tops.",
+ "Pick up the watch by the lap top on the table in front of the chair.",
+ "Turn around and walk eight steps, turn left for five steps, turn right for 3 steps, stop in front of the TV stand.",
+ "Put the watch on the TV stand to the left of the watch on the stand."
+ ],
+ "task_desc": "Pick up watches from the table, one-at-a-time, put them on the TV stand.",
+ "votes": [1, 1]
+ },
+ {
+ "assignment_id": "A36DK84J5YJ942_3QJOXOW4XM8LD7EDLHS02D66B65EMT",
+ "high_descs": [
+ "Move to the dining table to the left of the door",
+ "pick up a watch from the table",
+ "move to the TV stand to the left of you",
+ "put the watch on the stand",
+ "move to the dining table to the left of the door",
+ "pick up a watch from the table",
+ "move to the TV stand to the left of you",
+ "put the watch on the stand"
+ ],
+ "task_desc": "Put two watches on the TV stand.",
+ "votes": [1, 1]
+ }
+ ]
+ }
+}
diff --git a/storage/fixtures/coco/coco_captions_tiny.json b/storage/fixtures/coco/coco_captions_tiny.json
new file mode 100644
index 0000000..392de9f
--- /dev/null
+++ b/storage/fixtures/coco/coco_captions_tiny.json
@@ -0,0 +1,336 @@
+{
+ "info": {
+ "description": "COCO 2017 Dataset",
+ "url": "http://cocodataset.org",
+ "version": "1.0",
+ "year": 2017,
+ "contributor": "COCO Consortium",
+ "date_created": "2017/09/01"
+ },
+ "licenses": [
+ {
+ "url": "http://creativecommons.org/licenses/by-nc-sa/2.0/",
+ "id": 1,
+ "name": "Attribution-NonCommercial-ShareAlike License"
+ },
+ {
+ "url": "http://creativecommons.org/licenses/by-nc/2.0/",
+ "id": 2,
+ "name": "Attribution-NonCommercial License"
+ },
+ {
+ "url": "http://creativecommons.org/licenses/by-nc-nd/2.0/",
+ "id": 3,
+ "name": "Attribution-NonCommercial-NoDerivs License"
+ },
+ {
+ "url": "http://creativecommons.org/licenses/by/2.0/",
+ "id": 4,
+ "name": "Attribution License"
+ },
+ {
+ "url": "http://creativecommons.org/licenses/by-sa/2.0/",
+ "id": 5,
+ "name": "Attribution-ShareAlike License"
+ },
+ {
+ "url": "http://creativecommons.org/licenses/by-nd/2.0/",
+ "id": 6,
+ "name": "Attribution-NoDerivs License"
+ },
+ {
+ "url": "http://flickr.com/commons/usage/",
+ "id": 7,
+ "name": "No known copyright restrictions"
+ },
+ {
+ "url": "http://www.usa.gov/copyright.shtml",
+ "id": 8,
+ "name": "United States Government Work"
+ }
+ ],
+ "images": [
+ {
+ "license": 1,
+ "file_name": "000000262146.jpg",
+ "coco_url": "http://images.cocodataset.org/train2017/000000262146.jpg",
+ "height": 640,
+ "width": 480,
+ "date_captured": "2013-11-19 23:07:16",
+ "flickr_url": "http://farm6.staticflickr.com/5090/5341741494_1f653cdb80_z.jpg",
+ "id": 262146
+ },
+ {
+ "license": 2,
+ "file_name": "000000262145.jpg",
+ "coco_url": "http://images.cocodataset.org/train2017/000000262145.jpg",
+ "height": 427,
+ "width": 640,
+ "date_captured": "2013-11-20 02:07:55",
+ "flickr_url": "http://farm8.staticflickr.com/7187/6967031859_5f08387bde_z.jpg",
+ "id": 262145
+ },
+ {
+ "license": 1,
+ "file_name": "000000393243.jpg",
+ "coco_url": "http://images.cocodataset.org/train2017/000000393243.jpg",
+ "height": 640,
+ "width": 480,
+ "date_captured": "2013-11-20 13:20:35",
+ "flickr_url": "http://farm3.staticflickr.com/2294/1562760533_6893778f46_z.jpg",
+ "id": 393243
+ },
+ {
+ "license": 1,
+ "file_name": "000000327701.jpg",
+ "coco_url": "http://images.cocodataset.org/val2017/000000327701.jpg",
+ "height": 428,
+ "width": 640,
+ "date_captured": "2013-11-21 05:21:15",
+ "flickr_url": "http://farm5.staticflickr.com/4116/4749894768_c44e05fd92_z.jpg",
+ "id": 327701
+ },
+ {
+ "license": 1,
+ "file_name": "000000262148.jpg",
+ "coco_url": "http://images.cocodataset.org/train2017/000000262148.jpg",
+ "height": 512,
+ "width": 640,
+ "date_captured": "2013-11-20 05:50:03",
+ "flickr_url": "http://farm5.staticflickr.com/4028/4549977479_547e6b22ae_z.jpg",
+ "id": 262148
+ },
+ {
+ "license": 1,
+ "file_name": "000000458755.jpg",
+ "coco_url": "http://images.cocodataset.org/val2017/000000458755.jpg",
+ "height": 480,
+ "width": 640,
+ "date_captured": "2013-11-16 23:06:51",
+ "flickr_url": "http://farm6.staticflickr.com/5119/5878453277_eea657a01d_z.jpg",
+ "id": 458755
+ },
+ {
+ "license": 3,
+ "file_name": "000000393225.jpg",
+ "coco_url": "http://images.cocodataset.org/train2017/000000393225.jpg",
+ "height": 428,
+ "width": 640,
+ "date_captured": "2013-11-20 03:17:27",
+ "flickr_url": "http://farm9.staticflickr.com/8052/8445121630_a391bd4876_z.jpg",
+ "id": 393225
+ },
+ {
+ "license": 4,
+ "file_name": "000000393226.jpg",
+ "coco_url": "http://images.cocodataset.org/val2017/000000393226.jpg",
+ "height": 480,
+ "width": 640,
+ "date_captured": "2013-11-17 20:36:07",
+ "flickr_url": "http://farm9.staticflickr.com/8003/7321339838_42fe225709_z.jpg",
+ "id": 393226
+ }
+ ],
+ "annotations": [
+ {
+ "image_id": 262145,
+ "id": 694,
+ "caption": "People shopping in an open market for vegetables."
+ },
+ {
+ "image_id": 262145,
+ "id": 1054,
+ "caption": "An open market full of people and piles of vegetables."
+ },
+ {
+ "image_id": 262145,
+ "id": 1456,
+ "caption": "People are shopping at an open air produce market."
+ },
+ {
+ "image_id": 262145,
+ "id": 5248,
+ "caption": "Large piles of carrots and potatoes at a crowded outdoor market."
+ },
+ {
+ "image_id": 262145,
+ "id": 5254,
+ "caption": "People shop for vegetables like carrots and potatoes at an open air market."
+ },
+ {
+ "image_id": 262146,
+ "id": 634780,
+ "caption": "a person skiing down a steep hill "
+ },
+ {
+ "image_id": 262146,
+ "id": 637393,
+ "caption": "A person skiing down a steep snowy hill."
+ },
+ {
+ "image_id": 262146,
+ "id": 640348,
+ "caption": "A person on snow skis going down a steep slope."
+ },
+ {
+ "image_id": 262146,
+ "id": 641836,
+ "caption": "A skier is skiing down a down hill slope. "
+ },
+ {
+ "image_id": 262146,
+ "id": 649789,
+ "caption": "A skier is shown taking on a very steep slope."
+ },
+ {
+ "image_id": 393243,
+ "id": 211126,
+ "caption": "A small child is eating a donut fed by another hand."
+ },
+ {
+ "image_id": 393243,
+ "id": 212533,
+ "caption": "A blonde boy looking at his donut hole."
+ },
+ {
+ "image_id": 393243,
+ "id": 220261,
+ "caption": "A boy is looking at a small doughnut with powdered sugar on his face."
+ },
+ {
+ "image_id": 393243,
+ "id": 222823,
+ "caption": "A little boy eating powered sugar covered flood."
+ },
+ {
+ "image_id": 393243,
+ "id": 224236,
+ "caption": "a child eats part of a sugar frosted donut"
+ },
+ {
+ "image_id": 327701,
+ "id": 80042,
+ "caption": "A woman is playing tennis with her children."
+ },
+ {
+ "image_id": 327701,
+ "id": 82709,
+ "caption": "A mother and her children play on a grass tennis court"
+ },
+ {
+ "image_id": 327701,
+ "id": 82778,
+ "caption": "A woman hitting a tennis ball with a racquet"
+ },
+ {
+ "image_id": 327701,
+ "id": 84086,
+ "caption": "The woman serves the tennis ball as a child watches."
+ },
+ {
+ "image_id": 327701,
+ "id": 87863,
+ "caption": "A woman hits a tennis ball with some kids."
+ },
+ {
+ "image_id": 262148,
+ "id": 284571,
+ "caption": "The skateboarder is putting on a show using the picnic table as his stage."
+ },
+ {
+ "image_id": 262148,
+ "id": 286347,
+ "caption": "A skateboarder pulling tricks on top of a picnic table."
+ },
+ {
+ "image_id": 262148,
+ "id": 286899,
+ "caption": "A man riding on a skateboard on top of a table."
+ },
+ {
+ "image_id": 262148,
+ "id": 287571,
+ "caption": "A skate boarder doing a trick on a picnic table."
+ },
+ {
+ "image_id": 262148,
+ "id": 288021,
+ "caption": "A person is riding a skateboard on a picnic table with a crowd watching."
+ },
+ {
+ "image_id": 458755,
+ "id": 294690,
+ "caption": "Young woman with sheep on straw covered floor."
+ },
+ {
+ "image_id": 458755,
+ "id": 295065,
+ "caption": "A child places his hands on the head and neck of a sheep while another sheep looks at his face."
+ },
+ {
+ "image_id": 458755,
+ "id": 296922,
+ "caption": "A person petting the head of a cute fluffy sheep."
+ },
+ {
+ "image_id": 458755,
+ "id": 300426,
+ "caption": "A child is petting a sheep while another sheep watches."
+ },
+ {
+ "image_id": 458755,
+ "id": 300753,
+ "caption": "A woman kneeling to pet animals while others wait. "
+ },
+ {
+ "image_id": 393225,
+ "id": 481891,
+ "caption": "A bowl of soup that has some carrots, shrimp, and noodles in it."
+ },
+ {
+ "image_id": 393225,
+ "id": 483397,
+ "caption": "The healthy food is in the bowl and ready to eat. "
+ },
+ {
+ "image_id": 393225,
+ "id": 484408,
+ "caption": "Soup has carrots and shrimp in it as it sits next to chopsticks."
+ },
+ {
+ "image_id": 393225,
+ "id": 485212,
+ "caption": "A tasty bowl of ramen is served for someone to enjoy. "
+ },
+ {
+ "image_id": 393225,
+ "id": 485599,
+ "caption": "Bowl of Asian noodle soup, with shrimp and carrots."
+ },
+ {
+ "image_id": 393226,
+ "id": 525437,
+ "caption": "A man who is walking across the street."
+ },
+ {
+ "image_id": 393226,
+ "id": 526781,
+ "caption": "A busy intersection with an ice cream truck driving by."
+ },
+ {
+ "image_id": 393226,
+ "id": 527105,
+ "caption": "a man walks behind an ice cream truck "
+ },
+ {
+ "image_id": 393226,
+ "id": 527621,
+ "caption": "A man is crossing a street near an icecream truck."
+ },
+ {
+ "image_id": 393226,
+ "id": 529862,
+ "caption": "The man is walking behind the concession bus."
+ }
+ ]
+}
diff --git a/storage/fixtures/coco/coco_dev_image_ids_tiny.npy b/storage/fixtures/coco/coco_dev_image_ids_tiny.npy
new file mode 100644
index 0000000000000000000000000000000000000000..bbf9a439bfb1a575598ac9afc8e9c912bbae0cae
GIT binary patch
literal 144
zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEP6dh=
fXCxM+0{I$7I+{8PwF(pfE>Q+n1`v>DU<1KsA9ld-#Z2akkK=>deB#<0E
zJqQFs1A&mNfZPAMpa3hV|ML!Ti}Ww+|85lx#49@w1|CJhI|o71AX>o9!}8$3g98r^
zJUH;+z=H!14m>#U;J||e4-Pyy@ZiAz69-IC(8+kHkOEyi?Hz&~f^0mz-5s8~*gyTp
zeR~^!8$SnsR0Tby#|BFDs#=OlCiMUNFVSmj(f`LU(zE}s2RW3G(aC72kZk_3r~hq_
zDF11X|MS8Bv?s(afhWS@f`mavMTHc_;csK>?(iS~=s#|d|6?}>kL5L#{@0WEk3R*T
zuYr<^k{-Q|o~q_!JyUvhB~$KydHVDQN+t%}|M)X{c@1rO4#Xs12h#`e9mxuE3;7K>
zf&7H*K-MA4knfOb$QWc8(g*2+v_cvoA0btcQb++L8E#0%mI
zae!Du%ppb)U5Exm1tJfThKNIiAiNL`2s4BZLJ1*(;6rdA=ny2lKX{jTr+9~WyLcOT
zD|qvGGkD{8BY6FI-FR(yO?b6<@A1m;3h{FAGVxOI67gd3V(=pHLhu6cyz$)d9Ppmv
znd0f=Y2vBiJ;r;4CxXX^$AQO$M}tR(M}UWehX%d}UxUxUhu|IX8h8=>4LlAW2KRzH
zz|G)Va22=&oCkgjP5~!?Ux1^)q2K_p7uW@C2et$ogLT2`U?s3DSOP2r<^i*T8NgIv
z5-kjJ@>jdinYYS@?YaVMF>nqkE)@Q6XtVXOFtO~3mtQ@QitT$NkSTL*ztY9oZ
zEDtOvEE_CyEJG}9ELAK8ENLt;ECDPoEEX&}ED9_lEHD-Z782$y<^|>v<{st-<}&6S
z<|O79%zn%+%uks0nAMnNm<5>cFw-!TFk>;JF`r`w{-a3$pR^AT|K!1e2L~P;cyQqV
ziUUZNFOY%ZhQ$kD??~qGaDZm;Fo34;V1Op@K!C>Z0DwktKY)gCV0?mP0QUr_4|fNs
z2X_Ie3wHvj1GfjL4YviT1-AyM2?yS`K+=F)091#Y0aSyV091t=0ek{C0H^}j1E>tw
z0jLDm1gHR42Ph9$1^5`Q3{VcP2v8O-4^Rd!2T&R=15gSs1@IAE5}+hp44?#D1fV!v
z5TF>G51=TV8=wfB1E3I`6`&xT37`O+0U$q|4j><#8Xzy65+Dzp93VHG6d)Iz7$7H{
z5FiH}A0Rs%436AiS5f%ZE0fumr9u@+S4i*HE7KU(=
z28M8w8isI^3g!in5{7V+0_F;k9Oev=4CVlk6lMpI1ZD$}81@t(5e(rZAq?Rp0Sw_J
zJ`CX`1f~xV52gzc4ATaP3qv@G15*Qt4O0P#1ycZs2}8Jt0h0!Z4nz2c21EFU3KIs1
z0uum;4C4ie1mgk-g0X`@pnDh#z`roSG0+{12H+nU;1%c=Mh5T(2Dk*eh5;^tu3!*=
zmoQv_zhPJaFJOQ_pmP}FO{+5)0MKd7bATr?K#hTpV*pP;zhZm=9>xGZfPTgR6$Lto
z0UQAB#{jhi+KU0SgLY%g0q(>Y1Kf_$1Gp6fXasG>XaL-Zc>-`fMhW0r%wvE*Vt@((
zt;Re8xDq1@a5)B02U?2Z0k{~$25=z;p=&;d5#aY2pb|iHF+e4NW@8ZQzQq7F0Gf#*
z05}~3o(=WZ
z19^cyMFV+(TB7*?Hb(n>^BNSCeqXDdd0@VvDhaxg6gN6bug(8wFfd&FBh9dGRf+F%Ngd#K+Ks^BF
zLxJiAHZTfNtIwhk`36KG^!i63^7V-_2k0FI9F-uiD1=7OC`6_nQ7Qo4
zqvQd)MM(j4jY6d95+w-GISP@cQxrm-V-!M{Lli=neG~&gyC@ofwowRmHc=!1t)mcW
zK8-@Cvx)**Cy-?nLY+kvB2)7yggUb*#L;IOg{W1NC}e=fQ2;W2W(
zLrB#{q^yIGs|~bMAT1vNnh4z*h_KZW+SL$&t0MG2LC9ADS}c&V696R#0E&q46@Zot
zByR)Yu{8iWL=nhZ0gyoyg0vX`DWLfRJpx)UkfZ?s34~YTIsn8p0f+((7f1wgOba6{
z6GBvopb`K9pcMo0BMjt|1Hg+oFnAD7awAHHOA-L51ON_1?XV*bdp02etO5X75dJdr
z0ANCR%*X+N0pT+}D*!rX0JKa1Xcz%dAxx*F13-Z|n8>LCkWm33MI2Qmh!}{;0T3Y$
zFG57M5g>{Up9la15eyz87ce3gTtwS}g9`u~kqj0h7)(Si7>HQV5viadA&3mw1&E{w
zIseBBu>P<-IPl=Wg98r^JUH;+z=H!14m>#U;J||e4-Pyy@Zi9IQwQ2GP>_+4Bajg<
zGqobtku;Dr5c7XjNI5_xVaPsY2GaSDJO523K0NIQ2Ob=FaNxm#2L~P;cyQpsfd>a3
z9C&cx!GQ+{{@XinM1aDA?CtB|?+bjs;Hj7pKk@>gsp&s$6_Maa)&jQr{im(Mf?`Nj
zz*gV?v{g`42nhoWY(_@S2I0s6cvv1BcyQpsf&Y&aG0-VK#
zx;@*Vj0|ExLY)8P&$m_dgBl%O+Y&@TI|yY`RGTi1U(4rvdAhABK;>tk)kG<%SRT9L
z%!YK!zcmXiPaGnRWVNc^az(w2qy$)FRv
zxf4O!@Aqn)Lz{VW&j)`Hejc{8P`PmKSCwJcKj#iwmWqtoUzq*Gkay7|L`Y}9moD$AIQ%EoaTifx
ztN52ctSz1!!j>$*EjZ4ZzE{#yE=@Tu?x$~$MR2|mA*Fn-L;RlQSn2e6X-OVi1>F2eEgA%#rf*?h4SU+!
z&(+yy9rXP|YmYXu-pL2e<&v-pVo^pjO0QEb=xEo>yZ$O0Wo8n3E;D=sqwwafl)yv_Pjr9f?jooe?Qb2Q*+JmPE0M$Gk-r_ukM{8|prek?)>D?I
zm9Z~}S(*3xJHxPCrvmF+7Reo>H|*}nxN}xS&cEn|PM&LNek)|c86GD!eeq3zMBba?
z1!3WVHHDqox0z3=)cCqq1%woC%fSg{#hd%gnRV&m6qeNb{6k>VB_II_|@Wlt@c%(Wt<`?fab7hey?dBR>DjXS+wK1iG59V<~AY
z4@L}g--B2`-<@>ZCJdb*84YDa{ZdM66+Zl75g!a?(!i&pY!?rY{?jrF)(Tng#PdGv
zKi4oza;L_x^f6QKGtMR;l?X8ju695ISqliE9hK`QI8Ik-5a6V6
z&SgvRvpS`xqgtENEWKt=)4?I@*pF$clx$4bMAq4_&-{h<7@}Y2c<<`1bE(^
z<>wn}%uT8%6xrxi62How@rkhMz53kocbz_=GC!kH$g9joN1bBpd*h8+awuEvrGI`w
z1qaGjsWNYWbNt21+D)j!m0+k~b$H7xK3Y>${aZaHyCN1!Raj(F)!34U<3WIc
z<=~oLN=xL-?~D}s;28J6t+-K+ug$HwX_@smm(6r}qeJaZRNdI;f*Y%5X}m(B68b#r
z$W~`TPQjjnXe6P(D&EoV>q1~#Ha9L^yMFV&(DO&`f7}#ten=ut3U2PXke#opkp>|h
z;JyG(?G@Xdps($7x<$Ne20}G8ieFWRFRE9^qGV**H^S*<`jhVs
zh#y0vH-=Cuzr>lq&GPSm67m&|=aBd1S@F9U(il(ex##qJs7Q-a#!H*-)VJXh&3pHw
z>+92eT>u6k>6R#(${RMPL3U%m7~Cid^RK3?C`*}FA<$tOqo>dVXe
z7%T>|Nj5x7Sy&BoWb6s5h(I<8!-ZJ{%G%yBBpUoKJu$H>9dY8xz9-oEIZU1T_VRCa
z-txxlcd`pP->kE4_Z``rFSX6W7sD#Sv>#@O9VzH!_h$+{A6K}R)jodOif4(E
zkj4_TORAi_s+A}wGLp3$Nl&dpRNI_@-*RB7DzoFJ@yuvM51*wcW*y)CT&WvkQF{1;
zXafB4y79AGfWp4DDVZGl@WR#KyN{7Z^HA4>ut!D?3f)?`EOx6gY`;5uzIyZ+^uBjV
zxSn|N>ba0G_fYFp_1l>JmHGXf`a;DcW2@ZEOa|Kf>Jbc_#QN^dnI`zU2I+Rz*`GLj
z%JT~kxgd_-x#@eyPdOQPb70$4p@NXpC#4G8(OMr)ouw7xz%ylzNe*_j+F$ee^k|>N
z-K)fv|30nWG00s$Vt;v?@qWP04QDlNJ}@bHmoOe(j3bB76C$}m{M}x(B{VhT^`!{K
z>;O%yZio~OsOtVZliXi>3cE*37%}n;&vg?HTaCvF6a_D`;^lasl!}NPN9d9@x%McW
zBT>1iIERL1msAqQ%zIjztNNe1nQY!ON51bZpn8)E4dLwO$m|fHz`sZ^*}n#LShD!K
zpACQB`nVJFM=r+5B36;7epWTvTNEK7GE~jcwo9Q|g%88hd<-uxvGRBIh;-UCMpf_xk3vFmZzINCG
zW)ZelJu_C>^2P1lAL^qSyjr+${Gs@BYYX
z^2}9+P?Zg78k_7{`MmakyO!CY){E}kjXzOg&qg6Hg{XW;t8-kQF^Dv}W}K+J@pdyO
z*vxt(#J+MZN=W!e>`eyauQlYQccWIbf?bG4>SplEz~uT)ItVEiD;@Z}L3$v8{=c?h
zi1|MfCMyW|c~~ACcyQpsfd>a39C&cx!GV8qAjudRnCIkC|8t%r_;2SqjJg;v{?B>N
zzj-B&j}~uq|GVg6u0NFT99_M2gnx@@Vxm#`TbfF&p$;sG9y*p!B|3qJzP($Oj=@j0
zxZ`r2JGqz~h@vAZ`N=);wYa2+GPN4L<2GzIio~~I%(>TLQB8@}d&5xgU`Gd8%UyI(pg!t~n}Xt$*9SY_iobgDcoGZWrW6_QMIarZMsUrTN^!BXej+&_}^C8Z@`E%8-yJk&6v>&yC!p14~IbztAu
zCY*5n{ep^Xfu^K2)FZF6>Ui2Ai$yPABnMQag{?a;-Eb?Z-ZRIV*O#(kQV`m~ae4KW
zd93FRQwUBtwmL7p-bL~B4xiU@#H0SQ#}{)LP%k=s?mZ=)?>P?5f<_0FR@0%~yusry
z7FHMQr=1fwTRKdAFN7wLjbNcxR2$1Cw}L#VqA~Mw)I0tYFVRmVoON>BT`F{v)aLw~)I?99BcbsLEClv!cR
zv;s27UMq)|+^E8Y!butG+wY_n)Kq7!IX2?RJ-!~i9_Q;!Ir6yr!A~nJgnYtnLj3j7
z2fX&E3*y1lM#CBObN<~pshX9~#_c)8xNX9}?2CE7z7f&*IclVbqPV=dk-xY9rR28-hHoH>9eWn!7RS`?xY62YxPb2*>9gAv3
z>dRf$Y#iBKOR7Dw#8m^-FNH)VbD#!#Jk=w^l7??O&u#-4=5nL-I2SI^}}EV-xh88_<)p{HieCQ0NMLzs+h^Z4_QwGDhcpJd2zCm<`ujfrJac
z{kp|Wih3|z?#*@X$C`#@jWo|zzpmc{E7<#jdOHax=IV!s6yLiUr*_UJUtCH-Wt2
z%xKp7QdJh*1@xUPniirNT8arpFV#NF_|B3t_mLeGgc7Y=2@0TBa64c4TfE4um&JMqC)#e0d({X9~uHQ#?u4+Xd&Te<&xAfFekdh}#O5fFPwj4Tj^Q@Bq
zFK`?*%D{{j2L
z-Z@cw`ZA+O5{eqRFgxNw>D2EPTh%!sXM6VAfkw!c^5Rl{;zG3~@PqkVWOkhqKJ5bZ
zIn9}8`HUHX_GzXpEHQ
zYVYDIm^CJZUE0*Ukwqm9$d3BGD@*)_cRkU(X7TK`P>+XR@PWb(Ik+pKOUf0wYB8*h
z49og?R!eLE?7W039>uLoK+~3Lx~ag{UBd?(QcppdlHR0
zzG2B9{Ca4hw|Q+i0zD&RG&A%onRxF>xR}+Cy72Z6MhHB11ob1e@M2EhuAj#ud{u^A$mFLB%7?
zJB`%)qJ_f>WmdD37eDo}_P5IW656nm&pGJ*=h|ZqRcahloxl4lbj|tS4NHbRT61&c
z5=xvEy>zNPwVn=(HRS1RoOjICYP^6%KQ|OLku>jmN3r{tXPP-rHIAN?i*1E+z1P)tV`*^;Q|aVPl}tzs65_M2-`k*xgL$?XzDypz
zE4Tl_pxRcL@+r3og(Ss9oj>6@hZq5-jM%(9+oC~IW=n&BfZ<1{evw;0hv6qL-6y`Y
ztubkPxaj?$R1dsh{jxPA|HkK3fBg6H4ReCR2JN%X>_lUW$zx6%`4DBd;EnL(R;~h@
zPp-*4c0T%+a;R&U(M%c`5WWd3OZWL6m{z01>!>-~k6y|l4SF6t+JA;cL!6e%@;KTU
zBxU9aoc4=Z+Q4t?zQIl5X+nw^hd$`Hm_i(J=&RSKwrXS%&s#wqk}bT?k5`nPx6~*}
zXxSGd2rwrD7IgpmI0tTcvwW(IleS6nX;9vg@~5yJjvo0<{eBpzC9F5nhy
z<)Xlz=10u?^;OAdTnpxI?>3>ZY71t|?k)$U)DM2t{uF$K4MXicXdd}Se!{dJo|;SD
zZe+F>BLjctX)!++xZ%-pE8On)wR2pRI~C?TCp8)0Ri?~q2=6UwEYsv3FbZ(C-ZjN1
zpja!{Z|xFcOjt`6(^}rs4uC=5>I|^=aj%35h0QKn-;(C!uV*k>9l4NmqNUJ(Db>!;
ztM85FZR22d$WK+Z68)VTrALA!Xh?InZBI$g@cwJo8CiAF6>CsG8Gbb2zS!JFKuq1(
zbefN@mN{8%xAXeGh3dHGTe-~suv_@o#piL=@eE*T$(Q5!h4enN*J%L~k(fTTq@th~
zITWv`7t3-6f1H^3m1TkZMjANUN+G{iA~0*%D*Ce}Bu1G)iX!q>U}abBoyexRS^LL-
zX}oA&S;Pg|k?>v#^p$e$WA${Tp?*^)_&b6+PMXSNev?|^9W{otZI~wxRf&g2YDj;P
z9ChF_^|rTnh=uT>a(35Nw0{=tgv!MDnJe@M+Ps
z+jo5R43Z1I67@3k@gt_{3a`QSCExnk*kPQKEl(q(~&7_B+qbH!nasEe>le^i+^nRq>78H)u(UN7k&ek#_zt@+!~+7XZH;pJmS(y@u;Wz
z^XG57Wi`)F*`v}q(U)&$V*D*3wA!F?@e6#s);F6Vq}OFB&+1YAsAIE4+$}t={bo4h}Z>!_!U+oE0
zy@P8B3tlm}gwg4rk6nXQ9pXz}?@oBZ_N+=|VX4~ttbBsxnOfO{ex;ezqSoy4#AXj3e6LgZIX6
z5|FQ;*i%VuX61aAF(ab2P{~HEL**P#($$;fq|zJR^g9cVUF2@b-|I#Hg&|NRr#&|4
zPozXk>x4a65#vDVH2G}R`kSih{(w=|33IjA-mrd0<4C4-Z~JxRIIUn@DDI5ORonMp
z;FsdgndL|1Wd?ewoSbljYc1g$duf9x1qbt00vy6IbcMbs4rLZc=uZg(uxTM5F@5eE
zl3B)z`wh;)iFsD*vYebQb&{NJq+n`{4ceB8*nOmkb9yEYC7s%E5Ahd_@DIn?=4bd;
z+KD9RrF?j$S_QobM&@_tTpwPf2HEa6xrOf#PZ&AXK;jr
zjIwzBOsSY?h9-pAbI+DIzBW+yLUoXSyjxm`>Zkbw|Dqa4S7du;FMw9QCjYfFJlEhhIt)t
zfts0vJQg_k=W>!^O(l#Zoh8-y(n0BRWk%2P@>Mid3Qu;)RDzn3f>9w4rgl=Z#?l#i
z8S-Ye?PWjmQl_zrCTj4dr7zJ_>XVv5uY4($LWQisd*a9b{
zs0eTUiMxCvYU@nhPxbuW5aGg`;(n+Wdisi&nL4#mR?NW9nF>!XnLq5B$Om00`GyHn
zTm&?MYBx!`6yi+H!0>}xaE2K>PP*G2uYXztE~^#
zTkG|%G_#?tVO^_LD6T36s#OeJ;(|%bHe2T4PPe3aP;Rv_OPoeA?tDZ(>D2lqUh~BO
zpG4DmPknPJ<=UfTT5QKh5p`V()Ux=mA$g3q_s;a~PkcQ0NwfpbiNx(civK>L>V5Q{
zUZf3O=Vy2D-THa3w1}wwe(7w^u<^T316JO^tP!id{19}WKJMjLLusjvUS1Xd=B#vjM}PL#
zh?IV_b5^L;cR{etGyW=&-b%;G=Yv}!Q%KwF(>IM&Q^IaNuKF3_wipZVhn)+Fj-8+2})?Pi&<|z%DMMZ)|y_>}_EKThMFyghY?9a{k;@C?G
z-LlLtQccU9X5SI(BKq{drHJV~qi?%RS<0pm2&oXiLlw9>=d_^Hzm6>aasEH31%!yIjP8OpwIN|(^}#0@tw
zjQoIgWX-;^cwBB9@>JU*Qw(!za_jSV(t}KFBs&3&RJAgaP4^=^c?y*#Y6}ucJHqk_
z2yU&TcI;9#Rr+Y?kOxy4RDI*y%c6sdPdN8VI&yVUr--E0RF_pey_Yqvg%u}OT%
zJBs4D&j0GZVuE?r!{)1+;u|F;UPV7Faa$Ff@#oa+490lwmL6QO`MbihGDH_ln^`pD
zi1B$Tx3coQeADP;bOk#)tGvU=M70D715MrSw2)=z4*^DBcSsh^W1T@lavdbr(eJeN
zBIFg@+*T@uXcBOF^~GC}-^==8K_!e*>M=@*Qp`cE?^^JDKY=lax&k{@Zn4;_BIGx$
zxc}a%K~Q#ELaMpBjR&_)sL>7#`m0rR6pTx~M9DP_&tgz)=Z7Q;hu8FXB{nk>*quf`
ze$*aplzJ8^Jor{7CNd*sZONcZ4|{o+aUPLodQFyG5#RyF>6d6)Pt>78RgqS0Xak5az^Q#e*z
zaXmQ_>UI)@asupzX7v(0Z+ksiphRnO_-!wOFgP*y_nA&v7P<&h;L%)}dGW2fwj871
zSyM|<4CThSzKwfqwUnR{2$&y`Rlb`+9;GwMZTmd-{1;r6m?q}x`)KV3uv8odvGlJ
z^s2=^w3Ra#z`0LfRbZWe2Mx5C-gOSSghk6Ph#jLjJo~M0e=|<<{6&lHN3_i7`zaX<
zrXz=#j4&%P|80Z7cwgn+;9rBop5FvNziRXy-#>n|&OE^6hF{wDgYC=FcHK)2Db*}_
zj-@i!zVqOrxjSM(SdQ
zl0tv{%35ER;-wucTv=wl{<5p?*b8x%`i>uc6_FtQ+=?rk$^84~amn3BdFE>xckAR9
zQ@D;NXStrw93h`b@~V4g{)G{|z7On{ejlE;u>e|iJ$Y{VMj(yvx9PJ1Bzy~!%a|DN
zK_2X%4o*kN^G~0yd`%UN_A9;LlZWstB{TTWanL4`$n>7pnp;t4C|Fms9U*YQkMN*vY5lzJ?TG2JOo}rh|ek%p17Z^sh@FAdSW5`TNd$H*Ax;j^Dv4=ztQg)GQ
z6t3MEwLs6k$QV$tt|^&_v($Ze@C;x2mdoiol8SIwh@Vw-&P6=&R<@;gTA*gPDvxeJ
zJ?M1)FW0nBQL6ZlM;%n_c;zJ+IFv+zR&eHxnSlvk8Ys!va`5f^ZE7>L62s-VU|c$(
za4r;fTc|jNf=*enK1MqWCQ?KzV7~?Z{A=!dq0|bH+xi;;Je
ze+lN3HTcp%v78y~l_&N2&3@Rz+8#7ST?q$eKQTn&5GlbQi8@5XSw^#opeH^s5pUKf
zqhS(f#m?wMWu-_XM$y((jFUs-tM^cdZ}5w&u%d(k*7Ld_O-A1weU8tJ|#n
zs&K|5cBjL-r6_sg@OQ(_Tj7OOEAAX6C%>qy*3|GORyThjFPC^$!Z1VRDI7jLHcC)tpPYf|
zN9|8-3JM+5=T!Ag)k}E?Mv>v;!01lu1MoFL=8Q}rq+G%tTi`nKR(LM|IvR}kLIXxs
z85;i_Rf+uDQ59(gTF!rYRK?qo{k!pX+t!QE_M~Icuk7yD=}+_8C~6M~xQ722A@}Oh
zHeo6@?&{U6{~F2`!khZjSX%pSyHq+(7nqgAH(lrFjr$)e!~d8zjK3LbU4inBa)%pL
zzZm}Vb)Tt&gZabTQ~}v}SV#&+=K1jO$Tl&&WedBmzVZ{E=8vfYUtE(el}-#U(jW_)
z;S!{irJa!>e`L+Is{1=sRnU*qpKj-je%8$e;FBNc9JXzZ+?&(Yc}Yp)9~fS9i%z~l
zA&iV!Kr@51NToBS;frY-73}jA_ulmXoTW&7W2w__@Y9FUJ**rRiEgVju&>z{By!>4
zrvB~DBczBGs*U>vB1vuf
zG*!5v^QXUaDy+7IcM|ReZ(qM4@vy>VQV_vl|IXvF@Se4*o%NVO|19?8TMZfd`;bp}
z1vnT_K85(Je)zpNBNjXy*Yc!;u-7+t|H~UE4vw@Z>`C4jNk`W^V?j}r$G9FHLZ5Xx
z9vNmr_lM==608kw$n{fezwSu{fA1TK46(!9qRzl?vDz-}iN_FQw4UzBdRcu=ceYK1B9Y+iK$2UYXC4;6
zr<3-AmAV#sIA#NBgAgWgRFhtVp+3s<|3^+
zYS(DSjQ_l?;|~WfwtDmWGQaMd9{#Px+5y3lr@vq6RG%s-kwz5KA2zrchzA-lt$_GM~58G@v6bn53{FwVHgt;hfpkobZvJm55+uBEfv4PKfHM
zzK*w--xIy|l#*vIBKVrYzdHQsO1Ww0_l;cn0xYa7R<#vVemEkh9^_TDYl`yL%zmd946L&_xY6z
zNm!RO9Gey?XjF=ijP6a8^_e=FzP?n49V4dmBso#Bl0{8sAf!(?l{~BDUW|`#Eu@yF-l!(pJ?v);Y(~SKZWxKX93rljjCJs8YUxaoz
zSB4|q;Tu&HV#)tzUAO$P<}oTKj77SsaJ5BAN$E^8mmmLaG^Rzd2m|zUwC()L-94y>
z>g;D&5j86D;i0V($;-y5KsNpvyVYa#3$-NTfCz!UzWEfWIE>aH=IAfA!TPN)1ZnA2
z^;GXH!Mn$l!cMs?&WWY3RldAr_`}B*X+J~rm|@9M);hbY8P6zoJGaojYD-
z)yZ$H$15dXzcSEh$SBG_dD5AwV3Lq~r98Gv+8Nn-?Zdgx?>`X9^OB@l{N&e##S7}K
z33~lW^=Qm3TGA&e9A7V>sPyTSO$FpTTiiI4Fz_
zW9C8nJLa>=q3$PX%#$q5)mF{*I^czyOFELnpGbK8Z2H`Z@Ol;d=RFzX?jnU~z4PO7dVLf6j93b%rX