diff --git a/.gitignore b/.gitignore deleted file mode 100644 index beda0b8..0000000 --- a/.gitignore +++ /dev/null @@ -1,132 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -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/ - -# 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/ - -# 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 -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# vs-code -.vscode/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 9604160..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Taewoon Kim - -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/Makefile b/Makefile deleted file mode 100644 index 8162397..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -.PHONY: quality style test - -check_dirs := ./ - -# Check that source code meets quality standards - -quality: - black --check --line-length 88 $(check_dirs) - isort --check-only $(check_dirs) - flake8 $(check_dirs) --max-line-length 88 - mdformat --check $(check_dirs) - -# Format source code automatically -style: - black --line-length 88 $(check_dirs) - isort $(check_dirs) - mdformat $(check_dirs) - -# Run python unittests -test: - python -m unittest discover ./test diff --git a/README.md b/README.md index 1c281bc..3e00a47 100644 --- a/README.md +++ b/README.md @@ -1,173 +1 @@ -# The Room environment - v1 - -[![DOI](https://img.shields.io/badge/Paper-PDF-red.svg)](https://doi.org/10.1609/aaai.v37i1.25075) -[![DOI](https://zenodo.org/badge/477781069.svg)](https://zenodo.org/badge/latestdoi/477781069) -[![PyPI version](https://badge.fury.io/py/room-env.svg)](https://badge.fury.io/py/room-env) - -For the documentation of [RoomEnv-v0](./documents/README-v0.md), click the corresponding buttons. - -This document, RoomEnv-v1, is the most up-to-date one. - -We have released a challenging [Gymnasium](https://www.gymlibrary.dev/) compatible -environment. The best strategy for this environment is to have both episodic and semantic -memory systems. See the [paper](https://doi.org/10.1609/aaai.v37i1.25075) for more information. - -## Prerequisites - -1. A unix or unix-like x86 machine -1. python 3.8 or higher. -1. Running in a virtual environment (e.g., conda, virtualenv, etc.) is highly recommended so that you don't mess up with the system python. -1. This env is added to the PyPI server. Just run: `pip install room-env` - -## RoomEnv-v1 - -```python -import gymnasium as gym -import room_env -import random - -env = gym.make("RoomEnv-v1") -observation, info = env.reset() -rewards = 0 - -while True: - # There is one different thing in the RoomEnv from the original AAAI-2023 paper: - # The reward is either +1 or -1, instead of +1 or 0. - observation, reward, done, truncated, info = env.step(random.randint(0, 2)) - rewards += reward - if done: - break - -print(rewards) -``` - -Every time when an agent takes an action, the environment will give you three memory -systems (i.e., episodic, semantic, and short-term), as an `observation`. The goal of the -agent is to learn a memory management policy. The actions are: - -- 0: Put the short-term memory into the episodic memory system. -- 1: Put it into the semantic. -- 2: Just forget it. - -The memory systems will be managed according to your actions, and they will eventually -be used to answer questions. You don't have to worry about the question answering. It's done -by the environment. The better you manage your memory systems, the higher chances that -your agent can answer more questions correctly! - -The default parameters for the environment are - -```json -{ - "des_size": "l", - "seed": 42, - "policies": {"encoding": "argmax", - "memory_management": "RL", - "question_answer": "episodic_semantic"}, - "capacity": {"episodic": 16, "semantic": 16, "short": 1}, - "question_prob": 1.0, - "observation_params": "perfect", - "allow_random_human": False, - "allow_random_question": False, - "total_episode_rewards": 128, - "pretrain_semantic": False, - "check_resources": True, - "varying_rewards": False -} -``` - -If you want to create an env with a different set of parameters, you can do so. For example: - -```python -env_params = {"seed": 0, - "capacity": {"episodic": 8, "semantic": 16, "short": 1}, - "pretrain_semantic": True} -env = gym.make("RoomEnv-v1", **env_params) -``` - -Take a look at [this repo](https://github.com/tae898/explicit-memory) for an actual -interaction with this environment to learn a policy. - -## Data collection - -Data is collected from querying ConceptNet APIs. For simplicity, we only collect triples -whose format is (`head`, `AtLocation`, `tail`). Here `head` is one of the 80 MS COCO -dataset categories. This was kept in mind so that later on we can use images as well. - -If you want to collect the data manually, then run below: - -``` -python collect_data.py -``` - -## [The RoomDes](room_env/des.py) - -The DES is part of RoomEnv. You don't have to care about how it works. If you are still -curious, you can read below. - -You can run the RoomDes by - -```python -from room_env.des import RoomDes - -des = RoomDes() -des.run(debug=True) -``` - -with `debug=True` it'll print events (i.e., state changes) to the console. - -```console -{'resource_changes': {'desk': -1, 'lap': 1}, - 'state_changes': {'Vincent': {'current_time': 1, - 'object_location': {'current': 'desk', - 'previous': 'lap'}}}} -{'resource_changes': {}, 'state_changes': {}} -{'resource_changes': {}, 'state_changes': {}} -{'resource_changes': {}, - 'state_changes': {'Michael': {'current_time': 4, - 'object_location': {'current': 'lap', - 'previous': 'desk'}}, - 'Tae': {'current_time': 4, - 'object_location': {'current': 'desk', - 'previous': 'lap'}}}} -``` - -## Contributing - -Contributions are what make the open source community such an amazing place to be learn, -inspire, and create. Any contributions you make are **greatly appreciated**. - -1. Fork the Project -1. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -1. Run `make test && make style && make quality` in the root repo directory, - to ensure code quality. -1. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -1. Push to the Branch (`git push origin feature/AmazingFeature`) -1. Open a Pull Request - -## [Cite our paper](https://doi.org/10.1609/aaai.v37i1.25075) - -```bibtex -@article{Kim_Cochez_Francois-Lavet_Neerincx_Vossen_2023, - title={A Machine with Short-Term, Episodic, and Semantic Memory Systems}, volume={37}, - url={https://ojs.aaai.org/index.php/AAAI/article/view/25075}, - DOI={10.1609/aaai.v37i1.25075}, - abstractNote={Inspired by the cognitive science theory of the explicit human memory systems, we have modeled an agent with short-term, episodic, and semantic memory systems, each of which is modeled with a knowledge graph. To evaluate this system and analyze the behavior of this agent, we designed and released our own reinforcement learning agent environment, “the Room”, where an agent has to learn how to encode, store, and retrieve memories to maximize its return by answering questions. We show that our deep Q-learning based agent successfully learns whether a short-term memory should be forgotten, or rather be stored in the episodic or semantic memory systems. Our experiments indicate that an agent with human-like memory systems can outperform an agent without this memory structure in the environment.}, - number={1}, - journal={Proceedings of the AAAI Conference on Artificial Intelligence}, author={Kim, Taewoon and Cochez, Michael and Francois-Lavet, Vincent and Neerincx, Mark and Vossen, Piek}, - year={2023}, - month={Jun.}, - pages={48-56} -} -``` - -## Authors - -- [Taewoon Kim](https://taewoon.kim/) -- [Michael Cochez](https://www.cochez.nl/) -- [Vincent Francois-Lavet](http://vincent.francois-l.be/) -- [Mark Neerincx](https://ocw.tudelft.nl/teachers/m_a_neerincx/) -- [Piek Vossen](https://vossen.info/) - -## License - -[MIT](https://choosealicense.com/licenses/mit/) +# https://github.com/humemai/room-env \ No newline at end of file diff --git a/collect_conceptnet.py b/collect_conceptnet.py deleted file mode 100644 index b9f53ed..0000000 --- a/collect_conceptnet.py +++ /dev/null @@ -1,171 +0,0 @@ -"""Collect data from ConceptNet.""" -import json -import logging -import os - -import requests -import yaml -from tqdm import tqdm - -logging.basicConfig( - level=os.environ.get("LOGLEVEL", "INFO").upper(), - format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", -) - - -class DataCollector: - """Data (conceptnet) collector class.""" - - def __init__( - self, - relation: str, - conceptnet_data_path: str, - conceptnet_data_refresh: bool, - semantic_knowledge_path: str, - weighting_mode: bool, - api_url: str, - ): - """Data (conceptnet) collector class. - - Args - ---- - relation: See https://github.com/commonsense/conceptnet5/wiki/Relations for - all relations. - conceptnet_data_path: Where to save raw queried conceptnet data path - conceptnet_data_refresh: Whether to download the conceptnet data again or not. - semantic_knowledge_path: Where to save pre-trained semantic (factual) knowledge - weighting_mode: "highest" chooses the one with the highest weight, "weighted" - chooses all of them by weight, and null chooses every single one of them - without weighting. - api_url: e.g., http://api.conceptnet.io/, http://127.0.0.1:8084/, etc. - - """ - self.relation = relation - self.relation_simple = self.relation.split("/")[-1] - - self.conceptnet_data_path = conceptnet_data_path - self.conceptnet_data_refresh = conceptnet_data_refresh - self.semantic_knowledge_path = semantic_knowledge_path - self.weighting_mode = weighting_mode - self.api_url = api_url - - self.read_mscoco() - os.makedirs("./room_env/data", exist_ok=True) - - logging.info("DataCollector object successfully instantiated!") - - def read_mscoco(self, path: str = "./room_env/data/ms-coco-80-categories") -> None: - """Return ms coco 80 object categories. - - Args - ---- - path: The path to the mscoco object category list. - - """ - logging.debug(f"Reading {path} ...") - with open(path, "r") as stream: - self.mscoco = stream.readlines() - self.mscoco = [line.strip() for line in self.mscoco] - self.mscoco = ["_".join(foo.split()) for foo in self.mscoco] - logging.info( - f"Reading {path} complete! There are {len(self.mscoco)} object categories " - "in total." - ) - - def get_from_conceptnet(self) -> None: - """Get data from ConceptNet API by HTTP get query.""" - logging.debug("retrieving data from conceptnet ...") - - if self.conceptnet_data_refresh: - self.raw_data = {} - for object_category in tqdm(self.mscoco): - query = ( - f"{self.api_url}" - f"query?start=/c/en/{object_category}&rel={self.relation}" - ) - logging.debug(f"making an HTTP get request with query {query}") - response = requests.get(query).json() - - logging.info( - f"{len(response['edges'])} tails (entities) found for " - f"{object_category}!" - ) - if len(response["edges"]) == 0: - continue - - self.raw_data[object_category] = [] - - for edge in tqdm(response["edges"]): - self.raw_data[object_category].append( - { - "start": edge["start"], - "end": edge["end"], - "weight": edge["weight"], - "surfaceText": edge["surfaceText"], - } - ) - - with open(self.conceptnet_data_path, "w") as stream: - json.dump(self.raw_data, stream, indent=4, sort_keys=False) - logging.info( - f"conceptconceptnet_data_path data retrieval done and saved at " - f"{self.conceptnet_data_path}" - ) - else: - logging.debug( - f"Loading the existing conceptnet data from " - f"{self.conceptnet_data_path}..." - ) - with open(self.conceptnet_data_path, "r") as stream: - self.raw_data = json.load(stream) - logging.info( - f"Conceptnet data successfully loaded from {self.conceptnet_data_path}" - ) - - logging.debug( - f"Creating semantic knowledge at {self.semantic_knowledge_path} ..." - ) - self.semantic_knowledge = {} - - for key, val in self.raw_data.items(): - head = key - - self.semantic_knowledge[head] = {self.relation_simple: []} - - if self.weighting_mode == "highest" and len(val) > 0: - tail = sorted(val, key=lambda x: x["weight"], reverse=True)[0] - tail = tail["end"]["@id"].split("/")[-1] - self.semantic_knowledge[head][self.relation_simple].append( - {"tail": tail, "weight": 1} - ) - - else: - for val_ in val: - tail = val_["end"]["@id"].split("/")[-1] - - weight = 1 if self.weighting_mode is None else round(val_["weight"]) - - self.semantic_knowledge[head][self.relation_simple].append( - {"tail": tail, "weight": weight} - ) - - with open(self.semantic_knowledge_path, "w") as stream: - json.dump(self.semantic_knowledge, stream, indent=4, sort_keys=False) - logging.info(f"semantic knowledge saved at {self.semantic_knowledge_path} ...") - - -def main(**kwargs) -> None: - """Collect data. See ./collect_conceptnet.yaml for the config.""" - dc = DataCollector(**kwargs) - dc.get_from_conceptnet() - - -if __name__ == "__main__": - with open("./collect_conceptnet.yaml", "r") as stream: - config = yaml.safe_load(stream) - print("Arguments:") - for k, v in config.items(): - print(f" {k:>21} : {v}") - - main(**config) diff --git a/collect_conceptnet.yaml b/collect_conceptnet.yaml deleted file mode 100644 index 870a9e3..0000000 --- a/collect_conceptnet.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# See https://github.com/commonsense/conceptnet5/wiki/Relations for all relations -relation: /r/AtLocation - -api_url: http://api.conceptnet.io/ -# api_url: http://127.0.0.1:8084/ - -# Where to save raw queried conceptnet data path -conceptnet_data_path: ./room_env/data/conceptnet-data.json - -# Whether to download the conceptnet data again or not. -conceptnet_data_refresh: true - -# Where to save pre-trained semantic (factual) knowledge -semantic_knowledge_path: ./room_env/data/semantic-knowledge.json - -# "highest" chooses the one with the highest weight, "weighted" chooses all of them by weight, -# and null chooses every single one of them without weighting. -weighting_mode: highest diff --git a/create_des_config.py b/create_des_config.py deleted file mode 100644 index 22ffed2..0000000 --- a/create_des_config.py +++ /dev/null @@ -1,217 +0,0 @@ -import json -import logging -import os -import random -from copy import deepcopy -from typing import List - -import yaml - -logging.basicConfig( - level=os.environ.get("LOGLEVEL", "DEBUG").upper(), - format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", -) - - -def get_objects_and_locations( - total_objects: list, - maximum_num_objects_per_human: int, - maxiumum_days_period: int, - maximum_num_locations_per_object: int, - commonsense_prob: float, - possible_object_locations: list, - semantic_knowledge: dict, -) -> List: - """Get objects and their locations for one human. - - Args - ---- - total_objects: total possible objects. - maximum_num_objects_per_human: maximum number of objects per human - maxiumum_days_period: maximum number of days per period. - maximum_num_locations_per_object: maximum number of locations per object. - commonsense_prob: the probability of an object being located at a commonsense - location. - possible_object_locations: possible object locations, - semantic_knowledge: commonsense knowledge, - - Returns - ------- - objects and their locations (e.g., [["laptop", "desk"], ["laptop", "desk"], - ["laptop", "table"], ["laptop", "desk"]]) - - """ - logging.debug("Getting objects and their locations for one human ...") - - random.shuffle(total_objects) - num_objects = random.randint(1, maximum_num_objects_per_human) - objs = total_objects[:num_objects] - - object_locations = [] - - for obj in objs: - num_days_period = random.randint(1, maxiumum_days_period) - num_locations_per_object = random.randint(1, maximum_num_locations_per_object) - - probs = [commonsense_prob] + [ - (1 - commonsense_prob) / (num_locations_per_object - 1) - for _ in range(num_locations_per_object - 1) - ] - - obj_locs = [semantic_knowledge[obj]] - count = 0 - while len(obj_locs) != num_locations_per_object: - # print(obj_locs) - - loc = random.choice(possible_object_locations) - if loc not in obj_locs: - obj_locs.append(loc) - count += 1 - - assert len(obj_locs) == len(probs) - - obj_locs = random.choices(obj_locs, probs, k=num_days_period) - for loc in obj_locs: - object_locations.append([obj, loc]) - - return object_locations - - -def main( - semantic_knowledge_path: str, - human_names_path: str, - save_path: str, - num_humans: int, - num_total_objects: int, - maximum_num_objects_per_human: int, - maximum_num_locations_per_object: int, - commonsense_prob: float, - maxiumum_days_period: int, - last_timestep: int, - seed: int, -) -> None: - """Run! - - Args - ---- - semantic_knowledge_path: e.g., "./room_env/data/semantic-knowledge.json" - human_names_path: e.g., "./room_env/data/human-names" - save_path: e.g., "./room_env/data/des-config-m.json" - num_humans: e.g., 8 - num_total_objects: e.g., 8 - maximum_num_locations_per_object: maximum number of locations per object (e.g., 8) - commonsense_prob: commonsense probability (e.g., 0.8) - maxiumum_days_period: maximum number of days per period. - last_timestep: the last day when the DES stops (e.g., 1000). - seed: random seed - - """ - assert num_total_objects >= maximum_num_objects_per_human - - config = {"components": {}, "resources": {}, "last_timestep": last_timestep} - - assert maximum_num_locations_per_object <= maxiumum_days_period - - # for reproducibility - random.seed(seed) - with open(human_names_path, "r") as stream: - human_names = [foo.strip() for foo in stream.readlines()] - - with open(semantic_knowledge_path, "r") as stream: - semantic_knowledge = json.load(stream) - - assert num_humans <= len(human_names) - - logging.debug( - f"There were {len(semantic_knowledge)} objects before removing the duplicate " - "object locations." - ) - unique_locations = [] - - for key, val in deepcopy(semantic_knowledge).items(): - if "_" in key: - del semantic_knowledge[key] - continue - if val["AtLocation"][0]["tail"] in unique_locations: - del semantic_knowledge[key] - continue - if "_" in val["AtLocation"][0]["tail"]: - del semantic_knowledge[key] - continue - # This avoids locations being same as object names. - if val["AtLocation"][0]["tail"] in list(semantic_knowledge): - del semantic_knowledge[key] - continue - - unique_locations.append(val["AtLocation"][0]["tail"]) - - logging.info( - f"There are now {len(semantic_knowledge)} objects before after the duplicate " - "object locations." - ) - - semantic_knowledge = { - key: val["AtLocation"][0]["tail"] for key, val in semantic_knowledge.items() - } - - assert num_total_objects <= len(semantic_knowledge) - assert maximum_num_objects_per_human <= len(semantic_knowledge) - assert maximum_num_locations_per_object <= len(semantic_knowledge) - - random.shuffle(human_names) - total_humans = human_names[:num_humans] - - total_objects = list(semantic_knowledge) - random.shuffle(total_objects) - total_objects = total_objects[:num_total_objects] - - possible_object_locations = list(semantic_knowledge.values()) - possible_object_locations = [ - loc - for loc in possible_object_locations - if loc not in human_names and loc not in total_objects - ] - - semantic_knowledge = {obj: semantic_knowledge[obj] for obj in total_objects} - - assert len(semantic_knowledge) == num_total_objects - - random.shuffle(total_humans) - - for human in total_humans: - - config["components"][human] = get_objects_and_locations( - total_objects, - maximum_num_objects_per_human, - maxiumum_days_period, - maximum_num_locations_per_object, - commonsense_prob, - possible_object_locations, - semantic_knowledge, - ) - - config["semantic_knowledge"] = semantic_knowledge - - config["resources"] = {} - config["complexity"] = ( - num_humans - * num_total_objects - * maximum_num_objects_per_human - * maximum_num_locations_per_object - * maxiumum_days_period - ) - with open(save_path, "w") as stream: - json.dump(config, stream, indent=4, sort_keys=False) - - logging.info(f"DES config done! they are saved at {save_path}") - - -if __name__ == "__main__": - with open("./create_des_config.yaml", "r") as stream: - config = yaml.safe_load(stream) - print("Arguments:") - for k, v in config.items(): - print(f" {k:>21} : {v}") - - main(**config) diff --git a/create_des_config.yaml b/create_des_config.yaml deleted file mode 100644 index f621a75..0000000 --- a/create_des_config.yaml +++ /dev/null @@ -1,11 +0,0 @@ -commonsense_prob: 0.5 -human_names_path: ./room_env/data/human-names -last_timestep: 128 -maximum_num_locations_per_object: 3 -maximum_num_objects_per_human: 4 -maxiumum_days_period: 8 -num_humans: 64 -num_total_objects: 16 -save_path: ./room_env/data/des-config-l-v2.json -seed: 42 -semantic_knowledge_path: ./room_env/data/semantic-knowledge.json diff --git a/des-hp-tuning.ipynb b/des-hp-tuning.ipynb deleted file mode 100644 index 19598d3..0000000 --- a/des-hp-tuning.ipynb +++ /dev/null @@ -1,1593 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logger = logging.getLogger()\n", - "logger.disabled = True\n", - "\n", - "from tqdm.notebook import tqdm\n", - "import room_env\n", - "from room_env.utils import get_des_variables, run_all_des_configs, fill_des_resources" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "capacity=32, num_humans=64, num_total_objects=16\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "25b8ebe632ff45dda2ab05bf8460f439", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/48 [00:00\u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n" - ] - }, - { - "data": { - "text/plain": [ - "[{'mean_rewards_diff': 7.933333333333334,\n", - " 'mean_rewards_episodic': -2.6,\n", - " 'mean_rewards_semantic': 11.8,\n", - " 'mean_rewards_random': 7.2,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 16384,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 7.866666666666666,\n", - " 'mean_rewards_episodic': -3.2,\n", - " 'mean_rewards_semantic': 2.8,\n", - " 'mean_rewards_random': -1.6,\n", - " 'mean_rewards_pre_sem': 7.2,\n", - " 'complexity': 98304,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 7.266666666666667,\n", - " 'mean_rewards_episodic': -3.8,\n", - " 'mean_rewards_semantic': 1.4,\n", - " 'mean_rewards_random': -3.8,\n", - " 'mean_rewards_pre_sem': 5.2,\n", - " 'complexity': 196608,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 7.2,\n", - " 'mean_rewards_episodic': -3.2,\n", - " 'mean_rewards_semantic': 4.0,\n", - " 'mean_rewards_random': -2.6,\n", - " 'mean_rewards_pre_sem': 6.6,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 7.133333333333333,\n", - " 'mean_rewards_episodic': -4.0,\n", - " 'mean_rewards_semantic': 0.0,\n", - " 'mean_rewards_random': -3.6,\n", - " 'mean_rewards_pre_sem': 4.6,\n", - " 'complexity': 131072,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 7.066666666666666,\n", - " 'mean_rewards_episodic': -3.4,\n", - " 'mean_rewards_semantic': 4.4,\n", - " 'mean_rewards_random': 2.4,\n", - " 'mean_rewards_pre_sem': 8.2,\n", - " 'complexity': 98304,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.866666666666667,\n", - " 'mean_rewards_episodic': -0.6,\n", - " 'mean_rewards_semantic': 12.6,\n", - " 'mean_rewards_random': 7.6,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 24576,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.866666666666667,\n", - " 'mean_rewards_episodic': -2.8,\n", - " 'mean_rewards_semantic': 3.0,\n", - " 'mean_rewards_random': -2.2,\n", - " 'mean_rewards_pre_sem': 6.2,\n", - " 'complexity': 49152,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.533333333333335,\n", - " 'mean_rewards_episodic': -0.6,\n", - " 'mean_rewards_semantic': 13.0,\n", - " 'mean_rewards_random': 8.2,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.466666666666667,\n", - " 'mean_rewards_episodic': -2.6,\n", - " 'mean_rewards_semantic': 7.8,\n", - " 'mean_rewards_random': 2.4,\n", - " 'mean_rewards_pre_sem': 9.0,\n", - " 'complexity': 131072,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.400000000000001,\n", - " 'mean_rewards_episodic': 0.8,\n", - " 'mean_rewards_semantic': 12.2,\n", - " 'mean_rewards_random': 8.0,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 12288,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.4,\n", - " 'mean_rewards_episodic': 1.2,\n", - " 'mean_rewards_semantic': 6.0,\n", - " 'mean_rewards_random': 0.0,\n", - " 'mean_rewards_pre_sem': 8.8,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.4,\n", - " 'mean_rewards_episodic': -7.0,\n", - " 'mean_rewards_semantic': -0.2,\n", - " 'mean_rewards_random': -5.4,\n", - " 'mean_rewards_pre_sem': 2.2,\n", - " 'complexity': 262144,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.333333333333333,\n", - " 'mean_rewards_episodic': 0.6,\n", - " 'mean_rewards_semantic': 2.8,\n", - " 'mean_rewards_random': -1.4,\n", - " 'mean_rewards_pre_sem': 7.0,\n", - " 'complexity': 24576,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.133333333333335,\n", - " 'mean_rewards_episodic': 3.2,\n", - " 'mean_rewards_semantic': 10.8,\n", - " 'mean_rewards_random': 7.8,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 8192,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.133333333333334,\n", - " 'mean_rewards_episodic': -5.0,\n", - " 'mean_rewards_semantic': -0.6,\n", - " 'mean_rewards_random': -2.6,\n", - " 'mean_rewards_pre_sem': 3.4,\n", - " 'complexity': 73728,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.066666666666667,\n", - " 'mean_rewards_episodic': -4.4,\n", - " 'mean_rewards_semantic': 2.4,\n", - " 'mean_rewards_random': -1.2,\n", - " 'mean_rewards_pre_sem': 5.0,\n", - " 'complexity': 65536,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 6.000000000000001,\n", - " 'mean_rewards_episodic': 1.4,\n", - " 'mean_rewards_semantic': 13.0,\n", - " 'mean_rewards_random': 7.8,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 49152,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.933333333333334,\n", - " 'mean_rewards_episodic': -2.6,\n", - " 'mean_rewards_semantic': 1.0,\n", - " 'mean_rewards_random': -2.4,\n", - " 'mean_rewards_pre_sem': 4.6,\n", - " 'complexity': 98304,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.933333333333333,\n", - " 'mean_rewards_episodic': -1.0,\n", - " 'mean_rewards_semantic': 6.6,\n", - " 'mean_rewards_random': 0.0,\n", - " 'mean_rewards_pre_sem': 7.8,\n", - " 'complexity': 49152,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.800000000000001,\n", - " 'mean_rewards_episodic': 0.2,\n", - " 'mean_rewards_semantic': 5.0,\n", - " 'mean_rewards_random': -0.4,\n", - " 'mean_rewards_pre_sem': 7.4,\n", - " 'complexity': 65536,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.6,\n", - " 'mean_rewards_episodic': -3.2,\n", - " 'mean_rewards_semantic': 2.0,\n", - " 'mean_rewards_random': -3.0,\n", - " 'mean_rewards_pre_sem': 4.2,\n", - " 'complexity': 98304,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.533333333333334,\n", - " 'mean_rewards_episodic': -2.0,\n", - " 'mean_rewards_semantic': 4.0,\n", - " 'mean_rewards_random': -0.6,\n", - " 'mean_rewards_pre_sem': 6.0,\n", - " 'complexity': 147456,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.466666666666667,\n", - " 'mean_rewards_episodic': -2.0,\n", - " 'mean_rewards_semantic': 3.0,\n", - " 'mean_rewards_random': -0.6,\n", - " 'mean_rewards_pre_sem': 5.6,\n", - " 'complexity': 36864,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.3999999999999995,\n", - " 'mean_rewards_episodic': 2.8,\n", - " 'mean_rewards_semantic': 6.8,\n", - " 'mean_rewards_random': 3.0,\n", - " 'mean_rewards_pre_sem': 9.6,\n", - " 'complexity': 16384,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.3999999999999995,\n", - " 'mean_rewards_episodic': -1.6,\n", - " 'mean_rewards_semantic': 4.6,\n", - " 'mean_rewards_random': 1.2,\n", - " 'mean_rewards_pre_sem': 6.8,\n", - " 'complexity': 24576,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.066666666666666,\n", - " 'mean_rewards_episodic': 2.0,\n", - " 'mean_rewards_semantic': 13.2,\n", - " 'mean_rewards_random': 9.8,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 65536,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 5.0,\n", - " 'mean_rewards_episodic': -4.2,\n", - " 'mean_rewards_semantic': 1.8,\n", - " 'mean_rewards_random': -2.4,\n", - " 'mean_rewards_pre_sem': 3.4,\n", - " 'complexity': 196608,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.733333333333333,\n", - " 'mean_rewards_episodic': -5.2,\n", - " 'mean_rewards_semantic': 1.6,\n", - " 'mean_rewards_random': -2.2,\n", - " 'mean_rewards_pre_sem': 2.8,\n", - " 'complexity': 65536,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 4,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.6,\n", - " 'mean_rewards_episodic': -0.2,\n", - " 'mean_rewards_semantic': 2.8,\n", - " 'mean_rewards_random': -0.8,\n", - " 'mean_rewards_pre_sem': 5.2,\n", - " 'complexity': 49152,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 3,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.533333333333334,\n", - " 'mean_rewards_episodic': 4.4,\n", - " 'mean_rewards_semantic': 12.6,\n", - " 'mean_rewards_random': 9.6,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.533333333333334,\n", - " 'mean_rewards_episodic': 0.6,\n", - " 'mean_rewards_semantic': 3.4,\n", - " 'mean_rewards_random': 1.6,\n", - " 'mean_rewards_pre_sem': 6.4,\n", - " 'complexity': 49152,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.400000000000001,\n", - " 'mean_rewards_episodic': 4.2,\n", - " 'mean_rewards_semantic': 13.2,\n", - " 'mean_rewards_random': 9.6,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 16384,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.333333333333334,\n", - " 'mean_rewards_episodic': 3.2,\n", - " 'mean_rewards_semantic': 3.2,\n", - " 'mean_rewards_random': -0.2,\n", - " 'mean_rewards_pre_sem': 6.4,\n", - " 'complexity': 24576,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 4.2,\n", - " 'mean_rewards_episodic': 1.0,\n", - " 'mean_rewards_semantic': 4.4,\n", - " 'mean_rewards_random': 1.8,\n", - " 'mean_rewards_pre_sem': 6.6,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.9333333333333336,\n", - " 'mean_rewards_episodic': -0.4,\n", - " 'mean_rewards_semantic': 1.8,\n", - " 'mean_rewards_random': -3.0,\n", - " 'mean_rewards_pre_sem': 3.4,\n", - " 'complexity': 131072,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.9333333333333327,\n", - " 'mean_rewards_episodic': 0.8,\n", - " 'mean_rewards_semantic': 3.8,\n", - " 'mean_rewards_random': 0.4,\n", - " 'mean_rewards_pre_sem': 5.6,\n", - " 'complexity': 65536,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 2,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.7333333333333334,\n", - " 'mean_rewards_episodic': 5.2,\n", - " 'mean_rewards_semantic': 4.4,\n", - " 'mean_rewards_random': 3.2,\n", - " 'mean_rewards_pre_sem': 8.0,\n", - " 'complexity': 16384,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.6000000000000005,\n", - " 'mean_rewards_episodic': 5.2,\n", - " 'mean_rewards_semantic': 5.4,\n", - " 'mean_rewards_random': 3.8,\n", - " 'mean_rewards_pre_sem': 8.4,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.466666666666667,\n", - " 'mean_rewards_episodic': 4.8,\n", - " 'mean_rewards_semantic': 3.0,\n", - " 'mean_rewards_random': 2.2,\n", - " 'mean_rewards_pre_sem': 6.8,\n", - " 'complexity': 12288,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.4666666666666663,\n", - " 'mean_rewards_episodic': -0.4,\n", - " 'mean_rewards_semantic': 0.2,\n", - " 'mean_rewards_random': -2.4,\n", - " 'mean_rewards_pre_sem': 2.6,\n", - " 'complexity': 65536,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 3.333333333333334,\n", - " 'mean_rewards_episodic': 3.0,\n", - " 'mean_rewards_semantic': 2.6,\n", - " 'mean_rewards_random': 0.6,\n", - " 'mean_rewards_pre_sem': 5.4,\n", - " 'complexity': 32768,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 2.8666666666666667,\n", - " 'mean_rewards_episodic': 8.0,\n", - " 'mean_rewards_semantic': 13.4,\n", - " 'mean_rewards_random': 10.2,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 4096,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 2.800000000000001,\n", - " 'mean_rewards_episodic': 6.6,\n", - " 'mean_rewards_semantic': 4.6,\n", - " 'mean_rewards_random': 5.6,\n", - " 'mean_rewards_pre_sem': 8.4,\n", - " 'complexity': 8192,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 2,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 2.733333333333334,\n", - " 'mean_rewards_episodic': 8.0,\n", - " 'mean_rewards_semantic': 13.4,\n", - " 'mean_rewards_random': 10.6,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 8192,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 8,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 2.7333333333333334,\n", - " 'mean_rewards_episodic': 2.4,\n", - " 'mean_rewards_semantic': 1.6,\n", - " 'mean_rewards_random': 0.4,\n", - " 'mean_rewards_pre_sem': 4.2,\n", - " 'complexity': 49152,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 3,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 2.600000000000001,\n", - " 'mean_rewards_episodic': 8.0,\n", - " 'mean_rewards_semantic': 13.4,\n", - " 'mean_rewards_random': 11.0,\n", - " 'mean_rewards_pre_sem': 13.4,\n", - " 'complexity': 16384,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 1,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 16,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1},\n", - " {'mean_rewards_diff': 2.1333333333333337,\n", - " 'mean_rewards_episodic': 4.4,\n", - " 'mean_rewards_semantic': 4.0,\n", - " 'mean_rewards_random': 2.6,\n", - " 'mean_rewards_pre_sem': 5.8,\n", - " 'complexity': 16384,\n", - " 'commonsense_prob': 0.5,\n", - " 'maximum_num_locations_per_object': 4,\n", - " 'maximum_num_objects_per_human': 1,\n", - " 'num_humans': 64,\n", - " 'num_total_objects': 16,\n", - " 'maxiumum_days_period': 4,\n", - " 'allow_random_human': False,\n", - " 'allow_random_question': True,\n", - " 'question_prob': 0.1}]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "configs_all = []\n", - "results_all = []\n", - "for des_size in [\"l\"]:\n", - " capacity, num_humans, num_total_objects = get_des_variables(des_size=des_size)\n", - " print(\n", - " f\"capacity={capacity}, num_humans={num_humans}, num_total_objects={num_total_objects}\"\n", - " )\n", - " for allow_random_human in [False]:\n", - " for allow_random_question in [True]:\n", - " for maximum_num_objects_per_human in [1, 2, 3, 4]:\n", - " for maximum_num_locations_per_object in [1, 2, 3, 4]:\n", - " for maxiumum_days_period in [4, 8, 16]:\n", - " for commonsense_prob in [0.5]:\n", - " for question_prob in [0.1]:\n", - " configs_all.append(\n", - " {\n", - " \"des_size\": des_size,\n", - " \"capacity\": capacity,\n", - " \"maximum_num_objects_per_human\": maximum_num_objects_per_human,\n", - " \"maximum_num_locations_per_object\": maximum_num_locations_per_object,\n", - " \"maxiumum_days_period\": maxiumum_days_period,\n", - " \"commonsense_prob\": commonsense_prob,\n", - " \"num_humans\": num_humans,\n", - " \"num_total_objects\": num_total_objects,\n", - " \"seeds\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", - " \"allow_random_human\": allow_random_human,\n", - " \"allow_random_question\": allow_random_question,\n", - " \"last_timestep\": 128,\n", - " \"question_prob\": question_prob,\n", - " \"version\": \"v1\",\n", - " }\n", - " )\n", - "\n", - "for config in tqdm(configs_all):\n", - " results = run_all_des_configs(**config)\n", - " results_all.append(results)\n", - "results_all = [foo for foo in results_all if foo is not None]\n", - "sorted(results_all, key=lambda x: -x[\"mean_rewards_diff\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "{\n", - " \"mean_rewards_diff\": 7.866666666666666,\n", - " \"mean_rewards_episodic\": -3.2,\n", - " \"mean_rewards_semantic\": 2.8,\n", - " \"mean_rewards_random\": -1.6,\n", - " \"mean_rewards_pre_sem\": 7.2,\n", - " \"complexity\": 98304,\n", - " \"commonsense_prob\": 0.5,\n", - " \"maximum_num_locations_per_object\": 3,\n", - " \"maximum_num_objects_per_human\": 4,\n", - " \"num_humans\": 64,\n", - " \"num_total_objects\": 16,\n", - " \"maxiumum_days_period\": 8,\n", - " \"allow_random_human\": False,\n", - " \"allow_random_question\": True,\n", - " \"question_prob\": 0.1,\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: \u001b[33mWARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API. \u001b[0m\n", - " logger.deprecation(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n" - ] - } - ], - "source": [ - "run_all_des_configs(\n", - " **{\n", - " \"des_size\": des_size,\n", - " \"capacity\": capacity,\n", - " \"maximum_num_objects_per_human\": 4,\n", - " \"maximum_num_locations_per_object\": 3,\n", - " \"maxiumum_days_period\": 8,\n", - " \"commonsense_prob\": 0.5,\n", - " \"num_humans\": 64,\n", - " \"num_total_objects\": 16,\n", - " \"seeds\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", - " \"allow_random_human\": False,\n", - " \"allow_random_question\": True,\n", - " \"last_timestep\": 128,\n", - " \"question_prob\": 0.1,\n", - " \"version\": \"v1\",\n", - " }\n", - ")\n", - "fill_des_resources(des_size=des_size, version=\"v1\")" - ] - } - ], - "metadata": { - "interpreter": { - "hash": "c7c14ce45c674ffbe7e3a8bc18299264a1035542c780d18c0e8f0c585e044f28" - }, - "kernelspec": { - "display_name": "Python 3.8.12 ('dev-python3.8')", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.15" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/documents/README-v0.md b/documents/README-v0.md deleted file mode 100644 index 21fd8f9..0000000 --- a/documents/README-v0.md +++ /dev/null @@ -1,155 +0,0 @@ -# The Room environment - v0 - -[There is a newer version, v1](../README.md) - -We have released a challenging [Gymnasium](https://www.gymlibrary.dev/) compatible -environment. The best strategy for this environment is to have both episodic and semantic -memory systems. See the [paper](https://arxiv.org/abs/2204.01611) for more information. - -## Prerequisites - -1. A unix or unix-like x86 machine -1. python 3.8 or higher. -1. Running in a virtual environment (e.g., conda, virtualenv, etc.) is highly recommended so that you don't mess up with the system python. -1. This env is added to the PyPI server. Just run: `pip install room-env` - -## Data collection - -Data is collected from querying ConceptNet APIs. For simplicity, we only collect triples -whose format is (`head`, `AtLocation`, `tail`). Here `head` is one of the 80 MS COCO -dataset categories. This was kept in mind so that later on we can use images as well. - -If you want to collect the data manually, then run below: - -``` -python collect_data.py -``` - -## How does this environment work? - -The Gymnasium-compatible Room environment is one big room with -_N__people_ number of people who can freely move -around. Each of them selects one object, among -_N__objects_, and places it in one of the -_N__locations_ locations. -_N__agents_ number of agent(s) are also in this -room. They can only observe one human placing an object, one at a time; -**x**(_t_). At the same time, they are given one question -about the location of an object; **q**(_t_). -**x**(_t_) is given as a quadruple, -(**h**(_t_),**r**(_t_),**t**(_t_),_t_), -For example, `` accounts -for an observation where an agent sees James placing his laptop on his -desk at *t* = 42. **q**(_t_) is given as a double, -(**h**,**r**). For example, `` is asking where -Karen’s cat is located. If the agent answers the question correctly, it -gets a reward of  + 1, and if not, it gets 0. - -The reason why the observations and questions are given as -RDF-triple-like format is two folds. One is that this structured format -is easily readable / writable by both humans and machines. Second is -that we can use existing knowledge graphs, such as ConceptNet . - -To simplify the environment, the agents themselves are not actually -moving, but the room is continuously changing. There are several random -factors in this environment to be considered: - -1. With the chance of _p_commonsense, - a human places an object in a commonsense location (e.g., a laptop - on a desk). The commonsense knowledge we use is from ConceptNet. - With the chance of - 1 − *p*_commonsense_, an object is - placed at a non-commonsense random location (e.g., a laptop on the - tree). - -1. With the chance of - _p__new_\__location_, a human changes - object location. - -1. With the chance of _p__new_\__object_, a - human changes his/her object to another one. - -1. With the chance of - _p__switch_\__person_, two people - switch their locations. This is done to mimic an agent moving around - the room. - -All of the four probabilities account for the Bernoulli distributions. - -Consider there is only one agent. Then this is a POMDP, where _S__t_ = (**x**(_t_), **q**(_t_)), _A__t_ = (do something with **x**(_t_), answer **q**(_t_)), and _R__t_ ∈ *{0, 1}*. - -Currently there is no RL trained for this. We only have some heuristics. Take a look at the paper for more details. - -## RoomEnv-v0 - -```python -import gymnasium as gym -import room_env - -env = gym.make("RoomEnv-v0") -(observation, question), info = env.reset() -rewards = 0 - -while True: - (observation, question), reward, done, truncated, info = env.step("This is my answer!") - rewards += reward - if done: - break - -print(rewards) -``` - -Every time when an agent takes an action, the environment will give you an observation -and a question to answer. You can try directly answering the question, -such as `env.step("This is my answer!")`, but a better strategy is to keep the -observations in memory systems and take advantage of the current observation and the -history of them in the memory systems. - -Take a look at [this repo](https://github.com/tae898/explicit-memory) for an actual -interaction with this environment to learn a policy. - -## Contributing - -Contributions are what make the open source community such an amazing place to be learn, -inspire, and create. Any contributions you make are **greatly appreciated**. - -1. Fork the Project -1. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -1. Run `make test && make style && make quality` in the root repo directory, - to ensure code quality. -1. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -1. Push to the Branch (`git push origin feature/AmazingFeature`) -1. Open a Pull Request - -## [Cite our paper](https://arxiv.org/abs/2204.01611) - -```bibtex -@misc{https://doi.org/10.48550/arxiv.2204.01611, - doi = {10.48550/ARXIV.2204.01611}, - url = {https://arxiv.org/abs/2204.01611}, - author = {Kim, Taewoon and Cochez, Michael and Francois-Lavet, Vincent and Neerincx, - Mark and Vossen, Piek}, - keywords = {Artificial Intelligence (cs.AI), FOS: Computer and information sciences, - FOS: Computer and information sciences}, - title = {A Machine With Human-Like Memory Systems}, - publisher = {arXiv}, - year = {2022}, - copyright = {Creative Commons Attribution 4.0 International} -} -``` - -## Cite our code - -[![DOI](https://zenodo.org/badge/477781069.svg)](https://zenodo.org/badge/latestdoi/477781069) - -## Authors - -- [Taewoon Kim](https://taewoon.kim/) -- [Michael Cochez](https://www.cochez.nl/) -- [Vincent Francois-Lavet](http://vincent.francois-l.be/) -- [Mark Neerincx](https://ocw.tudelft.nl/teachers/m_a_neerincx/) -- [Piek Vossen](https://vossen.info/) - -## License - -[MIT](https://choosealicense.com/licenses/mit/) diff --git a/room-env-v1.ipynb b/room-env-v1.ipynb deleted file mode 100644 index dc63044..0000000 --- a/room-env-v1.ipynb +++ /dev/null @@ -1,147 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:174: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed a `seed` instead of using `Env.seed` for resetting the environment random number generator.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:187: UserWarning: \u001b[33mWARN: Future gym versions will require that `Env.reset` can be passed `options` to allow the environment initialisation to be passed additional information.\u001b[0m\n", - " logger.warn(\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `reset()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:133: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method should be an int or np.int64, actual type: \u001b[0m\n", - " logger.warn(f\"{pre} should be an int or np.int64, actual type: {type(obs)}\")\n", - "/home/tk/.virtualenvs/dev-python3.8/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:165: UserWarning: \u001b[33mWARN: The obs returned by the `step()` method is not within the observation space.\u001b[0m\n", - " logger.warn(f\"{pre} is not within the observation space.\")\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{2: {'episodic': {'mean': -97.2, 'std': 7.111},\n", - " 'pre_sem': {'mean': -88.8, 'std': 8.01},\n", - " 'random': {'mean': -97.8, 'std': 5.618},\n", - " 'semantic': {'mean': -79.6, 'std': 7.526}},\n", - " 4: {'episodic': {'mean': -84.2, 'std': 7.718},\n", - " 'pre_sem': {'mean': -75.0, 'std': 7.169},\n", - " 'random': {'mean': -79.0, 'std': 6.527},\n", - " 'semantic': {'mean': -61.6, 'std': 8.188}},\n", - " 8: {'episodic': {'mean': -62.0, 'std': 8.944},\n", - " 'pre_sem': {'mean': -47.2, 'std': 8.256},\n", - " 'random': {'mean': -51.4, 'std': 6.873},\n", - " 'semantic': {'mean': -11.4, 'std': 12.233}},\n", - " 16: {'episodic': {'mean': -19.8, 'std': 11.294},\n", - " 'pre_sem': {'mean': -5.2, 'std': 9.558},\n", - " 'random': {'mean': 0.6, 'std': 9.8},\n", - " 'semantic': {'mean': 36.6, 'std': 10.2}},\n", - " 32: {'episodic': {'mean': 50.4, 'std': 8.429},\n", - " 'pre_sem': {'mean': 87.6, 'std': 7.736},\n", - " 'random': {'mean': 35.8, 'std': 14.323},\n", - " 'semantic': {'mean': 54.4, 'std': 5.851}},\n", - " 64: {'episodic': {'mean': 128.0, 'std': 0.0},\n", - " 'pre_sem': {'mean': 107.0, 'std': 5.459},\n", - " 'random': {'mean': 54.0, 'std': 14.886},\n", - " 'semantic': {'mean': 55.2, 'std': 6.21}}}\n" - ] - } - ], - "source": [ - "import logging\n", - "\n", - "logger = logging.getLogger()\n", - "logger.disabled = True\n", - "\n", - "from pprint import pprint\n", - "from room_env.utils import get_handcrafted\n", - "\n", - "\n", - "results = get_handcrafted(\n", - " env=\"RoomEnv-v1\",\n", - " des_size=\"l\",\n", - " seeds=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", - " question_prob=1.0,\n", - " policies={\n", - " \"memory_management\": \"rl\",\n", - " \"question_answer\": \"episodic_semantic\",\n", - " \"encoding\": \"argmax\",\n", - " },\n", - " capacities=[2, 4, 8, 16, 32, 64],\n", - " allow_random_human=False,\n", - " allow_random_question=False,\n", - " varying_rewards=False,\n", - " check_resources=True,\n", - ")\n", - "pprint(results)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logger = logging.getLogger()\n", - "logger.disabled = True\n", - "\n", - "\n", - "import gym\n", - "import room_env\n", - "\n", - "for capacity in [2, 4, 8, 16, 32, 64]:\n", - " for question_prob in [0.5, 1.0]:\n", - " for pretrain_semantic in [False, True]:\n", - " env = gym.make(\n", - " \"RoomEnv-v1\",\n", - " capacity={\n", - " \"episodic\": capacity // 2,\n", - " \"semantic\": capacity // 2,\n", - " \"short\": 1,\n", - " },\n", - " question_prob=question_prob,\n", - " pretrain_semantic=pretrain_semantic,\n", - " )\n", - " observation, info = env.reset()\n", - " while True:\n", - " observation, reward, done, truncated, info = env.step(0)\n", - " if done:\n", - " break" - ] - } - ], - "metadata": { - "interpreter": { - "hash": "c7c14ce45c674ffbe7e3a8bc18299264a1035542c780d18c0e8f0c585e044f28" - }, - "kernelspec": { - "display_name": "Python 3.8.12 ('dev-python3.8')", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.15" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/room_env/__init__.py b/room_env/__init__.py deleted file mode 100644 index 438c8cc..0000000 --- a/room_env/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from gymnasium.envs.registration import register - -register( - id="RoomEnv-v0", - entry_point="room_env.envs:RoomEnv0", -) - -register( - id="RoomEnv-v1", - entry_point="room_env.envs:RoomEnv1", -) diff --git a/room_env/data/conceptnet-data.json b/room_env/data/conceptnet-data.json deleted file mode 100644 index 3b211eb..0000000 --- a/room_env/data/conceptnet-data.json +++ /dev/null @@ -1,13459 +0,0 @@ -{ - "person": [ - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/bus_stop", - "@type": "Node", - "label": "a bus stop", - "language": "en", - "term": "/c/en/bus_stop" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a bus stop]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/building", - "@type": "Node", - "label": "a building", - "language": "en", - "term": "/c/en/building" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a person]] in [[a building]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "a garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a garage]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/hospital", - "@type": "Node", - "label": "the hospital", - "language": "en", - "term": "/c/en/hospital" - }, - "weight": 2.0, - "surfaceText": "[[a person]] can be at [[the hospital]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/quandry", - "@type": "Node", - "label": "a quandry", - "language": "en", - "term": "/c/en/quandry" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a quandry]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/demonstration", - "@type": "Node", - "label": "a demonstration", - "language": "en", - "term": "/c/en/demonstration" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a demonstration]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/fairy_tale", - "@type": "Node", - "label": "a fairy tale", - "language": "en", - "term": "/c/en/fairy_tale" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a person]] in [[a fairy tale]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "a desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a desk]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/water_cooler", - "@type": "Node", - "label": "a water cooler", - "language": "en", - "term": "/c/en/water_cooler" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a water cooler]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/universe", - "@type": "Node", - "label": "the universe", - "language": "en", - "term": "/c/en/universe" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a person]] can be is in [[the universe]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/theater", - "@type": "Node", - "label": "the theater", - "language": "en", - "term": "/c/en/theater" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the theater]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/synagogue", - "@type": "Node", - "label": "a synagogue", - "language": "en", - "term": "/c/en/synagogue" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a synagogue]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/family", - "@type": "Node", - "label": "a family", - "language": "en", - "term": "/c/en/family" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a person]] in [[a family]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/street_corner", - "@type": "Node", - "label": "a street corner", - "language": "en", - "term": "/c/en/street_corner" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a street corner]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/opera", - "@type": "Node", - "label": "the opera", - "language": "en", - "term": "/c/en/opera" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the opera]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/show", - "@type": "Node", - "label": "a show", - "language": "en", - "term": "/c/en/show" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a show]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/phine_directory", - "@type": "Node", - "label": "phine directory", - "language": "en", - "term": "/c/en/phine_directory" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a person]] in [[phine directory]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/corner_of_two_streets", - "@type": "Node", - "label": "the corner of two streets", - "language": "en", - "term": "/c/en/corner_of_two_streets" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the corner of two streets]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/space_shuttle", - "@type": "Node", - "label": "the space shuttle", - "language": "en", - "term": "/c/en/space_shuttle" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the space shuttle]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/zoo", - "@type": "Node", - "label": "a zoo", - "language": "en", - "term": "/c/en/zoo" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a zoo]] is [[a person]]" - }, - { - "start": { - "@id": "/c/en/person", - "@type": "Node", - "label": "a person", - "language": "en", - "term": "/c/en/person" - }, - "end": { - "@id": "/c/en/conference", - "@type": "Node", - "label": "a conference", - "language": "en", - "term": "/c/en/conference" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a conference]] is [[a person]]" - } - ], - "bicycle": [ - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "the garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 7.483314773547882, - "surfaceText": "You are likely to find [[a bicycle]] in [[the garage]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/street", - "@type": "Node", - "label": "the street", - "language": "en", - "term": "/c/en/street" - }, - "weight": 6.6332495807108, - "surfaceText": "*Something you find on [[the street]] is [[a bicycle]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/toy_store", - "@type": "Node", - "label": "a toy store", - "language": "en", - "term": "/c/en/toy_store" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[a toy store]] is [[a bicycle]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/lab", - "@type": "Node", - "label": "the lab", - "language": "en", - "term": "/c/en/lab" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[the lab]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/bicycle_shop", - "@type": "Node", - "label": "bicycle shop", - "language": "en", - "term": "/c/en/bicycle_shop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[bicycle shop]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/schoolyard", - "@type": "Node", - "label": "the schoolyard", - "language": "en", - "term": "/c/en/schoolyard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[the schoolyard]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/shed", - "@type": "Node", - "label": "a shed", - "language": "en", - "term": "/c/en/shed" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[a shed]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/university", - "@type": "Node", - "label": "a university", - "language": "en", - "term": "/c/en/university" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a university]] is [[a bicycle]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/park", - "@type": "Node", - "label": "a park", - "language": "en", - "term": "/c/en/park" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[a park]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/triatholon", - "@type": "Node", - "label": "a triatholon", - "language": "en", - "term": "/c/en/triatholon" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[a triatholon]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/netherlands", - "@type": "Node", - "label": "the netherlands", - "language": "en", - "term": "/c/en/netherlands" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[the netherlands]]" - }, - { - "start": { - "@id": "/c/en/bicycle", - "@type": "Node", - "label": "a bicycle", - "language": "en", - "term": "/c/en/bicycle" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bicycle]] in [[a store]]" - } - ], - "car": [ - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/city", - "@type": "Node", - "label": "the city", - "language": "en", - "term": "/c/en/city" - }, - "weight": 7.483314773547882, - "surfaceText": "You are likely to find [[a car]] in [[the city]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/parking_lot", - "@type": "Node", - "label": "a parking lot", - "language": "en", - "term": "/c/en/parking_lot" - }, - "weight": 6.928203230275509, - "surfaceText": "You are likely to find [[a car]] in [[a parking lot]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/repair_shop", - "@type": "Node", - "label": "the repair shop", - "language": "en", - "term": "/c/en/repair_shop" - }, - "weight": 5.656854249492381, - "surfaceText": "*Something you find at [[the repair shop]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/road", - "@type": "Node", - "label": "the road", - "language": "en", - "term": "/c/en/road" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a car]] in [[the road]]." - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/freeway", - "@type": "Node", - "label": "a freeway", - "language": "en", - "term": "/c/en/freeway" - }, - "weight": 4.0, - "surfaceText": "*Something you find on [[a freeway]] is [[car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/car_show", - "@type": "Node", - "label": "a car show", - "language": "en", - "term": "/c/en/car_show" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find at [[a car show]] is [[car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/race_track", - "@type": "Node", - "label": "a race track", - "language": "en", - "term": "/c/en/race_track" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find at [[a race track]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/car_dealership", - "@type": "Node", - "label": "a car dealership ", - "language": "en", - "term": "/c/en/car_dealership" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a car]] in [[a car dealership ]]." - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "a neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a neighbor's house]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/in_phoenix", - "@type": "Node", - "label": "in phoenix", - "language": "en", - "term": "/c/en/in_phoenix" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[in phoenix]]." - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/scrapyard", - "@type": "Node", - "label": "a scrapyard", - "language": "en", - "term": "/c/en/scrapyard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[a scrapyard]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/parking_garage", - "@type": "Node", - "label": "a parking garage", - "language": "en", - "term": "/c/en/parking_garage" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[a parking garage]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/motel", - "@type": "Node", - "label": "a motel", - "language": "en", - "term": "/c/en/motel" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a motel]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/parade", - "@type": "Node", - "label": "a parade", - "language": "en", - "term": "/c/en/parade" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[a parade]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/scrap_heap", - "@type": "Node", - "label": "a scrap heap", - "language": "en", - "term": "/c/en/scrap_heap" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[a scrap heap]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/highway", - "@type": "Node", - "label": "a highway", - "language": "en", - "term": "/c/en/highway" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[a highway]]." - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/corner_of_two_streets", - "@type": "Node", - "label": "the corner of two streets", - "language": "en", - "term": "/c/en/corner_of_two_streets" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the corner of two streets]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/land", - "@type": "Node", - "label": "land", - "language": "en", - "term": "/c/en/land" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a car]] can be is on [[land]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/driveway", - "@type": "Node", - "label": "a driveway", - "language": "en", - "term": "/c/en/driveway" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a car]] can be is in [[a driveway]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/car_park", - "@type": "Node", - "label": "a car park", - "language": "en", - "term": "/c/en/car_park" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a car]] can be is in [[a car park]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/street_corner", - "@type": "Node", - "label": "a street corner", - "language": "en", - "term": "/c/en/street_corner" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a street corner]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/show", - "@type": "Node", - "label": "a show", - "language": "en", - "term": "/c/en/show" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a show]] is [[a car]]" - }, - { - "start": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "end": { - "@id": "/c/en/packinglot", - "@type": "Node", - "label": "a packinglot", - "language": "en", - "term": "/c/en/packinglot" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a car]] in [[a packinglot]]" - } - ], - "motorcycle": [ - { - "start": { - "@id": "/c/en/motorcycle", - "@type": "Node", - "label": "a motorcycle", - "language": "en", - "term": "/c/en/motorcycle" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "a garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 4.0, - "surfaceText": "*Something you find in [[a garage]] is [[a motorcycle]]" - } - ], - "airplane": [ - { - "start": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "end": { - "@id": "/c/en/sky", - "@type": "Node", - "label": "the sky", - "language": "en", - "term": "/c/en/sky" - }, - "weight": 7.483314773547882, - "surfaceText": "*Something you find in [[the sky]] is [[airplane]]" - }, - { - "start": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "a airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "end": { - "@id": "/c/en/air", - "@type": "Node", - "label": "the air", - "language": "en", - "term": "/c/en/air" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find in [[the air]] is [[a airplane]]" - }, - { - "start": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "an airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "end": { - "@id": "/c/en/hanger", - "@type": "Node", - "label": "a hanger", - "language": "en", - "term": "/c/en/hanger" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[an airplane]] in [[a hanger]]" - }, - { - "start": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "end": { - "@id": "/c/en/military_base", - "@type": "Node", - "label": "a military base", - "language": "en", - "term": "/c/en/military_base" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a military base]] is [[airplane]]" - }, - { - "start": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "an airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "end": { - "@id": "/c/en/hangar", - "@type": "Node", - "label": "a hangar", - "language": "en", - "term": "/c/en/hangar" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an airplane]] in [[a hangar]]" - }, - { - "start": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "an airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "end": { - "@id": "/c/en/airplane_hangar", - "@type": "Node", - "label": "an airplane hangar", - "language": "en", - "term": "/c/en/airplane_hangar" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an airplane]] in [[an airplane hangar]]" - } - ], - "bus": [ - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/bus_stop", - "@type": "Node", - "label": "a bus stop", - "language": "en", - "term": "/c/en/bus_stop" - }, - "weight": 5.291502622129181, - "surfaceText": "*Something you find at [[a bus stop]] is [[a bus]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/bus_station", - "@type": "Node", - "label": "the bus station", - "language": "en", - "term": "/c/en/bus_station" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a bus]] in [[the bus station]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/city", - "@type": "Node", - "label": "the city", - "language": "en", - "term": "/c/en/city" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a bus]] in [[the city]]" - }, - { - "start": { - "@id": "/c/en/bus/n/wn/artifact", - "@type": "Node", - "label": "bus", - "language": "en", - "sense_label": "n, artifact", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/road/n/wn/artifact", - "@type": "Node", - "label": "road", - "language": "en", - "sense_label": "n, artifact", - "term": "/c/en/road" - }, - "weight": 2.0, - "surfaceText": "[[bus]] is located in [[road]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/new_york", - "@type": "Node", - "label": "New York", - "language": "en", - "term": "/c/en/new_york" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[New York]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/street", - "@type": "Node", - "label": "the street", - "language": "en", - "term": "/c/en/street" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[the street]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/school", - "@type": "Node", - "label": "a school", - "language": "en", - "term": "/c/en/school" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a school]] is [[a bus]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "a garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[a garage]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/michigan", - "@type": "Node", - "label": "Michigan", - "language": "en", - "term": "/c/en/michigan" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[Michigan]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/big_cities", - "@type": "Node", - "label": "big cities", - "language": "en", - "term": "/c/en/big_cities" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[big cities]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/use", - "@type": "Node", - "label": "use", - "language": "en", - "term": "/c/en/use" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[use]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/computer", - "@type": "Node", - "label": "computer", - "language": "en", - "term": "/c/en/computer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[computer]]" - }, - { - "start": { - "@id": "/c/en/bus", - "@type": "Node", - "label": "a bus", - "language": "en", - "term": "/c/en/bus" - }, - "end": { - "@id": "/c/en/seats", - "@type": "Node", - "label": "seats", - "language": "en", - "term": "/c/en/seats" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bus]] in [[seats]]" - } - ], - "train": [ - { - "start": { - "@id": "/c/en/train", - "@type": "Node", - "label": "a train", - "language": "en", - "term": "/c/en/train" - }, - "end": { - "@id": "/c/en/zoo", - "@type": "Node", - "label": "a zoo", - "language": "en", - "term": "/c/en/zoo" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a zoo]] is [[a train]]" - } - ], - "truck": [ - { - "start": { - "@id": "/c/en/truck", - "@type": "Node", - "label": "a truck", - "language": "en", - "term": "/c/en/truck" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "the garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[the garage]] is [[a truck]]" - }, - { - "start": { - "@id": "/c/en/truck", - "@type": "Node", - "label": "a truck", - "language": "en", - "term": "/c/en/truck" - }, - "end": { - "@id": "/c/en/road", - "@type": "Node", - "label": "the road", - "language": "en", - "term": "/c/en/road" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a truck]] can be is on [[the road]]" - }, - { - "start": { - "@id": "/c/en/truck", - "@type": "Node", - "label": "a truck", - "language": "en", - "term": "/c/en/truck" - }, - "end": { - "@id": "/c/en/freeway", - "@type": "Node", - "label": "a freeway", - "language": "en", - "term": "/c/en/freeway" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a freeway]] is [[a truck]]" - } - ], - "boat": [ - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/water", - "@type": "Node", - "label": "the water", - "language": "en", - "term": "/c/en/water" - }, - "weight": 8.246211251235321, - "surfaceText": "You are likely to find [[a boat]] in [[the water]]" - }, - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/lake", - "@type": "Node", - "label": "a lake", - "language": "en", - "term": "/c/en/lake" - }, - "weight": 4.0, - "surfaceText": "Somewhere [[a boat]] can be is on [[a lake]]" - }, - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/harbor", - "@type": "Node", - "label": "the harbor", - "language": "en", - "term": "/c/en/harbor" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a boat]] in [[the harbor]]" - }, - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/ocean", - "@type": "Node", - "label": "the ocean", - "language": "en", - "term": "/c/en/ocean" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find in [[the ocean]] is [[a boat]]" - }, - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/river", - "@type": "Node", - "label": "a river", - "language": "en", - "term": "/c/en/river" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a boat]] in [[a river]]" - }, - { - "start": { - "@id": "/c/en/boat/n/wn/artifact", - "@type": "Node", - "label": "boat", - "language": "en", - "sense_label": "n, artifact", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/body_of_water/n/wn/river", - "@type": "Node", - "label": "body of water", - "language": "en", - "sense_label": "n, river", - "term": "/c/en/body_of_water" - }, - "weight": 2.0, - "surfaceText": "[[boat]] is located in [[body of water]]" - }, - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/bay", - "@type": "Node", - "label": "a bay", - "language": "en", - "term": "/c/en/bay" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a boat]] in [[a bay]]." - }, - { - "start": { - "@id": "/c/en/boat", - "@type": "Node", - "label": "a boat", - "language": "en", - "term": "/c/en/boat" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "a garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a garage]] is [[a boat]]" - } - ], - "traffic_light": [ - { - "start": { - "@id": "/c/en/traffic_light", - "@type": "Node", - "label": "a traffic light", - "language": "en", - "term": "/c/en/traffic_light" - }, - "end": { - "@id": "/c/en/corner_of_two_streets", - "@type": "Node", - "label": "the corner of two streets", - "language": "en", - "term": "/c/en/corner_of_two_streets" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[the corner of two streets]] is [[a traffic light]]" - }, - { - "start": { - "@id": "/c/en/traffic_light", - "@type": "Node", - "label": "traffic light", - "language": "en", - "term": "/c/en/traffic_light" - }, - "end": { - "@id": "/c/en/street", - "@type": "Node", - "label": "the street", - "language": "en", - "term": "/c/en/street" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the street]] is [[traffic light]]" - } - ], - "fire_hydrant": [ - { - "start": { - "@id": "/c/en/fire_hydrant", - "@type": "Node", - "label": "fire hydrant", - "language": "en", - "term": "/c/en/fire_hydrant" - }, - "end": { - "@id": "/c/en/corner_of_two_streets", - "@type": "Node", - "label": "the corner of two streets", - "language": "en", - "term": "/c/en/corner_of_two_streets" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the corner of two streets]] is [[fire hydrant]]" - }, - { - "start": { - "@id": "/c/en/fire_hydrant", - "@type": "Node", - "label": "a fire hydrant", - "language": "en", - "term": "/c/en/fire_hydrant" - }, - "end": { - "@id": "/c/en/street_corner", - "@type": "Node", - "label": "a street corner", - "language": "en", - "term": "/c/en/street_corner" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a street corner]] is [[a fire hydrant]]" - } - ], - "stop_sign": [ - { - "start": { - "@id": "/c/en/stop_sign", - "@type": "Node", - "label": "a stop sign", - "language": "en", - "term": "/c/en/stop_sign" - }, - "end": { - "@id": "/c/en/corner_of_two_streets", - "@type": "Node", - "label": "the corner of two streets", - "language": "en", - "term": "/c/en/corner_of_two_streets" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find at [[the corner of two streets]] is [[a stop sign]]" - }, - { - "start": { - "@id": "/c/en/stop_sign", - "@type": "Node", - "label": "a stop sign", - "language": "en", - "term": "/c/en/stop_sign" - }, - "end": { - "@id": "/c/en/street_corner", - "@type": "Node", - "label": "a street corner", - "language": "en", - "term": "/c/en/street_corner" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a street corner]] is [[a stop sign]]" - }, - { - "start": { - "@id": "/c/en/stop_sign", - "@type": "Node", - "label": "a stop sign", - "language": "en", - "term": "/c/en/stop_sign" - }, - "end": { - "@id": "/c/en/fork_in_road", - "@type": "Node", - "label": "a fork in the road", - "language": "en", - "term": "/c/en/fork_in_road" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a fork in the road]] is [[a stop sign]]" - }, - { - "start": { - "@id": "/c/en/stop_sign", - "@type": "Node", - "label": "a stop sign", - "language": "en", - "term": "/c/en/stop_sign" - }, - "end": { - "@id": "/c/en/bus_stop", - "@type": "Node", - "label": "a bus stop", - "language": "en", - "term": "/c/en/bus_stop" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a bus stop]] is [[a stop sign]]" - } - ], - "bench": [ - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/bus_stop", - "@type": "Node", - "label": "a bus stop", - "language": "en", - "term": "/c/en/bus_stop" - }, - "weight": 4.0, - "surfaceText": "*Something you find at [[a bus stop]] is [[bench]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/bus_depot", - "@type": "Node", - "label": "a bus depot", - "language": "en", - "term": "/c/en/bus_depot" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find at [[a bus depot]] is [[bench]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "a bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/train_station", - "@type": "Node", - "label": "a train station", - "language": "en", - "term": "/c/en/train_station" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[a train station]] is [[a bench]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "a bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/state_park", - "@type": "Node", - "label": "a state park", - "language": "en", - "term": "/c/en/state_park" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a state park]] is [[a bench]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "a bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/dugout", - "@type": "Node", - "label": "a dugout", - "language": "en", - "term": "/c/en/dugout" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bench]] in [[a dugout]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "a bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/rest_area", - "@type": "Node", - "label": "a rest area", - "language": "en", - "term": "/c/en/rest_area" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a rest area]] is [[a bench]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "a bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/garden", - "@type": "Node", - "label": "the garden", - "language": "en", - "term": "/c/en/garden" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bench]] in [[the garden]]" - }, - { - "start": { - "@id": "/c/en/bench", - "@type": "Node", - "label": "a bench", - "language": "en", - "term": "/c/en/bench" - }, - "end": { - "@id": "/c/en/lawn", - "@type": "Node", - "label": "the lawn", - "language": "en", - "term": "/c/en/lawn" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the lawn]] is [[a bench]]" - } - ], - "bird": [ - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/tree", - "@type": "Node", - "label": "a tree", - "language": "en", - "term": "/c/en/tree" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a bird]] in [[a tree]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/nest", - "@type": "Node", - "label": "a nest", - "language": "en", - "term": "/c/en/nest" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a bird]] in [[a nest]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/sky", - "@type": "Node", - "label": "the sky", - "language": "en", - "term": "/c/en/sky" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a bird]] in [[the sky]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/forest", - "@type": "Node", - "label": "the forest", - "language": "en", - "term": "/c/en/forest" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find in [[the forest]] is [[a bird]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/roof", - "@type": "Node", - "label": "a roof", - "language": "en", - "term": "/c/en/roof" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find on [[a roof]] is [[a bird]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/cage", - "@type": "Node", - "label": "a cage", - "language": "en", - "term": "/c/en/cage" - }, - "weight": 2.82842712474619, - "surfaceText": "Somewhere [[a bird]] can be is in [[a cage]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/air", - "@type": "Node", - "label": "the air", - "language": "en", - "term": "/c/en/air" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a bird]] in [[the air]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/birdbath", - "@type": "Node", - "label": "a birdbath", - "language": "en", - "term": "/c/en/birdbath" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a bird]] in [[a birdbath]]." - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/sea", - "@type": "Node", - "label": "the sea", - "language": "en", - "term": "/c/en/sea" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[the sea]] is [[a bird]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/wild", - "@type": "Node", - "label": "the wild", - "language": "en", - "term": "/c/en/wild" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a bird]] can be is in [[the wild]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/countryside", - "@type": "Node", - "label": "the countryside", - "language": "en", - "term": "/c/en/countryside" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the countryside]] is [[a bird]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/branch_of_tree", - "@type": "Node", - "label": "a branch of a tree", - "language": "en", - "term": "/c/en/branch_of_tree" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a bird]] can be is on [[a branch of a tree]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/windowsill", - "@type": "Node", - "label": "the windowsill", - "language": "en", - "term": "/c/en/windowsill" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the windowsill]] is [[a bird]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/bush", - "@type": "Node", - "label": "a bush", - "language": "en", - "term": "/c/en/bush" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bird]] in [[a bush]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/garden", - "@type": "Node", - "label": "your garden", - "language": "en", - "term": "/c/en/garden" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bird]] in [[your garden]]" - }, - { - "start": { - "@id": "/c/en/bird", - "@type": "Node", - "label": "a bird", - "language": "en", - "term": "/c/en/bird" - }, - "end": { - "@id": "/c/en/lawn", - "@type": "Node", - "label": "the lawn", - "language": "en", - "term": "/c/en/lawn" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the lawn]] is [[a bird]]" - } - ], - "cat": [ - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/lap", - "@type": "Node", - "label": "my lap", - "language": "en", - "term": "/c/en/lap" - }, - "weight": 9.797958971132712, - "surfaceText": "You are likely to find [[a cat]] in [[my lap]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "weight": 9.38083151964686, - "surfaceText": "You are likely to find [[a cat]] in [[a bed]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/windowsill", - "@type": "Node", - "label": "the windowsill", - "language": "en", - "term": "/c/en/windowsill" - }, - "weight": 7.483314773547882, - "surfaceText": "*Something you find on [[the windowsill]] is [[a cat]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/vet", - "@type": "Node", - "label": "a vet", - "language": "en", - "term": "/c/en/vet" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a cat]] in [[a vet]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a cat]] in [[a chair]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find on [[a table]] is [[a cat]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/floor", - "@type": "Node", - "label": "the floor", - "language": "en", - "term": "/c/en/floor" - }, - "weight": 4.0, - "surfaceText": "*Something you find on [[the floor]] is [[a cat]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/way", - "@type": "Node", - "label": "your way", - "language": "en", - "term": "/c/en/way" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a cat]] in [[your way]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/barn", - "@type": "Node", - "label": "the barn", - "language": "en", - "term": "/c/en/barn" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a cat]] in [[the barn]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "your cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/rug", - "@type": "Node", - "label": "the rug", - "language": "en", - "term": "/c/en/rug" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find on [[the rug]] is [[your cat]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/backyard", - "@type": "Node", - "label": "the backyard", - "language": "en", - "term": "/c/en/backyard" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a cat]] in [[the backyard]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/bag", - "@type": "Node", - "label": "bag", - "language": "en", - "term": "/c/en/bag" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a cat]] in [[bag]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/home", - "@type": "Node", - "label": "someone's home", - "language": "en", - "term": "/c/en/home" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a cat]] in [[someone's home]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/roof", - "@type": "Node", - "label": "the roof", - "language": "en", - "term": "/c/en/roof" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[the roof]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/zoo", - "@type": "Node", - "label": "a zoo", - "language": "en", - "term": "/c/en/zoo" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[a zoo]]." - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/back_yard", - "@type": "Node", - "label": "a back yard", - "language": "en", - "term": "/c/en/back_yard" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[a back yard]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/cat_box", - "@type": "Node", - "label": "a cat box", - "language": "en", - "term": "/c/en/cat_box" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[a cat box]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/closet", - "@type": "Node", - "label": "a closet", - "language": "en", - "term": "/c/en/closet" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[a closet]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/alley", - "@type": "Node", - "label": "an alley", - "language": "en", - "term": "/c/en/alley" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[an alley]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cat]] in [[a house]]." - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[an apartment]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/warm_place", - "@type": "Node", - "label": "a warm place", - "language": "en", - "term": "/c/en/warm_place" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[a warm place]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/appartments", - "@type": "Node", - "label": "appartments", - "language": "en", - "term": "/c/en/appartments" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[appartments]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/heat", - "@type": "Node", - "label": "heat", - "language": "en", - "term": "/c/en/heat" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[heat]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/beam_of_sunlight", - "@type": "Node", - "label": "a beam of sunlight", - "language": "en", - "term": "/c/en/beam_of_sunlight" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[a beam of sunlight]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/outside", - "@type": "Node", - "label": "outside", - "language": "en", - "term": "/c/en/outside" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[outside]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/it's_basket", - "@type": "Node", - "label": "it's basket", - "language": "en", - "term": "/c/en/it's_basket" - }, - "weight": 2.0, - "surfaceText": "Somewhere [[a cat]] can be is in [[it's basket]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/sofa", - "@type": "Node", - "label": "the sofa", - "language": "en", - "term": "/c/en/sofa" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[the sofa]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/nature", - "@type": "Node", - "label": "the nature", - "language": "en", - "term": "/c/en/nature" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[the nature]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/alleyway", - "@type": "Node", - "label": "an alleyway", - "language": "en", - "term": "/c/en/alleyway" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[an alleyway]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/cat_litter_tray", - "@type": "Node", - "label": "a cat litter tray", - "language": "en", - "term": "/c/en/cat_litter_tray" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cat]] in [[a cat litter tray]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/cat_lover's_lap", - "@type": "Node", - "label": "a cat-lover's lap", - "language": "en", - "term": "/c/en/cat_lover's_lap" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a cat-lover's lap]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/dogs_mouth", - "@type": "Node", - "label": "my dogs mouth", - "language": "en", - "term": "/c/en/dogs_mouth" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[my dogs mouth]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/residence", - "@type": "Node", - "label": "a residence", - "language": "en", - "term": "/c/en/residence" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a residence]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/animal_shops", - "@type": "Node", - "label": "animal shops", - "language": "en", - "term": "/c/en/animal_shops" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[animal shops]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/petshop", - "@type": "Node", - "label": "a petshop", - "language": "en", - "term": "/c/en/petshop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a petshop]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/cream", - "@type": "Node", - "label": "the cream", - "language": "en", - "term": "/c/en/cream" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[the cream]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/attic", - "@type": "Node", - "label": "the attic", - "language": "en", - "term": "/c/en/attic" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[the attic]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/dmoz", - "@type": "Node", - "label": "DMOZ", - "language": "en", - "term": "/c/en/dmoz" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[DMOZ]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/bedroom", - "@type": "Node", - "label": "the bedroom", - "language": "en", - "term": "/c/en/bedroom" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[the bedroom]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/town", - "@type": "Node", - "label": "a town", - "language": "en", - "term": "/c/en/town" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a town]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/lower_brances_of_tree", - "@type": "Node", - "label": "the lower brances of a tree", - "language": "en", - "term": "/c/en/lower_brances_of_tree" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[the lower brances of a tree]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/hiding", - "@type": "Node", - "label": "hiding", - "language": "en", - "term": "/c/en/hiding" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[hiding]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/chinese_resturant", - "@type": "Node", - "label": "a chinese resturant", - "language": "en", - "term": "/c/en/chinese_resturant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a chinese resturant]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/arms", - "@type": "Node", - "label": "my arms", - "language": "en", - "term": "/c/en/arms" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[my arms]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/houseplant", - "@type": "Node", - "label": "a houseplant", - "language": "en", - "term": "/c/en/houseplant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a houseplant]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/sunbeam", - "@type": "Node", - "label": "a sunbeam", - "language": "en", - "term": "/c/en/sunbeam" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a sunbeam]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/laundry_basket", - "@type": "Node", - "label": "a laundry basket", - "language": "en", - "term": "/c/en/laundry_basket" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a laundry basket]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/ground", - "@type": "Node", - "label": "the ground", - "language": "en", - "term": "/c/en/ground" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[the ground]]" - }, - { - "start": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "end": { - "@id": "/c/en/comfortable_chair", - "@type": "Node", - "label": "a comfortable chair", - "language": "en", - "term": "/c/en/comfortable_chair" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cat]] in [[a comfortable chair]]" - } - ], - "dog": [ - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/kennel", - "@type": "Node", - "label": "a kennel", - "language": "en", - "term": "/c/en/kennel" - }, - "weight": 9.38083151964686, - "surfaceText": "You are likely to find [[a dog]] in [[a kennel]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "the dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "the table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 5.656854249492381, - "surfaceText": "*Something you find under [[the table]] is [[the dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/park", - "@type": "Node", - "label": "a park", - "language": "en", - "term": "/c/en/park" - }, - "weight": 4.898979485566356, - "surfaceText": "You are likely to find [[a dog]] in [[a park]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/doghouse", - "@type": "Node", - "label": "a doghouse", - "language": "en", - "term": "/c/en/doghouse" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a dog]] in [[a doghouse]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/dog_house", - "@type": "Node", - "label": "a dog house", - "language": "en", - "term": "/c/en/dog_house" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a dog]] in [[a dog house]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/porch", - "@type": "Node", - "label": "the porch", - "language": "en", - "term": "/c/en/porch" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find on [[the porch]] is [[dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/backyard", - "@type": "Node", - "label": "the backyard", - "language": "en", - "term": "/c/en/backyard" - }, - "weight": 3.4641016151377544, - "surfaceText": "Somewhere [[a dog]] can be is in [[the backyard]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a dog]] in [[a house]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/rug", - "@type": "Node", - "label": "the rug", - "language": "en", - "term": "/c/en/rug" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find on [[the rug]] is [[a dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/leash", - "@type": "Node", - "label": "a leash", - "language": "en", - "term": "/c/en/leash" - }, - "weight": 2.0, - "surfaceText": "Somewhere [[a dog]] can be is on [[a leash]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "your dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "bed", - "language": "en", - "term": "/c/en/bed" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[bed]] is [[your dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/dogpound", - "@type": "Node", - "label": "a dogpound", - "language": "en", - "term": "/c/en/dogpound" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a dog]] in [[a dogpound]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "the couch", - "language": "en", - "term": "/c/en/couch" - }, - "weight": 2.0, - "surfaceText": "Somewhere [[a dog]] can be is on [[the couch]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/outside", - "@type": "Node", - "label": "outside", - "language": "en", - "term": "/c/en/outside" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[outside]]." - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "their dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "a neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a neighbor's house]] is [[their dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "my dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "a desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 1.0, - "surfaceText": "*Something you find under [[a desk]] is [[my dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/pet_shop", - "@type": "Node", - "label": "a pet shop", - "language": "en", - "term": "/c/en/pet_shop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[a pet shop]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/petshop", - "@type": "Node", - "label": "petshop", - "language": "en", - "term": "/c/en/petshop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[petshop]]." - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/front_door", - "@type": "Node", - "label": "the front door", - "language": "en", - "term": "/c/en/front_door" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the front door]] is [[a dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/dog_owner's_home", - "@type": "Node", - "label": "dog owner's home", - "language": "en", - "term": "/c/en/dog_owner's_home" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[dog owner's home]]." - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/pound", - "@type": "Node", - "label": "a pound", - "language": "en", - "term": "/c/en/pound" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a dog]] can be is in [[a pound]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/ground", - "@type": "Node", - "label": "the ground", - "language": "en", - "term": "/c/en/ground" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the ground]] is [[a dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/farmyard", - "@type": "Node", - "label": "a farmyard", - "language": "en", - "term": "/c/en/farmyard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[a farmyard]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/pet_store", - "@type": "Node", - "label": "a pet store", - "language": "en", - "term": "/c/en/pet_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[a pet store]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/relatives_house", - "@type": "Node", - "label": "a relatives house", - "language": "en", - "term": "/c/en/relatives_house" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a relatives house]] is [[a dog]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/back_yard", - "@type": "Node", - "label": "a back yard", - "language": "en", - "term": "/c/en/back_yard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dog]] in [[a back yard]]" - }, - { - "start": { - "@id": "/c/en/dog", - "@type": "Node", - "label": "a dog", - "language": "en", - "term": "/c/en/dog" - }, - "end": { - "@id": "/c/en/it's_kennel", - "@type": "Node", - "label": "it's kennel", - "language": "en", - "term": "/c/en/it's_kennel" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a dog]] can be is in [[it's kennel]]" - } - ], - "horse": [ - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/race_track", - "@type": "Node", - "label": "a race track", - "language": "en", - "term": "/c/en/race_track" - }, - "weight": 5.656854249492381, - "surfaceText": "You are likely to find [[a horse]] in [[a race track]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/cavalry", - "@type": "Node", - "label": "a cavalry", - "language": "en", - "term": "/c/en/cavalry" - }, - "weight": 5.291502622129181, - "surfaceText": "You are likely to find [[a horse]] in [[a cavalry]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/stall", - "@type": "Node", - "label": "stall", - "language": "en", - "term": "/c/en/stall" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a horse]] in [[stall]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/circus", - "@type": "Node", - "label": "a circus", - "language": "en", - "term": "/c/en/circus" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a horse]] in [[a circus]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/equestrian_competition", - "@type": "Node", - "label": "equestrian competition", - "language": "en", - "term": "/c/en/equestrian_competition" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a horse]] in [[equestrian competition]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/canada", - "@type": "Node", - "label": "Canada", - "language": "en", - "term": "/c/en/canada" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a horse]] in [[Canada]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/country", - "@type": "Node", - "label": "the country", - "language": "en", - "term": "/c/en/country" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a horse]] in [[the country]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/farmyard", - "@type": "Node", - "label": "a farmyard", - "language": "en", - "term": "/c/en/farmyard" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a horse]] in [[a farmyard]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/a", - "@type": "Node", - "label": "a", - "language": "en", - "term": "/c/en/a" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a horse]] in [[a]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/parade", - "@type": "Node", - "label": "a parade", - "language": "en", - "term": "/c/en/parade" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a horse]] in [[a parade]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/kentucky", - "@type": "Node", - "label": "Kentucky", - "language": "en", - "term": "/c/en/kentucky" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a horse]] in [[Kentucky]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/western_movie", - "@type": "Node", - "label": "a western movie", - "language": "en", - "term": "/c/en/western_movie" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a horse]] in [[a western movie]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/movies", - "@type": "Node", - "label": "movies", - "language": "en", - "term": "/c/en/movies" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a horse]] in [[movies]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/trailer", - "@type": "Node", - "label": "a trailer", - "language": "en", - "term": "/c/en/trailer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a trailer]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/horse_box", - "@type": "Node", - "label": "horse box", - "language": "en", - "term": "/c/en/horse_box" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[horse box]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/persons_heart", - "@type": "Node", - "label": "a persons heart", - "language": "en", - "term": "/c/en/persons_heart" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a persons heart]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/stable_or_pasture", - "@type": "Node", - "label": "a stable or pasture", - "language": "en", - "term": "/c/en/stable_or_pasture" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a stable or pasture]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/ocala_florida", - "@type": "Node", - "label": "Ocala, Florida", - "language": "en", - "term": "/c/en/ocala_florida" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[Ocala, Florida]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/cartoon", - "@type": "Node", - "label": "a cartoon", - "language": "en", - "term": "/c/en/cartoon" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a cartoon]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/stabile", - "@type": "Node", - "label": "a stabile", - "language": "en", - "term": "/c/en/stabile" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a stabile]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/grazing_field", - "@type": "Node", - "label": "a grazing field", - "language": "en", - "term": "/c/en/grazing_field" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a grazing field]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/engraving", - "@type": "Node", - "label": "an engraving", - "language": "en", - "term": "/c/en/engraving" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[an engraving]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/historical_photographs", - "@type": "Node", - "label": "historical photographs", - "language": "en", - "term": "/c/en/historical_photographs" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[historical photographs]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/john_wayne_movie", - "@type": "Node", - "label": "a John Wayne movie", - "language": "en", - "term": "/c/en/john_wayne_movie" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a John Wayne movie]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/state_fair", - "@type": "Node", - "label": "a state fair", - "language": "en", - "term": "/c/en/state_fair" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a state fair]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/racetrack", - "@type": "Node", - "label": "a racetrack", - "language": "en", - "term": "/c/en/racetrack" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a racetrack]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/show", - "@type": "Node", - "label": "a show", - "language": "en", - "term": "/c/en/show" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a show]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/horse_racetrack", - "@type": "Node", - "label": "a horse racetrack", - "language": "en", - "term": "/c/en/horse_racetrack" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a horse racetrack]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/field_or_stable_or_mcdonalds", - "@type": "Node", - "label": "a field or stable or mcdonalds", - "language": "en", - "term": "/c/en/field_or_stable_or_mcdonalds" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a field or stable or mcdonalds]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/detroit", - "@type": "Node", - "label": "Detroit", - "language": "en", - "term": "/c/en/detroit" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[Detroit]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/history", - "@type": "Node", - "label": "history", - "language": "en", - "term": "/c/en/history" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[history]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/spain", - "@type": "Node", - "label": "spain", - "language": "en", - "term": "/c/en/spain" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[spain]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/field_romping", - "@type": "Node", - "label": "a field, romping", - "language": "en", - "term": "/c/en/field_romping" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a field, romping]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/outside", - "@type": "Node", - "label": "outside", - "language": "en", - "term": "/c/en/outside" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[outside]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/central_park", - "@type": "Node", - "label": "Central Park", - "language": "en", - "term": "/c/en/central_park" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[Central Park]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/throat", - "@type": "Node", - "label": "a throat", - "language": "en", - "term": "/c/en/throat" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a throat]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/koppel", - "@type": "Node", - "label": "koppel", - "language": "en", - "term": "/c/en/koppel" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[koppel]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/barn_or_racing_track", - "@type": "Node", - "label": "the barn or racing track", - "language": "en", - "term": "/c/en/barn_or_racing_track" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[the barn or racing track]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/gate", - "@type": "Node", - "label": "a gate", - "language": "en", - "term": "/c/en/gate" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a gate]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/kentucky_derby", - "@type": "Node", - "label": "the Kentucky Derby", - "language": "en", - "term": "/c/en/kentucky_derby" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[the Kentucky Derby]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/new_hampshire", - "@type": "Node", - "label": "new hampshire", - "language": "en", - "term": "/c/en/new_hampshire" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[new hampshire]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/fielf", - "@type": "Node", - "label": "a fielf", - "language": "en", - "term": "/c/en/fielf" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a fielf]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/esquestrian_event", - "@type": "Node", - "label": "an esquestrian event", - "language": "en", - "term": "/c/en/esquestrian_event" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[an esquestrian event]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/stall_in_barn", - "@type": "Node", - "label": "a stall in a barn", - "language": "en", - "term": "/c/en/stall_in_barn" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a stall in a barn]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/movie", - "@type": "Node", - "label": "a movie", - "language": "en", - "term": "/c/en/movie" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a movie]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/picture_book_of_horses", - "@type": "Node", - "label": "a picture book of horses", - "language": "en", - "term": "/c/en/picture_book_of_horses" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a picture book of horses]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/horsebox", - "@type": "Node", - "label": "a horsebox", - "language": "en", - "term": "/c/en/horsebox" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a horsebox]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/riding_stable", - "@type": "Node", - "label": "a riding stable", - "language": "en", - "term": "/c/en/riding_stable" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a riding stable]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/loosebox", - "@type": "Node", - "label": "a loosebox", - "language": "en", - "term": "/c/en/loosebox" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[a loosebox]]" - }, - { - "start": { - "@id": "/c/en/horse", - "@type": "Node", - "label": "a horse", - "language": "en", - "term": "/c/en/horse" - }, - "end": { - "@id": "/c/en/american_southwest", - "@type": "Node", - "label": "the American Southwest", - "language": "en", - "term": "/c/en/american_southwest" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a horse]] in [[the American Southwest]]" - } - ], - "sheep": [ - { - "start": { - "@id": "/c/en/sheep", - "@type": "Node", - "label": "sheep", - "language": "en", - "term": "/c/en/sheep" - }, - "end": { - "@id": "/c/en/farm", - "@type": "Node", - "label": "a farm", - "language": "en", - "term": "/c/en/farm" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[a farm]] is [[sheep]]" - }, - { - "start": { - "@id": "/c/en/sheep", - "@type": "Node", - "label": "sheep", - "language": "en", - "term": "/c/en/sheep" - }, - "end": { - "@id": "/c/en/meadow", - "@type": "Node", - "label": "a meadow", - "language": "en", - "term": "/c/en/meadow" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a meadow]] is [[sheep]]" - }, - { - "start": { - "@id": "/c/en/sheep", - "@type": "Node", - "label": "sheep", - "language": "en", - "term": "/c/en/sheep" - }, - "end": { - "@id": "/c/en/fairgrounds", - "@type": "Node", - "label": "fairgrounds", - "language": "en", - "term": "/c/en/fairgrounds" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[fairgrounds]] is [[sheep]]" - }, - { - "start": { - "@id": "/c/en/sheep", - "@type": "Node", - "label": "sheep", - "language": "en", - "term": "/c/en/sheep" - }, - "end": { - "@id": "/c/en/fair", - "@type": "Node", - "label": "a fair", - "language": "en", - "term": "/c/en/fair" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a fair]] is [[sheep]]" - } - ], - "cow": [ - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/countryside", - "@type": "Node", - "label": "the countryside", - "language": "en", - "term": "/c/en/countryside" - }, - "weight": 4.898979485566356, - "surfaceText": "*Something you find in [[the countryside]] is [[a cow]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/stable", - "@type": "Node", - "label": "stable", - "language": "en", - "term": "/c/en/stable" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a cow]] in [[stable]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/hamburger", - "@type": "Node", - "label": "hamburger", - "language": "en", - "term": "/c/en/hamburger" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cow]] in [[hamburger]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/slaughter_house", - "@type": "Node", - "label": "a slaughter house", - "language": "en", - "term": "/c/en/slaughter_house" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cow]] in [[a slaughter house]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/farmyard", - "@type": "Node", - "label": "a farmyard", - "language": "en", - "term": "/c/en/farmyard" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a farmyard]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/butcher_shop", - "@type": "Node", - "label": "a butcher shop", - "language": "en", - "term": "/c/en/butcher_shop" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a butcher shop]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/county_fair", - "@type": "Node", - "label": "a county fair", - "language": "en", - "term": "/c/en/county_fair" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a county fair]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/barnyard", - "@type": "Node", - "label": "a barnyard", - "language": "en", - "term": "/c/en/barnyard" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a barnyard]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/milking_stall", - "@type": "Node", - "label": "a milking stall", - "language": "en", - "term": "/c/en/milking_stall" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a milking stall]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/canada", - "@type": "Node", - "label": "Canada", - "language": "en", - "term": "/c/en/canada" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[Canada]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/ranch", - "@type": "Node", - "label": "a ranch", - "language": "en", - "term": "/c/en/ranch" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a ranch]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/paddock", - "@type": "Node", - "label": "a paddock", - "language": "en", - "term": "/c/en/paddock" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a paddock]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/milking_barn", - "@type": "Node", - "label": "a milking barn", - "language": "en", - "term": "/c/en/milking_barn" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a milking barn]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/dairy_farm", - "@type": "Node", - "label": "a dairy farm", - "language": "en", - "term": "/c/en/dairy_farm" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cow]] in [[a dairy farm]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/great_outdoors", - "@type": "Node", - "label": "the great outdoors", - "language": "en", - "term": "/c/en/great_outdoors" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[the great outdoors]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/outside_in_pasture", - "@type": "Node", - "label": "outside in a pasture", - "language": "en", - "term": "/c/en/outside_in_pasture" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[outside in a pasture]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/red_barn", - "@type": "Node", - "label": "a red barn", - "language": "en", - "term": "/c/en/red_barn" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a red barn]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/corral", - "@type": "Node", - "label": "a corral", - "language": "en", - "term": "/c/en/corral" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a corral]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/computer_commercial", - "@type": "Node", - "label": "a computer commercial", - "language": "en", - "term": "/c/en/computer_commercial" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a computer commercial]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/herd", - "@type": "Node", - "label": "a herd", - "language": "en", - "term": "/c/en/herd" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a herd]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/middle_of_eating_grass", - "@type": "Node", - "label": "the middle of eating grass", - "language": "en", - "term": "/c/en/middle_of_eating_grass" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[the middle of eating grass]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/pasture_grazing", - "@type": "Node", - "label": "a pasture grazing", - "language": "en", - "term": "/c/en/pasture_grazing" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a pasture grazing]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/bart_simpson's_lines", - "@type": "Node", - "label": "Bart Simpson's lines", - "language": "en", - "term": "/c/en/bart_simpson's_lines" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[Bart Simpson's lines]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/gateway_country", - "@type": "Node", - "label": "Gateway Country", - "language": "en", - "term": "/c/en/gateway_country" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[Gateway Country]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/feed_lot", - "@type": "Node", - "label": "a feed lot", - "language": "en", - "term": "/c/en/feed_lot" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a feed lot]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/movie", - "@type": "Node", - "label": "a movie", - "language": "en", - "term": "/c/en/movie" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a movie]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/livestock_market", - "@type": "Node", - "label": "a livestock market", - "language": "en", - "term": "/c/en/livestock_market" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a livestock market]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/fenced_in_area", - "@type": "Node", - "label": "a fenced in area", - "language": "en", - "term": "/c/en/fenced_in_area" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a fenced in area]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/cow_pasture", - "@type": "Node", - "label": "a cow pasture", - "language": "en", - "term": "/c/en/cow_pasture" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a cow pasture]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/indiana", - "@type": "Node", - "label": "Indiana", - "language": "en", - "term": "/c/en/indiana" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[Indiana]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/grass", - "@type": "Node", - "label": "the grass", - "language": "en", - "term": "/c/en/grass" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[the grass]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/iowa", - "@type": "Node", - "label": "iowa", - "language": "en", - "term": "/c/en/iowa" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[iowa]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/swamp", - "@type": "Node", - "label": "the swamp", - "language": "en", - "term": "/c/en/swamp" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[the swamp]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/fiueld", - "@type": "Node", - "label": "a fiueld", - "language": "en", - "term": "/c/en/fiueld" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a fiueld]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/borden_commercial", - "@type": "Node", - "label": "a borden commercial", - "language": "en", - "term": "/c/en/borden_commercial" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a borden commercial]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/field_on_farm", - "@type": "Node", - "label": "a field on a farm", - "language": "en", - "term": "/c/en/field_on_farm" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a field on a farm]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/green_field", - "@type": "Node", - "label": "a green field", - "language": "en", - "term": "/c/en/green_field" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a green field]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/butcher's_when_dead", - "@type": "Node", - "label": "butcher's when it is dead", - "language": "en", - "term": "/c/en/butcher's_when_dead" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[butcher's when it is dead]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/outdoors", - "@type": "Node", - "label": "the outdoors", - "language": "en", - "term": "/c/en/outdoors" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[the outdoors]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/idaho", - "@type": "Node", - "label": "Idaho", - "language": "en", - "term": "/c/en/idaho" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[Idaho]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/farmer's_pasture", - "@type": "Node", - "label": "a farmer's pasture", - "language": "en", - "term": "/c/en/farmer's_pasture" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a farmer's pasture]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/cowbarn", - "@type": "Node", - "label": "a cowbarn", - "language": "en", - "term": "/c/en/cowbarn" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a cowbarn]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/streets_of_india", - "@type": "Node", - "label": "the streets of India", - "language": "en", - "term": "/c/en/streets_of_india" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[the streets of India]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/meat_grinder", - "@type": "Node", - "label": "a meat grinder", - "language": "en", - "term": "/c/en/meat_grinder" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a meat grinder]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/belly", - "@type": "Node", - "label": "someone's belly", - "language": "en", - "term": "/c/en/belly" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[someone's belly]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/cow_barn", - "@type": "Node", - "label": "a cow barn", - "language": "en", - "term": "/c/en/cow_barn" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a cow barn]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/hamburger_meat", - "@type": "Node", - "label": "hamburger meat", - "language": "en", - "term": "/c/en/hamburger_meat" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[hamburger meat]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/fence", - "@type": "Node", - "label": "a fence", - "language": "en", - "term": "/c/en/fence" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a fence]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/barn_field", - "@type": "Node", - "label": "Barn, field", - "language": "en", - "term": "/c/en/barn_field" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[Barn, field]]" - }, - { - "start": { - "@id": "/c/en/cow", - "@type": "Node", - "label": "a cow", - "language": "en", - "term": "/c/en/cow" - }, - "end": { - "@id": "/c/en/country_field", - "@type": "Node", - "label": "a country field", - "language": "en", - "term": "/c/en/country_field" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cow]] in [[a country field]]" - } - ], - "elephant": [ - { - "start": { - "@id": "/c/en/elephant", - "@type": "Node", - "label": "an elephant", - "language": "en", - "term": "/c/en/elephant" - }, - "end": { - "@id": "/c/en/circus", - "@type": "Node", - "label": "a circus", - "language": "en", - "term": "/c/en/circus" - }, - "weight": 4.898979485566356, - "surfaceText": "Somewhere [[an elephant]] can be is in [[a circus]]" - }, - { - "start": { - "@id": "/c/en/elephant", - "@type": "Node", - "label": "an elephant", - "language": "en", - "term": "/c/en/elephant" - }, - "end": { - "@id": "/c/en/africa", - "@type": "Node", - "label": "Africa", - "language": "en", - "term": "/c/en/africa" - }, - "weight": 3.4641016151377544, - "surfaceText": "Somewhere [[an elephant]] can be is in [[Africa]]" - }, - { - "start": { - "@id": "/c/en/elephant", - "@type": "Node", - "label": "an elephant", - "language": "en", - "term": "/c/en/elephant" - }, - "end": { - "@id": "/c/en/zoo", - "@type": "Node", - "label": "a zoo", - "language": "en", - "term": "/c/en/zoo" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[a zoo]] is [[an elephant]]" - }, - { - "start": { - "@id": "/c/en/elephant", - "@type": "Node", - "label": "an elephant", - "language": "en", - "term": "/c/en/elephant" - }, - "end": { - "@id": "/c/en/india", - "@type": "Node", - "label": "India", - "language": "en", - "term": "/c/en/india" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[an elephant]] can be is in [[India]]" - } - ], - "bear": [ - { - "start": { - "@id": "/c/en/bear", - "@type": "Node", - "label": "a bear", - "language": "en", - "term": "/c/en/bear" - }, - "end": { - "@id": "/c/en/park", - "@type": "Node", - "label": "a park", - "language": "en", - "term": "/c/en/park" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a park]] is [[a bear]]" - }, - { - "start": { - "@id": "/c/en/bear", - "@type": "Node", - "label": "a bear", - "language": "en", - "term": "/c/en/bear" - }, - "end": { - "@id": "/c/en/drawer", - "@type": "Node", - "label": "a drawer", - "language": "en", - "term": "/c/en/drawer" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a drawer]] is [[a bear]]" - }, - { - "start": { - "@id": "/c/en/bear", - "@type": "Node", - "label": "a bear", - "language": "en", - "term": "/c/en/bear" - }, - "end": { - "@id": "/c/en/countryside", - "@type": "Node", - "label": "the countryside", - "language": "en", - "term": "/c/en/countryside" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bear]] in [[the countryside]]." - }, - { - "start": { - "@id": "/c/en/bear", - "@type": "Node", - "label": "a bear", - "language": "en", - "term": "/c/en/bear" - }, - "end": { - "@id": "/c/en/meadow", - "@type": "Node", - "label": "a meadow", - "language": "en", - "term": "/c/en/meadow" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bear]] in [[a meadow]]." - } - ], - "zebra": [ - { - "start": { - "@id": "/c/en/zebra", - "@type": "Node", - "label": "a zebra", - "language": "en", - "term": "/c/en/zebra" - }, - "end": { - "@id": "/c/en/zoo", - "@type": "Node", - "label": "a zoo", - "language": "en", - "term": "/c/en/zoo" - }, - "weight": 4.0, - "surfaceText": "*Something you find at [[a zoo]] is [[a zebra]]" - } - ], - "giraffe": [ - { - "start": { - "@id": "/c/en/giraffe", - "@type": "Node", - "label": "giraffe", - "language": "en", - "term": "/c/en/giraffe" - }, - "end": { - "@id": "/c/en/zoo", - "@type": "Node", - "label": "a zoo", - "language": "en", - "term": "/c/en/zoo" - }, - "weight": 4.0, - "surfaceText": "*Something you find at [[a zoo]] is [[giraffe]]" - }, - { - "start": { - "@id": "/c/en/giraffe", - "@type": "Node", - "label": "a giraffe", - "language": "en", - "term": "/c/en/giraffe" - }, - "end": { - "@id": "/c/en/drawer", - "@type": "Node", - "label": "a drawer", - "language": "en", - "term": "/c/en/drawer" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a drawer]] is [[a giraffe]]" - } - ], - "umbrella": [ - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/closet", - "@type": "Node", - "label": "a closet", - "language": "en", - "term": "/c/en/closet" - }, - "weight": 4.0, - "surfaceText": "*Something you find in [[a closet]] is [[an umbrella]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/car", - "@type": "Node", - "label": "your car", - "language": "en", - "term": "/c/en/car" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[an umbrella]] in [[your car]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/beach", - "@type": "Node", - "label": "beach", - "language": "en", - "term": "/c/en/beach" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[beach]] is [[an umbrella]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/umbrella_stand", - "@type": "Node", - "label": "an umbrella stand", - "language": "en", - "term": "/c/en/umbrella_stand" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[an umbrella stand]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/rainy_place", - "@type": "Node", - "label": "a rainy place", - "language": "en", - "term": "/c/en/rainy_place" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[a rainy place]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/wet_city", - "@type": "Node", - "label": "a wet city", - "language": "en", - "term": "/c/en/wet_city" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[a wet city]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/backseat_of_car", - "@type": "Node", - "label": "the backseat of a car", - "language": "en", - "term": "/c/en/backseat_of_car" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the backseat of a car]] is [[an umbrella]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[a store]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/charlie_chaplin_film", - "@type": "Node", - "label": "a Charlie Chaplin film", - "language": "en", - "term": "/c/en/charlie_chaplin_film" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[a Charlie Chaplin film]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a suitcase]] is [[an umbrella]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/jacket_closet", - "@type": "Node", - "label": "a jacket closet", - "language": "en", - "term": "/c/en/jacket_closet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[a jacket closet]]" - }, - { - "start": { - "@id": "/c/en/umbrella", - "@type": "Node", - "label": "an umbrella", - "language": "en", - "term": "/c/en/umbrella" - }, - "end": { - "@id": "/c/en/seattle", - "@type": "Node", - "label": "Seattle", - "language": "en", - "term": "/c/en/seattle" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an umbrella]] in [[Seattle]]" - } - ], - "handbag": [ - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a handbag]] in [[a store]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/shop", - "@type": "Node", - "label": "a shop", - "language": "en", - "term": "/c/en/shop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[a shop]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/womens_department", - "@type": "Node", - "label": "the womens department", - "language": "en", - "term": "/c/en/womens_department" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[the womens department]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/wal_mart", - "@type": "Node", - "label": "Wal-Mart", - "language": "en", - "term": "/c/en/wal_mart" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[Wal-Mart]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/woman's_closet", - "@type": "Node", - "label": "a woman's closet", - "language": "en", - "term": "/c/en/woman's_closet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[a woman's closet]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/woman's_hand", - "@type": "Node", - "label": "a woman's hand", - "language": "en", - "term": "/c/en/woman's_hand" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[a woman's hand]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/wardrobe", - "@type": "Node", - "label": "a wardrobe", - "language": "en", - "term": "/c/en/wardrobe" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[a wardrobe]]" - }, - { - "start": { - "@id": "/c/en/handbag", - "@type": "Node", - "label": "a handbag", - "language": "en", - "term": "/c/en/handbag" - }, - "end": { - "@id": "/c/en/department_store", - "@type": "Node", - "label": "a department store", - "language": "en", - "term": "/c/en/department_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a handbag]] in [[a department store]]" - } - ], - "suitcase": [ - { - "start": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "end": { - "@id": "/c/en/movie", - "@type": "Node", - "label": "a movie", - "language": "en", - "term": "/c/en/movie" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a suitcase]] in [[a movie]]" - }, - { - "start": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "end": { - "@id": "/c/en/cargo_hold", - "@type": "Node", - "label": "a cargo hold", - "language": "en", - "term": "/c/en/cargo_hold" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a suitcase]] in [[a cargo hold]]" - }, - { - "start": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "end": { - "@id": "/c/en/airplane", - "@type": "Node", - "label": "an airplane", - "language": "en", - "term": "/c/en/airplane" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a suitcase]] in [[an airplane]]" - }, - { - "start": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "end": { - "@id": "/c/en/baggage_compartment", - "@type": "Node", - "label": "a baggage compartment", - "language": "en", - "term": "/c/en/baggage_compartment" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a suitcase]] in [[a baggage compartment]]" - }, - { - "start": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "end": { - "@id": "/c/en/luggage_store", - "@type": "Node", - "label": "a luggage store", - "language": "en", - "term": "/c/en/luggage_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a suitcase]] in [[a luggage store]]" - }, - { - "start": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "end": { - "@id": "/c/en/taxi", - "@type": "Node", - "label": "a taxi", - "language": "en", - "term": "/c/en/taxi" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a suitcase]] in [[a taxi]]" - } - ], - "frisbee": [ - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "a frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/park", - "@type": "Node", - "label": "a park", - "language": "en", - "term": "/c/en/park" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find in [[a park]] is [[a frisbee]]" - }, - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "a frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/roof", - "@type": "Node", - "label": "a roof", - "language": "en", - "term": "/c/en/roof" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a roof]] is [[a frisbee]]" - }, - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "a frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/air", - "@type": "Node", - "label": "the air", - "language": "en", - "term": "/c/en/air" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a frisbee]] in [[the air]]" - }, - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "a frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/toy_chest", - "@type": "Node", - "label": "the toy chest", - "language": "en", - "term": "/c/en/toy_chest" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a frisbee]] in [[the toy chest]]" - }, - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "a frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/tree", - "@type": "Node", - "label": "the tree", - "language": "en", - "term": "/c/en/tree" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a frisbee]] in [[the tree]]" - }, - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/frisbee_golf_course", - "@type": "Node", - "label": "a frisbee golf course", - "language": "en", - "term": "/c/en/frisbee_golf_course" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[frisbee]] in [[a frisbee golf course]]." - }, - { - "start": { - "@id": "/c/en/frisbee", - "@type": "Node", - "label": "a frisbee", - "language": "en", - "term": "/c/en/frisbee" - }, - "end": { - "@id": "/c/en/deadhead's_van", - "@type": "Node", - "label": "a Deadhead's van", - "language": "en", - "term": "/c/en/deadhead's_van" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a frisbee]] in [[a Deadhead's van]]" - } - ], - "skis": [ - { - "start": { - "@id": "/c/en/skis", - "@type": "Node", - "label": "skis", - "language": "en", - "term": "/c/en/skis" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "the garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the garage]] is [[skis]]" - } - ], - "sports_ball": [ - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/school", - "@type": "Node", - "label": "a school", - "language": "en", - "term": "/c/en/school" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a school]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/sport", - "@type": "Node", - "label": "a sport", - "language": "en", - "term": "/c/en/sport" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a sport]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/gymnasium", - "@type": "Node", - "label": "a gymnasium", - "language": "en", - "term": "/c/en/gymnasium" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a gymnasium]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/sports_arena", - "@type": "Node", - "label": "a sports arena", - "language": "en", - "term": "/c/en/sports_arena" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a sports arena]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/sports_shop", - "@type": "Node", - "label": "a sports shop", - "language": "en", - "term": "/c/en/sports_shop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a sports shop]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/baseball_game", - "@type": "Node", - "label": "a baseball game", - "language": "en", - "term": "/c/en/baseball_game" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a baseball game]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/sports_store", - "@type": "Node", - "label": "a sports store", - "language": "en", - "term": "/c/en/sports_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a sports store]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/sporting_event", - "@type": "Node", - "label": "a sporting event", - "language": "en", - "term": "/c/en/sporting_event" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a sporting event]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/department_store", - "@type": "Node", - "label": "a department store", - "language": "en", - "term": "/c/en/department_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a department store]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/sporting_good_store", - "@type": "Node", - "label": "a sporting good store", - "language": "en", - "term": "/c/en/sporting_good_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a sporting good store]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/gym", - "@type": "Node", - "label": "a gym", - "language": "en", - "term": "/c/en/gym" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a gym]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/gym_locker", - "@type": "Node", - "label": "a gym locker", - "language": "en", - "term": "/c/en/gym_locker" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[a gym locker]]" - }, - { - "start": { - "@id": "/c/en/sports_ball", - "@type": "Node", - "label": "a sports ball", - "language": "en", - "term": "/c/en/sports_ball" - }, - "end": { - "@id": "/c/en/michaels_hand", - "@type": "Node", - "label": "michaels hand", - "language": "en", - "term": "/c/en/michaels_hand" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sports ball]] in [[michaels hand]]" - } - ], - "kite": [ - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/air", - "@type": "Node", - "label": "the air", - "language": "en", - "term": "/c/en/air" - }, - "weight": 4.0, - "surfaceText": "*Something you find in [[the air]] is [[kite]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/toy_store", - "@type": "Node", - "label": "a toy store", - "language": "en", - "term": "/c/en/toy_store" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a kite]] in [[a toy store]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/sky", - "@type": "Node", - "label": "the sky", - "language": "en", - "term": "/c/en/sky" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a kite]] in [[the sky]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/park", - "@type": "Node", - "label": "a park", - "language": "en", - "term": "/c/en/park" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a kite]] in [[a park]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/store_at_beach", - "@type": "Node", - "label": "a store at the beach", - "language": "en", - "term": "/c/en/store_at_beach" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a kite]] in [[a store at the beach]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/child's_hand", - "@type": "Node", - "label": "a child's hand", - "language": "en", - "term": "/c/en/child's_hand" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a kite]] in [[a child's hand]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/hobby_shop", - "@type": "Node", - "label": "a hobby shop", - "language": "en", - "term": "/c/en/hobby_shop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a kite]] in [[a hobby shop]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/downstairs_closet", - "@type": "Node", - "label": "the downstairs closet", - "language": "en", - "term": "/c/en/downstairs_closet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a kite]] in [[the downstairs closet]]" - }, - { - "start": { - "@id": "/c/en/kite", - "@type": "Node", - "label": "a kite", - "language": "en", - "term": "/c/en/kite" - }, - "end": { - "@id": "/c/en/end_of_line", - "@type": "Node", - "label": "the end of a line", - "language": "en", - "term": "/c/en/end_of_line" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the end of a line]] is [[a kite]]" - } - ], - "bottle": [ - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/nursery", - "@type": "Node", - "label": "a nursery", - "language": "en", - "term": "/c/en/nursery" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a nursery]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/grocery_store", - "@type": "Node", - "label": "a grocery store", - "language": "en", - "term": "/c/en/grocery_store" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a grocery store]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/drink", - "@type": "Node", - "label": "something to drink", - "language": "en", - "term": "/c/en/drink" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[something to drink]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/refigerator", - "@type": "Node", - "label": "a refigerator", - "language": "en", - "term": "/c/en/refigerator" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a refigerator]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/medicine_cabinet", - "@type": "Node", - "label": "a medicine cabinet", - "language": "en", - "term": "/c/en/medicine_cabinet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a medicine cabinet]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/liquor_store", - "@type": "Node", - "label": "a liquor store", - "language": "en", - "term": "/c/en/liquor_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a liquor store]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/diaper_bag", - "@type": "Node", - "label": "a diaper bag", - "language": "en", - "term": "/c/en/diaper_bag" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a diaper bag]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a store]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/fridge", - "@type": "Node", - "label": "the fridge", - "language": "en", - "term": "/c/en/fridge" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[the fridge]]" - }, - { - "start": { - "@id": "/c/en/bottle", - "@type": "Node", - "label": "a bottle", - "language": "en", - "term": "/c/en/bottle" - }, - "end": { - "@id": "/c/en/supermarket", - "@type": "Node", - "label": "a supermarket", - "language": "en", - "term": "/c/en/supermarket" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bottle]] in [[a supermarket]]" - } - ], - "wine_glass": [ - { - "start": { - "@id": "/c/en/wine_glass", - "@type": "Node", - "label": "a wine glass", - "language": "en", - "term": "/c/en/wine_glass" - }, - "end": { - "@id": "/c/en/cupboard", - "@type": "Node", - "label": "a cupboard", - "language": "en", - "term": "/c/en/cupboard" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a wine glass]] can be is in [[a cupboard]]" - } - ], - "cup": [ - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 4.0, - "surfaceText": "*Something you find on [[a table]] is [[cup]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/dishwasher", - "@type": "Node", - "label": "a dishwasher", - "language": "en", - "term": "/c/en/dishwasher" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a cup]] in [[a dishwasher]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "a shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 2.82842712474619, - "surfaceText": "Somewhere [[a cup]] can be is on [[a shelf]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "the kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a cup]] in [[the kitchen]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/closet", - "@type": "Node", - "label": "the closet", - "language": "en", - "term": "/c/en/closet" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[the closet]] is [[cup]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/sand_box", - "@type": "Node", - "label": "a sand box", - "language": "en", - "term": "/c/en/sand_box" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[a sand box]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[an apartment]]." - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/drink", - "@type": "Node", - "label": "drink", - "language": "en", - "term": "/c/en/drink" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[drink]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/kitchen_cabinet", - "@type": "Node", - "label": "a kitchen cabinet", - "language": "en", - "term": "/c/en/kitchen_cabinet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[a kitchen cabinet]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/cafe", - "@type": "Node", - "label": "a cafe'", - "language": "en", - "term": "/c/en/cafe" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[a cafe']]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/counter", - "@type": "Node", - "label": "the counter", - "language": "en", - "term": "/c/en/counter" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a cup]] can be is on [[the counter]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/restaurant", - "@type": "Node", - "label": "a restaurant", - "language": "en", - "term": "/c/en/restaurant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[a restaurant]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/water_fountain", - "@type": "Node", - "label": "a water fountain", - "language": "en", - "term": "/c/en/water_fountain" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a water fountain]] is [[a cup]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "the sink", - "language": "en", - "term": "/c/en/sink" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[the sink]]" - }, - { - "start": { - "@id": "/c/en/cup", - "@type": "Node", - "label": "a cup", - "language": "en", - "term": "/c/en/cup" - }, - "end": { - "@id": "/c/en/washing_up_bowl", - "@type": "Node", - "label": "a washing-up bowl", - "language": "en", - "term": "/c/en/washing_up_bowl" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cup]] in [[a washing-up bowl]]" - } - ], - "fork": [ - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "the kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 5.291502622129181, - "surfaceText": "*Something you find in [[the kitchen]] is [[a fork]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 4.898979485566356, - "surfaceText": "*Something you find on [[a table]] is [[a fork]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/drawer", - "@type": "Node", - "label": "drawer", - "language": "en", - "term": "/c/en/drawer" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a fork]] in [[drawer]]." - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/plate", - "@type": "Node", - "label": "a plate", - "language": "en", - "term": "/c/en/plate" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find on [[a plate]] is [[a fork]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/road", - "@type": "Node", - "label": "the road", - "language": "en", - "term": "/c/en/road" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a fork]] in [[the road]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/kitchen_drawer", - "@type": "Node", - "label": "a kitchen drawer", - "language": "en", - "term": "/c/en/kitchen_drawer" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a fork]] in [[a kitchen drawer]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/plane", - "@type": "Node", - "label": "a plane", - "language": "en", - "term": "/c/en/plane" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a plane]] is [[fork]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/housewares_store", - "@type": "Node", - "label": "a housewares store", - "language": "en", - "term": "/c/en/housewares_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[a housewares store]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/napkin", - "@type": "Node", - "label": "a napkin", - "language": "en", - "term": "/c/en/napkin" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[a napkin]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/untensil_drawer", - "@type": "Node", - "label": "a untensil drawer", - "language": "en", - "term": "/c/en/untensil_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[a untensil drawer]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/silverware_drawer", - "@type": "Node", - "label": "a silverware drawer", - "language": "en", - "term": "/c/en/silverware_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[a silverware drawer]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/resturant", - "@type": "Node", - "label": "a resturant", - "language": "en", - "term": "/c/en/resturant" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a resturant]] is [[a fork]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/cutlery_drawer", - "@type": "Node", - "label": "a cutlery drawer", - "language": "en", - "term": "/c/en/cutlery_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[a cutlery drawer]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/a", - "@type": "Node", - "label": "a", - "language": "en", - "term": "/c/en/a" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[a]]" - }, - { - "start": { - "@id": "/c/en/fork", - "@type": "Node", - "label": "a fork", - "language": "en", - "term": "/c/en/fork" - }, - "end": { - "@id": "/c/en/back", - "@type": "Node", - "label": "my back", - "language": "en", - "term": "/c/en/back" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a fork]] in [[my back]]" - } - ], - "knife": [ - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "the kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 6.928203230275509, - "surfaceText": "*Something you find in [[the kitchen]] is [[a knife]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/drawer", - "@type": "Node", - "label": "a drawer", - "language": "en", - "term": "/c/en/drawer" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find in [[a drawer]] is [[a knife]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/pocket", - "@type": "Node", - "label": "a pocket", - "language": "en", - "term": "/c/en/pocket" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find in [[a pocket]] is [[knife]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/kitchen_drawer", - "@type": "Node", - "label": "the kitchen drawer", - "language": "en", - "term": "/c/en/kitchen_drawer" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a knife]] in [[the kitchen drawer]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/backpack", - "@type": "Node", - "label": "a backpack", - "language": "en", - "term": "/c/en/backpack" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a backpack]] is [[a knife]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/back", - "@type": "Node", - "label": "your back", - "language": "en", - "term": "/c/en/back" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[your back]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/stabbing_victim", - "@type": "Node", - "label": "a stabbing victim", - "language": "en", - "term": "/c/en/stabbing_victim" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a stabbing victim]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/silverware_drawer", - "@type": "Node", - "label": "a silverware drawer", - "language": "en", - "term": "/c/en/silverware_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a silverware drawer]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/ex_husbands_back", - "@type": "Node", - "label": "your ex husbands back", - "language": "en", - "term": "/c/en/ex_husbands_back" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[your ex husbands back]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/fishing_boat", - "@type": "Node", - "label": "a fishing boat", - "language": "en", - "term": "/c/en/fishing_boat" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a fishing boat]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/sheath", - "@type": "Node", - "label": "a sheath", - "language": "en", - "term": "/c/en/sheath" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a sheath]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/plate", - "@type": "Node", - "label": "a plate", - "language": "en", - "term": "/c/en/plate" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a plate]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/war", - "@type": "Node", - "label": "a war", - "language": "en", - "term": "/c/en/war" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a war]]." - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "the table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the table]] is [[a knife]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/knife_holder", - "@type": "Node", - "label": "a knife-holder", - "language": "en", - "term": "/c/en/knife_holder" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a knife-holder]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/drawer_in_kitchen", - "@type": "Node", - "label": "a drawer in a kitchen", - "language": "en", - "term": "/c/en/drawer_in_kitchen" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a drawer in a kitchen]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/knife_store", - "@type": "Node", - "label": "a knife store", - "language": "en", - "term": "/c/en/knife_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a knife store]]" - }, - { - "start": { - "@id": "/c/en/knife", - "@type": "Node", - "label": "a knife", - "language": "en", - "term": "/c/en/knife" - }, - "end": { - "@id": "/c/en/knife_block", - "@type": "Node", - "label": "a knife block", - "language": "en", - "term": "/c/en/knife_block" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a knife]] in [[a knife block]]" - } - ], - "spoon": [ - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a spoon]] in [[bowl]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/dinner", - "@type": "Node", - "label": "dinner", - "language": "en", - "term": "/c/en/dinner" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[dinner]] is [[a spoon]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a table]] is [[a spoon]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/table_setting", - "@type": "Node", - "label": "a table setting", - "language": "en", - "term": "/c/en/table_setting" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[spoon]] in [[a table setting]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/bowl_of_soup", - "@type": "Node", - "label": "a bowl of soup", - "language": "en", - "term": "/c/en/bowl_of_soup" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a bowl of soup]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/childs_sand_box", - "@type": "Node", - "label": "a childs sand box", - "language": "en", - "term": "/c/en/childs_sand_box" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a childs sand box]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/soup", - "@type": "Node", - "label": "soup", - "language": "en", - "term": "/c/en/soup" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[soup]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/fork_in_road", - "@type": "Node", - "label": "a fork in the road", - "language": "en", - "term": "/c/en/fork_in_road" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a fork in the road]] is [[a spoon]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/serving_dish", - "@type": "Node", - "label": "a serving dish", - "language": "en", - "term": "/c/en/serving_dish" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a serving dish]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/glass_of_iced_tea", - "@type": "Node", - "label": "a glass of iced tea", - "language": "en", - "term": "/c/en/glass_of_iced_tea" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a glass of iced tea]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/resturant", - "@type": "Node", - "label": "a resturant", - "language": "en", - "term": "/c/en/resturant" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a resturant]] is [[a spoon]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/kitchen_drawer", - "@type": "Node", - "label": "a kitchen drawer", - "language": "en", - "term": "/c/en/kitchen_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a kitchen drawer]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/silverware_drawer", - "@type": "Node", - "label": "the silverware drawer", - "language": "en", - "term": "/c/en/silverware_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[the silverware drawer]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/hand", - "@type": "Node", - "label": "a hand", - "language": "en", - "term": "/c/en/hand" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a hand]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/cutlery_draw", - "@type": "Node", - "label": "a cutlery draw", - "language": "en", - "term": "/c/en/cutlery_draw" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a cutlery draw]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "bed", - "language": "en", - "term": "/c/en/bed" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[bed]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/dishwasher", - "@type": "Node", - "label": "a dishwasher", - "language": "en", - "term": "/c/en/dishwasher" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[a dishwasher]]" - }, - { - "start": { - "@id": "/c/en/spoon", - "@type": "Node", - "label": "a spoon", - "language": "en", - "term": "/c/en/spoon" - }, - "end": { - "@id": "/c/en/cutlery_drawer", - "@type": "Node", - "label": "the cutlery drawer", - "language": "en", - "term": "/c/en/cutlery_drawer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a spoon]] in [[the cutlery drawer]]" - } - ], - "bowl": [ - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/cupboard", - "@type": "Node", - "label": "the cupboard", - "language": "en", - "term": "/c/en/cupboard" - }, - "weight": 7.211102550927979, - "surfaceText": "*Something you find in [[the cupboard]] is [[a bowl]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/cabinet", - "@type": "Node", - "label": "a cabinet", - "language": "en", - "term": "/c/en/cabinet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bowl]] in [[a cabinet]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a bowl]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a table]] is [[a bowl]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/restaurant", - "@type": "Node", - "label": "a restaurant", - "language": "en", - "term": "/c/en/restaurant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bowl]] in [[a restaurant]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "the sink", - "language": "en", - "term": "/c/en/sink" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a bowl]] can be is in [[the sink]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "a refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bowl]] in [[a refrigerator]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/cubboard", - "@type": "Node", - "label": "the cubboard", - "language": "en", - "term": "/c/en/cubboard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bowl]] in [[the cubboard]]" - }, - { - "start": { - "@id": "/c/en/bowl", - "@type": "Node", - "label": "a bowl", - "language": "en", - "term": "/c/en/bowl" - }, - "end": { - "@id": "/c/en/dishwasher", - "@type": "Node", - "label": "a dishwasher", - "language": "en", - "term": "/c/en/dishwasher" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bowl]] in [[a dishwasher]]" - } - ], - "banana": [ - { - "start": { - "@id": "/c/en/banana", - "@type": "Node", - "label": "a banana", - "language": "en", - "term": "/c/en/banana" - }, - "end": { - "@id": "/c/en/monkey's_hand", - "@type": "Node", - "label": "a monkey's hand", - "language": "en", - "term": "/c/en/monkey's_hand" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a banana]] in [[a monkey's hand]]" - }, - { - "start": { - "@id": "/c/en/banana", - "@type": "Node", - "label": "a banana", - "language": "en", - "term": "/c/en/banana" - }, - "end": { - "@id": "/c/en/pantry", - "@type": "Node", - "label": "a pantry", - "language": "en", - "term": "/c/en/pantry" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a pantry]] is [[a banana]]" - }, - { - "start": { - "@id": "/c/en/banana", - "@type": "Node", - "label": "a banana", - "language": "en", - "term": "/c/en/banana" - }, - "end": { - "@id": "/c/en/stomach", - "@type": "Node", - "label": "your stomach", - "language": "en", - "term": "/c/en/stomach" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a banana]] can be is in [[your stomach]]" - } - ], - "apple": [ - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/apple_tree", - "@type": "Node", - "label": "apple tree", - "language": "en", - "term": "/c/en/apple_tree" - }, - "weight": 5.656854249492381, - "surfaceText": "You are likely to find [[an apple]] in [[apple tree]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/grocery_store", - "@type": "Node", - "label": "a grocery store", - "language": "en", - "term": "/c/en/grocery_store" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[an apple]] in [[a grocery store]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "the refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[the refrigerator]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/produce_section_of_supermarket", - "@type": "Node", - "label": "the produce section of the supermarket", - "language": "en", - "term": "/c/en/produce_section_of_supermarket" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[the produce section of the supermarket]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[a house]]." - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/apple_orchard", - "@type": "Node", - "label": "an apple orchard", - "language": "en", - "term": "/c/en/apple_orchard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[an apple orchard]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/horses_mouth", - "@type": "Node", - "label": "a horses mouth", - "language": "en", - "term": "/c/en/horses_mouth" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[a horses mouth]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/toffee_apple", - "@type": "Node", - "label": "a toffee apple", - "language": "en", - "term": "/c/en/toffee_apple" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[a toffee apple]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/greengrocer", - "@type": "Node", - "label": "a greengrocer", - "language": "en", - "term": "/c/en/greengrocer" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[an apple]] can be is in [[a greengrocer]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/orchard", - "@type": "Node", - "label": "an orchard", - "language": "en", - "term": "/c/en/orchard" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[an orchard]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/fridge", - "@type": "Node", - "label": "the fridge", - "language": "en", - "term": "/c/en/fridge" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[an apple]] can be is in [[the fridge]]" - }, - { - "start": { - "@id": "/c/en/apple", - "@type": "Node", - "label": "an apple", - "language": "en", - "term": "/c/en/apple" - }, - "end": { - "@id": "/c/en/apple_pie", - "@type": "Node", - "label": "apple pie", - "language": "en", - "term": "/c/en/apple_pie" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an apple]] in [[apple pie]]" - } - ], - "sandwich": [ - { - "start": { - "@id": "/c/en/sandwich", - "@type": "Node", - "label": "a sandwich", - "language": "en", - "term": "/c/en/sandwich" - }, - "end": { - "@id": "/c/en/lunchbox", - "@type": "Node", - "label": "a lunchbox", - "language": "en", - "term": "/c/en/lunchbox" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a sandwich]] in [[a lunchbox]]" - }, - { - "start": { - "@id": "/c/en/sandwich", - "@type": "Node", - "label": "a sandwich", - "language": "en", - "term": "/c/en/sandwich" - }, - "end": { - "@id": "/c/en/plate", - "@type": "Node", - "label": "a plate", - "language": "en", - "term": "/c/en/plate" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a plate]] is [[a sandwich]]" - }, - { - "start": { - "@id": "/c/en/sandwich", - "@type": "Node", - "label": "a sandwich", - "language": "en", - "term": "/c/en/sandwich" - }, - "end": { - "@id": "/c/en/fridge", - "@type": "Node", - "label": "the fridge", - "language": "en", - "term": "/c/en/fridge" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a sandwich]] can be is in [[the fridge]]" - } - ], - "broccoli": [ - { - "start": { - "@id": "/c/en/broccoli", - "@type": "Node", - "label": "broccoli", - "language": "en", - "term": "/c/en/broccoli" - }, - "end": { - "@id": "/c/en/farmer's_market", - "@type": "Node", - "label": "the farmer's market", - "language": "en", - "term": "/c/en/farmer's_market" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the farmer's market]] is [[broccoli]]" - }, - { - "start": { - "@id": "/c/en/broccoli", - "@type": "Node", - "label": "broccoli", - "language": "en", - "term": "/c/en/broccoli" - }, - "end": { - "@id": "/c/en/plate", - "@type": "Node", - "label": "a plate", - "language": "en", - "term": "/c/en/plate" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a plate]] is [[broccoli]]" - }, - { - "start": { - "@id": "/c/en/broccoli/n/wp/company", - "@type": "Node", - "label": "broccoli", - "language": "en", - "sense_label": "n, company", - "term": "/c/en/broccoli" - }, - "end": { - "@id": "/c/en/tokyo", - "@type": "Node", - "label": "tokyo", - "language": "en", - "term": "/c/en/tokyo" - }, - "weight": 0.5, - "surfaceText": null - } - ], - "hot_dog": [ - { - "start": { - "@id": "/c/en/hot_dog", - "@type": "Node", - "label": "hot dog", - "language": "en", - "term": "/c/en/hot_dog" - }, - "end": { - "@id": "/c/en/soccer_game", - "@type": "Node", - "label": "a soccer game", - "language": "en", - "term": "/c/en/soccer_game" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a soccer game]] is [[hot dog]]" - }, - { - "start": { - "@id": "/c/en/hot_dog", - "@type": "Node", - "label": "hot dog", - "language": "en", - "term": "/c/en/hot_dog" - }, - "end": { - "@id": "/c/en/fast_food_restaurant", - "@type": "Node", - "label": "a fast-food restaurant", - "language": "en", - "term": "/c/en/fast_food_restaurant" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a fast-food restaurant]] is [[hot dog]]" - }, - { - "start": { - "@id": "/c/en/hot_dog", - "@type": "Node", - "label": "a hot dog", - "language": "en", - "term": "/c/en/hot_dog" - }, - "end": { - "@id": "/c/en/fair", - "@type": "Node", - "label": "a fair", - "language": "en", - "term": "/c/en/fair" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a fair]] is [[a hot dog]]" - } - ], - "pizza": [ - { - "start": { - "@id": "/c/en/pizza", - "@type": "Node", - "label": "pizza", - "language": "en", - "term": "/c/en/pizza" - }, - "end": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "the oven", - "language": "en", - "term": "/c/en/oven" - }, - "weight": 4.0, - "surfaceText": "*Something you find in [[the oven]] is [[pizza]]" - }, - { - "start": { - "@id": "/c/en/pizza", - "@type": "Node", - "label": "pizza", - "language": "en", - "term": "/c/en/pizza" - }, - "end": { - "@id": "/c/en/plate", - "@type": "Node", - "label": "a plate", - "language": "en", - "term": "/c/en/plate" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[a plate]] is [[pizza]]" - }, - { - "start": { - "@id": "/c/en/pizza", - "@type": "Node", - "label": "pizza", - "language": "en", - "term": "/c/en/pizza" - }, - "end": { - "@id": "/c/en/restaurant", - "@type": "Node", - "label": "restaurant", - "language": "en", - "term": "/c/en/restaurant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[pizza]] in [[restaurant]]." - } - ], - "donut": [ - { - "start": { - "@id": "/c/en/donut", - "@type": "Node", - "label": "a donut", - "language": "en", - "term": "/c/en/donut" - }, - "end": { - "@id": "/c/en/bakery", - "@type": "Node", - "label": "a bakery", - "language": "en", - "term": "/c/en/bakery" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a donut]] in [[a bakery]]" - } - ], - "cake": [ - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "a cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/bakery", - "@type": "Node", - "label": "a bakery", - "language": "en", - "term": "/c/en/bakery" - }, - "weight": 4.898979485566356, - "surfaceText": "You are likely to find [[a cake]] in [[a bakery]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "a cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/party", - "@type": "Node", - "label": "a party", - "language": "en", - "term": "/c/en/party" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a cake]] in [[a party]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "a cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "the oven", - "language": "en", - "term": "/c/en/oven" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find in [[the oven]] is [[a cake]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/quandry", - "@type": "Node", - "label": "a quandry", - "language": "en", - "term": "/c/en/quandry" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a quandry]] is [[cake]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "the refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the refrigerator]] is [[cake]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "a cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/grocery_store", - "@type": "Node", - "label": "a grocery store", - "language": "en", - "term": "/c/en/grocery_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cake]] in [[a grocery store]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/plate", - "@type": "Node", - "label": "a plate", - "language": "en", - "term": "/c/en/plate" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a plate]] is [[cake]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "a cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/birthday_party", - "@type": "Node", - "label": "a birthday party", - "language": "en", - "term": "/c/en/birthday_party" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cake]] in [[a birthday party]]" - }, - { - "start": { - "@id": "/c/en/cake", - "@type": "Node", - "label": "a cake", - "language": "en", - "term": "/c/en/cake" - }, - "end": { - "@id": "/c/en/cake_tin", - "@type": "Node", - "label": "a cake tin", - "language": "en", - "term": "/c/en/cake_tin" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a cake]] in [[a cake tin]]" - } - ], - "chair": [ - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/office", - "@type": "Node", - "label": "the office", - "language": "en", - "term": "/c/en/office" - }, - "weight": 8.48528137423857, - "surfaceText": "*Something you find at [[the office]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "a desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 6.6332495807108, - "surfaceText": "*Something you find at [[a desk]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/cubicle", - "@type": "Node", - "label": "a cubicle", - "language": "en", - "term": "/c/en/cubicle" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a chair]] in [[a cubicle]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/porch", - "@type": "Node", - "label": "the porch", - "language": "en", - "term": "/c/en/porch" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find on [[the porch]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/living_room", - "@type": "Node", - "label": "a living room", - "language": "en", - "term": "/c/en/living_room" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a chair]] in [[a living room]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/room", - "@type": "Node", - "label": "room", - "language": "en", - "term": "/c/en/room" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[chair]] in [[room]]." - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/church", - "@type": "Node", - "label": "church", - "language": "en", - "term": "/c/en/church" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[church]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a chair]] in [[kitchen]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/floor", - "@type": "Node", - "label": "the floor", - "language": "en", - "term": "/c/en/floor" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[the floor]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/furniture_store", - "@type": "Node", - "label": "a furniture store", - "language": "en", - "term": "/c/en/furniture_store" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a chair]] in [[a furniture store]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/lobby", - "@type": "Node", - "label": "a lobby", - "language": "en", - "term": "/c/en/lobby" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[a lobby]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/confession", - "@type": "Node", - "label": "confession", - "language": "en", - "term": "/c/en/confession" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[confession]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/auditorium", - "@type": "Node", - "label": "an auditorium", - "language": "en", - "term": "/c/en/auditorium" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[an auditorium]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/theatre", - "@type": "Node", - "label": "the theatre", - "language": "en", - "term": "/c/en/theatre" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the theatre]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/dentist", - "@type": "Node", - "label": "the dentist", - "language": "en", - "term": "/c/en/dentist" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the dentist]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/corner", - "@type": "Node", - "label": "the corner", - "language": "en", - "term": "/c/en/corner" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the corner]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[neighbor's house]]." - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/motel", - "@type": "Node", - "label": "a motel", - "language": "en", - "term": "/c/en/motel" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a motel]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/airport", - "@type": "Node", - "label": "an airport", - "language": "en", - "term": "/c/en/airport" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[an airport]]." - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/show", - "@type": "Node", - "label": "a show", - "language": "en", - "term": "/c/en/show" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a show]] is [[chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/university", - "@type": "Node", - "label": "a university", - "language": "en", - "term": "/c/en/university" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[a university]]." - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/rest_area", - "@type": "Node", - "label": "a rest area", - "language": "en", - "term": "/c/en/rest_area" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a rest area]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/building", - "@type": "Node", - "label": "a building", - "language": "en", - "term": "/c/en/building" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[a building]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/synagogue", - "@type": "Node", - "label": "a synagogue", - "language": "en", - "term": "/c/en/synagogue" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a synagogue]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/friend's_house", - "@type": "Node", - "label": "a friend's house", - "language": "en", - "term": "/c/en/friend's_house" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a friend's house]] is [[a chair]]" - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/bedroom", - "@type": "Node", - "label": "bedroom", - "language": "en", - "term": "/c/en/bedroom" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a chair]] in [[bedroom]]." - }, - { - "start": { - "@id": "/c/en/chair", - "@type": "Node", - "label": "a chair", - "language": "en", - "term": "/c/en/chair" - }, - "end": { - "@id": "/c/en/school_room", - "@type": "Node", - "label": "a school room", - "language": "en", - "term": "/c/en/school_room" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a chair]] can be is in [[a school room]]" - } - ], - "couch": [ - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "your house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 4.898979485566356, - "surfaceText": "*Something you find at [[your house]] is [[a couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/den", - "@type": "Node", - "label": "a den", - "language": "en", - "term": "/c/en/den" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a couch]] in [[a den]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "a neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a neighbor's house]] is [[a couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/livingroom", - "@type": "Node", - "label": "a livingroom", - "language": "en", - "term": "/c/en/livingroom" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a couch]] in [[a livingroom]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/loft", - "@type": "Node", - "label": "the loft", - "language": "en", - "term": "/c/en/loft" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the loft]] is [[a couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/party", - "@type": "Node", - "label": "a party", - "language": "en", - "term": "/c/en/party" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a party]] is [[a couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/canada", - "@type": "Node", - "label": "canada", - "language": "en", - "term": "/c/en/canada" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a couch]] in [[canada]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/room", - "@type": "Node", - "label": "a room", - "language": "en", - "term": "/c/en/room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a couch]] in [[a room]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/rest_area", - "@type": "Node", - "label": "a rest area", - "language": "en", - "term": "/c/en/rest_area" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a rest area]] is [[couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/waiting_room", - "@type": "Node", - "label": "a waiting room", - "language": "en", - "term": "/c/en/waiting_room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a couch]] in [[a waiting room]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/doctor", - "@type": "Node", - "label": "the doctor", - "language": "en", - "term": "/c/en/doctor" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[the doctor]] is [[a couch]]" - }, - { - "start": { - "@id": "/c/en/couch", - "@type": "Node", - "label": "a couch", - "language": "en", - "term": "/c/en/couch" - }, - "end": { - "@id": "/c/en/cash's_room", - "@type": "Node", - "label": "Cash's room", - "language": "en", - "term": "/c/en/cash's_room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a couch]] in [[Cash's room]]" - } - ], - "potted_plant": [ - { - "start": { - "@id": "/c/en/potted_plant", - "@type": "Node", - "label": "a potted plant", - "language": "en", - "term": "/c/en/potted_plant" - }, - "end": { - "@id": "/c/en/windowsill", - "@type": "Node", - "label": "the windowsill", - "language": "en", - "term": "/c/en/windowsill" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[the windowsill]] is [[a potted plant]]" - }, - { - "start": { - "@id": "/c/en/potted_plant", - "@type": "Node", - "label": "a potted plant", - "language": "en", - "term": "/c/en/potted_plant" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a table]] is [[a potted plant]]" - }, - { - "start": { - "@id": "/c/en/potted_plant", - "@type": "Node", - "label": "a potted plant", - "language": "en", - "term": "/c/en/potted_plant" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "the shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the shelf]] is [[a potted plant]]" - } - ], - "bed": [ - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 4.0, - "surfaceText": "*Something you find in [[a house]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/room", - "@type": "Node", - "label": "a room", - "language": "en", - "term": "/c/en/room" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a bed]] in [[a room]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/hospital", - "@type": "Node", - "label": "a hospital", - "language": "en", - "term": "/c/en/hospital" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[a hospital]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "a neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[a neighbor's house]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/rest_area", - "@type": "Node", - "label": "a rest area", - "language": "en", - "term": "/c/en/rest_area" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find at [[a rest area]] is [[bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/loft", - "@type": "Node", - "label": "the loft", - "language": "en", - "term": "/c/en/loft" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[the loft]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/relatives_house", - "@type": "Node", - "label": "a relatives house", - "language": "en", - "term": "/c/en/relatives_house" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a relatives house]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/basement", - "@type": "Node", - "label": "the basement", - "language": "en", - "term": "/c/en/basement" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the basement]] is [[a bed]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/homewares_department", - "@type": "Node", - "label": "the homewares department", - "language": "en", - "term": "/c/en/homewares_department" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bed]] in [[the homewares department]]" - }, - { - "start": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "a bed", - "language": "en", - "term": "/c/en/bed" - }, - "end": { - "@id": "/c/en/hotel_room", - "@type": "Node", - "label": "a hotel room", - "language": "en", - "term": "/c/en/hotel_room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a bed]] in [[a hotel room]]" - } - ], - "dining_table": [ - { - "start": { - "@id": "/c/en/dining_table", - "@type": "Node", - "label": "a dining table", - "language": "en", - "term": "/c/en/dining_table" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dining table]] in [[a house]]" - }, - { - "start": { - "@id": "/c/en/dining_table", - "@type": "Node", - "label": "a dining table", - "language": "en", - "term": "/c/en/dining_table" - }, - "end": { - "@id": "/c/en/formal_dining_room", - "@type": "Node", - "label": "the formal dining room", - "language": "en", - "term": "/c/en/formal_dining_room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dining table]] in [[the formal dining room]]" - }, - { - "start": { - "@id": "/c/en/dining_table", - "@type": "Node", - "label": "a dining table", - "language": "en", - "term": "/c/en/dining_table" - }, - "end": { - "@id": "/c/en/cafeteria", - "@type": "Node", - "label": "a cafeteria", - "language": "en", - "term": "/c/en/cafeteria" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a dining table]] in [[a cafeteria]]" - } - ], - "toilet": [ - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/bathroom", - "@type": "Node", - "label": "a bathroom", - "language": "en", - "term": "/c/en/bathroom" - }, - "weight": 7.211102550927979, - "surfaceText": "You are likely to find [[a toilet]] in [[a bathroom]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 4.0, - "surfaceText": "*Something you find in [[a house]] is [[toilet]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/motel_room", - "@type": "Node", - "label": "a motel room", - "language": "en", - "term": "/c/en/motel_room" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a toilet]] in [[a motel room]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/rest_area", - "@type": "Node", - "label": "a rest area", - "language": "en", - "term": "/c/en/rest_area" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a rest area]] is [[a toilet]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[an apartment]] is [[toilet]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/stadium", - "@type": "Node", - "label": "a stadium", - "language": "en", - "term": "/c/en/stadium" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a toilet]] in [[a stadium]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/hospital", - "@type": "Node", - "label": "a hospital", - "language": "en", - "term": "/c/en/hospital" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a toilet]] in [[a hospital]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/hotel", - "@type": "Node", - "label": "a hotel", - "language": "en", - "term": "/c/en/hotel" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a hotel]] is [[a toilet]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/space_shuttle", - "@type": "Node", - "label": "the space shuttle", - "language": "en", - "term": "/c/en/space_shuttle" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the space shuttle]] is [[a toilet]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/cubicle", - "@type": "Node", - "label": "a cubicle", - "language": "en", - "term": "/c/en/cubicle" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toilet]] in [[a cubicle]]." - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/trash", - "@type": "Node", - "label": "the trash", - "language": "en", - "term": "/c/en/trash" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toilet]] in [[the trash]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/service_station", - "@type": "Node", - "label": "a service station", - "language": "en", - "term": "/c/en/service_station" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toilet]] in [[a service station]]." - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/plumbing_shop", - "@type": "Node", - "label": "a plumbing shop", - "language": "en", - "term": "/c/en/plumbing_shop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toilet]] in [[a plumbing shop]]" - }, - { - "start": { - "@id": "/c/en/toilet", - "@type": "Node", - "label": "a toilet", - "language": "en", - "term": "/c/en/toilet" - }, - "end": { - "@id": "/c/en/restaurant", - "@type": "Node", - "label": "a restaurant", - "language": "en", - "term": "/c/en/restaurant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toilet]] in [[a restaurant]]" - } - ], - "tv": [ - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "your house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 5.656854249492381, - "surfaceText": "*Something you find at [[your house]] is [[a tv]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/family_room", - "@type": "Node", - "label": "family room", - "language": "en", - "term": "/c/en/family_room" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a tv]] in [[family room]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/livingroom", - "@type": "Node", - "label": "a livingroom", - "language": "en", - "term": "/c/en/livingroom" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a tv]] in [[a livingroom]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/appliance_store", - "@type": "Node", - "label": "an appliance store", - "language": "en", - "term": "/c/en/appliance_store" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a tv]] in [[an appliance store]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a tv]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/bedroom", - "@type": "Node", - "label": "a bedroom", - "language": "en", - "term": "/c/en/bedroom" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a tv]] in [[a bedroom]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a TV", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "a neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a neighbor's house]] is [[a TV]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/arizona", - "@type": "Node", - "label": "Arizona", - "language": "en", - "term": "/c/en/arizona" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a tv]] in [[Arizona]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/sports_bar", - "@type": "Node", - "label": "a sports bar", - "language": "en", - "term": "/c/en/sports_bar" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a tv]] in [[a sports bar]]" - }, - { - "start": { - "@id": "/c/en/tv", - "@type": "Node", - "label": "a tv", - "language": "en", - "term": "/c/en/tv" - }, - "end": { - "@id": "/c/en/most_rooms", - "@type": "Node", - "label": "most rooms", - "language": "en", - "term": "/c/en/most_rooms" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a tv]] in [[most rooms]]" - } - ], - "laptop": [ - { - "start": { - "@id": "/c/en/laptop", - "@type": "Node", - "label": "a laptop", - "language": "en", - "term": "/c/en/laptop" - }, - "end": { - "@id": "/c/en/internet_cafe", - "@type": "Node", - "label": "a internet cafe", - "language": "en", - "term": "/c/en/internet_cafe" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a internet cafe]] is [[a laptop]]" - }, - { - "start": { - "@id": "/c/en/laptop", - "@type": "Node", - "label": "a laptop", - "language": "en", - "term": "/c/en/laptop" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "your desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[your desk]] is [[a laptop]]" - } - ], - "mouse": [ - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/hole_in_wall", - "@type": "Node", - "label": "a hole in a wall", - "language": "en", - "term": "/c/en/hole_in_wall" - }, - "weight": 6.32455532033676, - "surfaceText": "You are likely to find [[a mouse]] in [[a hole in a wall]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "the garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 5.656854249492381, - "surfaceText": "You are likely to find [[a mouse]] in [[the garage]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/laboratory", - "@type": "Node", - "label": "a laboratory", - "language": "en", - "term": "/c/en/laboratory" - }, - "weight": 5.656854249492381, - "surfaceText": "You are likely to find [[a mouse]] in [[a laboratory]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "a kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 5.291502622129181, - "surfaceText": "You are likely to find [[a mouse]] in [[a kitchen]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/cupboard", - "@type": "Node", - "label": "a cupboard", - "language": "en", - "term": "/c/en/cupboard" - }, - "weight": 5.291502622129181, - "surfaceText": "*Something you find in [[a cupboard]] is [[a mouse]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/attic", - "@type": "Node", - "label": "the attic", - "language": "en", - "term": "/c/en/attic" - }, - "weight": 5.291502622129181, - "surfaceText": "You are likely to find [[a mouse]] in [[the attic]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/trap", - "@type": "Node", - "label": "a trap", - "language": "en", - "term": "/c/en/trap" - }, - "weight": 4.898979485566356, - "surfaceText": "You are likely to find [[a mouse]] in [[a trap]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/cellar", - "@type": "Node", - "label": "a cellar", - "language": "en", - "term": "/c/en/cellar" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a mouse]] in [[a cellar]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "your desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find on [[your desk]] is [[a mouse]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/hole", - "@type": "Node", - "label": "a hole", - "language": "en", - "term": "/c/en/hole" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a mouse]] in [[a hole]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/sewer", - "@type": "Node", - "label": "sewer", - "language": "en", - "term": "/c/en/sewer" - }, - "weight": 4.47213595499958, - "surfaceText": "You are likely to find [[a mouse]] in [[sewer]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/disneyland", - "@type": "Node", - "label": "Disneyland", - "language": "en", - "term": "/c/en/disneyland" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a mouse]] in [[Disneyland]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/grainery", - "@type": "Node", - "label": "a grainery", - "language": "en", - "term": "/c/en/grainery" - }, - "weight": 4.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a grainery]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/abandoned_houses", - "@type": "Node", - "label": "abandoned houses", - "language": "en", - "term": "/c/en/abandoned_houses" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a mouse]] in [[abandoned houses]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/desktop", - "@type": "Node", - "label": "a desktop", - "language": "en", - "term": "/c/en/desktop" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find on [[a desktop]] is [[a mouse]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/corn_field", - "@type": "Node", - "label": "a corn field", - "language": "en", - "term": "/c/en/corn_field" - }, - "weight": 3.4641016151377544, - "surfaceText": "You are likely to find [[a mouse]] in [[a corn field]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/computer_lab", - "@type": "Node", - "label": "a computer lab", - "language": "en", - "term": "/c/en/computer_lab" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[a computer lab]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/dirty_house", - "@type": "Node", - "label": "a dirty house", - "language": "en", - "term": "/c/en/dirty_house" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[a dirty house]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/grain_bin", - "@type": "Node", - "label": "a grain bin", - "language": "en", - "term": "/c/en/grain_bin" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[a grain bin]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/new_york", - "@type": "Node", - "label": "New York", - "language": "en", - "term": "/c/en/new_york" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[New York]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/own_home", - "@type": "Node", - "label": "your own home", - "language": "en", - "term": "/c/en/own_home" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[your own home]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/pantry", - "@type": "Node", - "label": "a pantry", - "language": "en", - "term": "/c/en/pantry" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[a pantry]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/old_barn", - "@type": "Node", - "label": "an old barn", - "language": "en", - "term": "/c/en/old_barn" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[an old barn]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/research_laboratory", - "@type": "Node", - "label": "a research laboratory", - "language": "en", - "term": "/c/en/research_laboratory" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[a research laboratory]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/garden", - "@type": "Node", - "label": "the garden", - "language": "en", - "term": "/c/en/garden" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[the garden]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/computer_store", - "@type": "Node", - "label": "a computer store", - "language": "en", - "term": "/c/en/computer_store" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a mouse]] in [[a computer store]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/lab_maze", - "@type": "Node", - "label": "a lab maze", - "language": "en", - "term": "/c/en/lab_maze" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a lab maze]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/small_hole", - "@type": "Node", - "label": "a small hole", - "language": "en", - "term": "/c/en/small_hole" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a small hole]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/computer", - "@type": "Node", - "label": "a computer", - "language": "en", - "term": "/c/en/computer" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a computer]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/department_store", - "@type": "Node", - "label": "a department store", - "language": "en", - "term": "/c/en/department_store" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a department store]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/grain", - "@type": "Node", - "label": "grain", - "language": "en", - "term": "/c/en/grain" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[grain]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/tom_and_jerry_cartoon", - "@type": "Node", - "label": "a tom and jerry cartoon", - "language": "en", - "term": "/c/en/tom_and_jerry_cartoon" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a tom and jerry cartoon]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/grain_silo", - "@type": "Node", - "label": "a grain silo", - "language": "en", - "term": "/c/en/grain_silo" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a grain silo]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/cat's_mouth", - "@type": "Node", - "label": "a cat's mouth", - "language": "en", - "term": "/c/en/cat's_mouth" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a cat's mouth]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/office", - "@type": "Node", - "label": "the office", - "language": "en", - "term": "/c/en/office" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[the office]]." - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/grain_field", - "@type": "Node", - "label": "a grain field", - "language": "en", - "term": "/c/en/grain_field" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a grain field]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/cornfield", - "@type": "Node", - "label": "a cornfield", - "language": "en", - "term": "/c/en/cornfield" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a cornfield]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/cat", - "@type": "Node", - "label": "a cat", - "language": "en", - "term": "/c/en/cat" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a cat]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/mousehouse", - "@type": "Node", - "label": "a mousehouse", - "language": "en", - "term": "/c/en/mousehouse" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a mousehouse]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/box", - "@type": "Node", - "label": "a box", - "language": "en", - "term": "/c/en/box" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a box]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/internet_cafe", - "@type": "Node", - "label": "a internet cafe", - "language": "en", - "term": "/c/en/internet_cafe" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a internet cafe]] is [[a mouse]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/field", - "@type": "Node", - "label": "any field", - "language": "en", - "term": "/c/en/field" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[any field]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/petshop", - "@type": "Node", - "label": "a petshop", - "language": "en", - "term": "/c/en/petshop" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a petshop]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/america", - "@type": "Node", - "label": "America", - "language": "en", - "term": "/c/en/america" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[America]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/terrarium", - "@type": "Node", - "label": "a terrarium", - "language": "en", - "term": "/c/en/terrarium" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a terrarium]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/grass", - "@type": "Node", - "label": "grass", - "language": "en", - "term": "/c/en/grass" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[grass]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "a shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a shelf]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/barn_full_of_grain", - "@type": "Node", - "label": "a barn full of grain", - "language": "en", - "term": "/c/en/barn_full_of_grain" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a barn full of grain]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/country_side", - "@type": "Node", - "label": "the country side", - "language": "en", - "term": "/c/en/country_side" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[the country side]]" - }, - { - "start": { - "@id": "/c/en/mouse", - "@type": "Node", - "label": "a mouse", - "language": "en", - "term": "/c/en/mouse" - }, - "end": { - "@id": "/c/en/farm", - "@type": "Node", - "label": "a farm", - "language": "en", - "term": "/c/en/farm" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a mouse]] in [[a farm]]" - } - ], - "keyboard": [ - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "your desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 4.0, - "surfaceText": "*Something you find on [[your desk]] is [[a keyboard]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/office", - "@type": "Node", - "label": "an office", - "language": "en", - "term": "/c/en/office" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a keyboard]] in [[an office]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/onstage_at_concert", - "@type": "Node", - "label": "onstage at a concert", - "language": "en", - "term": "/c/en/onstage_at_concert" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a keyboard]] can be is [[onstage at a concert]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/piano", - "@type": "Node", - "label": "a piano", - "language": "en", - "term": "/c/en/piano" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a keyboard]] in [[a piano]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/desktop", - "@type": "Node", - "label": "a desktop", - "language": "en", - "term": "/c/en/desktop" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a desktop]] is [[a keyboard]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/school", - "@type": "Node", - "label": "a school", - "language": "en", - "term": "/c/en/school" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a keyboard]] in [[a school]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/finger", - "@type": "Node", - "label": "your finger", - "language": "en", - "term": "/c/en/finger" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[your finger]] is [[a keyboard]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/area_of_computer", - "@type": "Node", - "label": "the area of a computer", - "language": "en", - "term": "/c/en/area_of_computer" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a keyboard]] in [[the area of a computer]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/landfill", - "@type": "Node", - "label": "the landfill", - "language": "en", - "term": "/c/en/landfill" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a keyboard]] in [[the landfill]]" - }, - { - "start": { - "@id": "/c/en/keyboard", - "@type": "Node", - "label": "a keyboard", - "language": "en", - "term": "/c/en/keyboard" - }, - "end": { - "@id": "/c/en/music_store", - "@type": "Node", - "label": "a music store", - "language": "en", - "term": "/c/en/music_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a keyboard]] in [[a music store]]" - } - ], - "cell_phone": [ - { - "start": { - "@id": "/c/en/cell_phone", - "@type": "Node", - "label": "a cell phone", - "language": "en", - "term": "/c/en/cell_phone" - }, - "end": { - "@id": "/c/en/backpack", - "@type": "Node", - "label": "a backpack", - "language": "en", - "term": "/c/en/backpack" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a backpack]] is [[a cell phone]]" - }, - { - "start": { - "@id": "/c/en/cell_phone", - "@type": "Node", - "label": "a cell phone", - "language": "en", - "term": "/c/en/cell_phone" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "the shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the shelf]] is [[a cell phone]]" - } - ], - "microwave": [ - { - "start": { - "@id": "/c/en/microwave", - "@type": "Node", - "label": "a microwave", - "language": "en", - "term": "/c/en/microwave" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a microwave]]" - }, - { - "start": { - "@id": "/c/en/microwave", - "@type": "Node", - "label": "a microwave", - "language": "en", - "term": "/c/en/microwave" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "the kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[the kitchen]] is [[a microwave]]" - } - ], - "oven": [ - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "an oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/home", - "@type": "Node", - "label": "a home", - "language": "en", - "term": "/c/en/home" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a home]] is [[an oven]]" - }, - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/pizza_store", - "@type": "Node", - "label": "pizza store", - "language": "en", - "term": "/c/en/pizza_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[oven]] in [[pizza store]]." - }, - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "an oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/pizza_place", - "@type": "Node", - "label": "a pizza place", - "language": "en", - "term": "/c/en/pizza_place" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an oven]] in [[a pizza place]]" - }, - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "an oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/own_home", - "@type": "Node", - "label": "your own home", - "language": "en", - "term": "/c/en/own_home" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an oven]] in [[your own home]]" - }, - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "an oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/prison", - "@type": "Node", - "label": "prison", - "language": "en", - "term": "/c/en/prison" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an oven]] in [[prison]]" - }, - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "an oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/restaurant", - "@type": "Node", - "label": "a restaurant", - "language": "en", - "term": "/c/en/restaurant" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an oven]] in [[a restaurant]]" - }, - { - "start": { - "@id": "/c/en/oven", - "@type": "Node", - "label": "an oven", - "language": "en", - "term": "/c/en/oven" - }, - "end": { - "@id": "/c/en/stove", - "@type": "Node", - "label": "a stove", - "language": "en", - "term": "/c/en/stove" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[an oven]] in [[a stove]]" - } - ], - "sink": [ - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/kitchen", - "@type": "Node", - "label": "the kitchen", - "language": "en", - "term": "/c/en/kitchen" - }, - "weight": 6.928203230275509, - "surfaceText": "*Something you find in [[the kitchen]] is [[a sink]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find in [[a house]] is [[a sink]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/chemistry_lab", - "@type": "Node", - "label": "the chemistry lab", - "language": "en", - "term": "/c/en/chemistry_lab" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[the chemistry lab]] is [[sink]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a sink]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/neighbor's_house", - "@type": "Node", - "label": "a neighbor's house", - "language": "en", - "term": "/c/en/neighbor's_house" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a neighbor's house]] is [[a sink]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/kitchen_or_bathroom", - "@type": "Node", - "label": "a kitchen or a bathroom", - "language": "en", - "term": "/c/en/kitchen_or_bathroom" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sink]] in [[a kitchen or a bathroom]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/laundry_room", - "@type": "Node", - "label": "a laundry room", - "language": "en", - "term": "/c/en/laundry_room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sink]] in [[a laundry room]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/bathroom_and_kitchen", - "@type": "Node", - "label": "the bathroom and kitchen", - "language": "en", - "term": "/c/en/bathroom_and_kitchen" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a sink]] in [[the bathroom and kitchen]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/home", - "@type": "Node", - "label": "a home", - "language": "en", - "term": "/c/en/home" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a home]] is [[a sink]]" - }, - { - "start": { - "@id": "/c/en/sink", - "@type": "Node", - "label": "a sink", - "language": "en", - "term": "/c/en/sink" - }, - "end": { - "@id": "/c/en/laboratory", - "@type": "Node", - "label": "a laboratory", - "language": "en", - "term": "/c/en/laboratory" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a laboratory]] is [[a sink]]" - } - ], - "refrigerator": [ - { - "start": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "a refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "end": { - "@id": "/c/en/garage", - "@type": "Node", - "label": "the garage", - "language": "en", - "term": "/c/en/garage" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a refrigerator]] in [[the garage]]" - }, - { - "start": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "a refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "end": { - "@id": "/c/en/home", - "@type": "Node", - "label": "a home", - "language": "en", - "term": "/c/en/home" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[a home]] is [[a refrigerator]]" - }, - { - "start": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "a refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "end": { - "@id": "/c/en/apartment", - "@type": "Node", - "label": "an apartment", - "language": "en", - "term": "/c/en/apartment" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[an apartment]] is [[a refrigerator]]" - }, - { - "start": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "a refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a house]] is [[a refrigerator]]" - }, - { - "start": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "a refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "end": { - "@id": "/c/en/hospital_drug_storeroom", - "@type": "Node", - "label": "a hospital drug storeroom", - "language": "en", - "term": "/c/en/hospital_drug_storeroom" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a refrigerator]] in [[a hospital drug storeroom]]" - }, - { - "start": { - "@id": "/c/en/refrigerator", - "@type": "Node", - "label": "refrigerator", - "language": "en", - "term": "/c/en/refrigerator" - }, - "end": { - "@id": "/c/en/food", - "@type": "Node", - "label": "food", - "language": "en", - "term": "/c/en/food" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[refrigerator]] in [[food]]." - } - ], - "book": [ - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/classroom", - "@type": "Node", - "label": "a classroom", - "language": "en", - "term": "/c/en/classroom" - }, - "weight": 6.32455532033676, - "surfaceText": "You are likely to find [[a book]] in [[a classroom]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "the shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 5.291502622129181, - "surfaceText": "*Something you find on [[the shelf]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bookshelf", - "@type": "Node", - "label": "a bookshelf", - "language": "en", - "term": "/c/en/bookshelf" - }, - "weight": 4.898979485566356, - "surfaceText": "You are likely to find [[a book]] in [[a bookshelf]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/university", - "@type": "Node", - "label": "a university", - "language": "en", - "term": "/c/en/university" - }, - "weight": 4.0, - "surfaceText": "*Something you find at [[a university]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "your desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find on [[your desk]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find at [[a store]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/backpack", - "@type": "Node", - "label": "a backpack", - "language": "en", - "term": "/c/en/backpack" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find in [[a backpack]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bedroom", - "@type": "Node", - "label": "a bedroom", - "language": "en", - "term": "/c/en/bedroom" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a bedroom]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/closet", - "@type": "Node", - "label": "a closet", - "language": "en", - "term": "/c/en/closet" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a closet]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "the table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[the table]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a book]] in [[a house]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/library", - "@type": "Node", - "label": "a library", - "language": "en", - "term": "/c/en/library" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a book]] in [[a library]]." - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/drawer", - "@type": "Node", - "label": "a drawer", - "language": "en", - "term": "/c/en/drawer" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a drawer]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bookcase", - "@type": "Node", - "label": "bookcase", - "language": "en", - "term": "/c/en/bookcase" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[bookcase]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/stack", - "@type": "Node", - "label": "a stack", - "language": "en", - "term": "/c/en/stack" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a stack]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/college_store", - "@type": "Node", - "label": "a college store", - "language": "en", - "term": "/c/en/college_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a college store]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/coffee_table", - "@type": "Node", - "label": "a coffee table", - "language": "en", - "term": "/c/en/coffee_table" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a book]] can be is on [[a coffee table]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/antique_store", - "@type": "Node", - "label": "an antique store", - "language": "en", - "term": "/c/en/antique_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[an antique store]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/library_of_congress", - "@type": "Node", - "label": "the Library of Congress", - "language": "en", - "term": "/c/en/library_of_congress" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[the Library of Congress]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/book_store", - "@type": "Node", - "label": "a book store", - "language": "en", - "term": "/c/en/book_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a book store]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/briefcase", - "@type": "Node", - "label": "a briefcase", - "language": "en", - "term": "/c/en/briefcase" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a briefcase]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/satchel", - "@type": "Node", - "label": "a satchel", - "language": "en", - "term": "/c/en/satchel" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a satchel]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/discount_store", - "@type": "Node", - "label": "a discount store", - "language": "en", - "term": "/c/en/discount_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a discount store]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/synagogue", - "@type": "Node", - "label": "a synagogue", - "language": "en", - "term": "/c/en/synagogue" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a synagogue]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/catalog", - "@type": "Node", - "label": "a catalog", - "language": "en", - "term": "/c/en/catalog" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a catalog]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/hands_of_teacher", - "@type": "Node", - "label": "the hands of a teacher", - "language": "en", - "term": "/c/en/hands_of_teacher" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[the hands of a teacher]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/museum_store", - "@type": "Node", - "label": "a museum store", - "language": "en", - "term": "/c/en/museum_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a museum store]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/school_room", - "@type": "Node", - "label": "a school room", - "language": "en", - "term": "/c/en/school_room" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a book]] can be is in [[a school room]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/room_of_educated_person", - "@type": "Node", - "label": "a room of an educated person", - "language": "en", - "term": "/c/en/room_of_educated_person" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a room of an educated person]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/book_bag", - "@type": "Node", - "label": "a book bag", - "language": "en", - "term": "/c/en/book_bag" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a book bag]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/pile_of_books", - "@type": "Node", - "label": "a pile of books", - "language": "en", - "term": "/c/en/pile_of_books" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a pile of books]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/book_club", - "@type": "Node", - "label": "a book club", - "language": "en", - "term": "/c/en/book_club" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a book club]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bookshop", - "@type": "Node", - "label": "a bookshop", - "language": "en", - "term": "/c/en/bookshop" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a book]] can be is in [[a bookshop]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bookshelves", - "@type": "Node", - "label": "bookshelves", - "language": "en", - "term": "/c/en/bookshelves" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[bookshelves]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "bed", - "language": "en", - "term": "/c/en/bed" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[bed]] is [[a book]]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/tourist_store", - "@type": "Node", - "label": "a tourist store", - "language": "en", - "term": "/c/en/tourist_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a tourist store]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bibliography_of_another_book", - "@type": "Node", - "label": "the bibliography of another book", - "language": "en", - "term": "/c/en/bibliography_of_another_book" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[the bibliography of another book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/row", - "@type": "Node", - "label": "a row", - "language": "en", - "term": "/c/en/row" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[a row]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/floor", - "@type": "Node", - "label": "the floor", - "language": "en", - "term": "/c/en/floor" - }, - "weight": 1.0, - "surfaceText": "Somewhere [[a book]] can be is on [[the floor]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/bedside_table", - "@type": "Node", - "label": "your bedside table", - "language": "en", - "term": "/c/en/bedside_table" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[your bedside table]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a suitcase]] is [[a book]]" - }, - { - "start": { - "@id": "/c/en/book", - "@type": "Node", - "label": "a book", - "language": "en", - "term": "/c/en/book" - }, - "end": { - "@id": "/c/en/hands_of_student", - "@type": "Node", - "label": "the hands of a student", - "language": "en", - "term": "/c/en/hands_of_student" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a book]] in [[the hands of a student]]" - } - ], - "clock": [ - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "a desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find on [[a desk]] is [[a clock]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 2.82842712474619, - "surfaceText": "You are likely to find [[a clock]] in [[a house]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "the shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 2.82842712474619, - "surfaceText": "*Something you find on [[the shelf]] is [[a clock]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/wall", - "@type": "Node", - "label": "a wall", - "language": "en", - "term": "/c/en/wall" - }, - "weight": 2.0, - "surfaceText": "Somewhere [[a clock]] can be is on [[a wall]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/office", - "@type": "Node", - "label": "an office", - "language": "en", - "term": "/c/en/office" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a clock]] in [[an office]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/office_building", - "@type": "Node", - "label": "an office building", - "language": "en", - "term": "/c/en/office_building" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a clock]] in [[an office building]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/own_bedroom", - "@type": "Node", - "label": "your own bedroom", - "language": "en", - "term": "/c/en/own_bedroom" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a clock]] in [[your own bedroom]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/department_store", - "@type": "Node", - "label": "a department store", - "language": "en", - "term": "/c/en/department_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a clock]] in [[a department store]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/car", - "@type": "Node", - "label": "a car", - "language": "en", - "term": "/c/en/car" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a clock]] in [[a car]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/school_room", - "@type": "Node", - "label": "a school room", - "language": "en", - "term": "/c/en/school_room" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a clock]] in [[a school room]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a clock]] in [[a store]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/train_station", - "@type": "Node", - "label": "a train station", - "language": "en", - "term": "/c/en/train_station" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a train station]] is [[a clock]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[a table]] is [[a clock]]" - }, - { - "start": { - "@id": "/c/en/clock", - "@type": "Node", - "label": "a clock", - "language": "en", - "term": "/c/en/clock" - }, - "end": { - "@id": "/c/en/airport", - "@type": "Node", - "label": "an airport/", - "language": "en", - "term": "/c/en/airport" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a clock]] in [[an airport/]]" - } - ], - "vase": [ - { - "start": { - "@id": "/c/en/vase", - "@type": "Node", - "label": "vase", - "language": "en", - "term": "/c/en/vase" - }, - "end": { - "@id": "/c/en/table", - "@type": "Node", - "label": "a table", - "language": "en", - "term": "/c/en/table" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find on [[a table]] is [[vase]]" - }, - { - "start": { - "@id": "/c/en/vase", - "@type": "Node", - "label": "a vase", - "language": "en", - "term": "/c/en/vase" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "a shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[a shelf]] is [[a vase]]" - }, - { - "start": { - "@id": "/c/en/vase", - "@type": "Node", - "label": "a vase", - "language": "en", - "term": "/c/en/vase" - }, - "end": { - "@id": "/c/en/cabinet", - "@type": "Node", - "label": "a cabinet", - "language": "en", - "term": "/c/en/cabinet" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a cabinet]] is [[a vase]]" - }, - { - "start": { - "@id": "/c/en/vase", - "@type": "Node", - "label": "a vase", - "language": "en", - "term": "/c/en/vase" - }, - "end": { - "@id": "/c/en/windowsill", - "@type": "Node", - "label": "the windowsill", - "language": "en", - "term": "/c/en/windowsill" - }, - "weight": 1.0, - "surfaceText": "*Something you find on [[the windowsill]] is [[a vase]]" - } - ], - "scissors": [ - { - "start": { - "@id": "/c/en/scissors", - "@type": "Node", - "label": "scissors", - "language": "en", - "term": "/c/en/scissors" - }, - "end": { - "@id": "/c/en/desk", - "@type": "Node", - "label": "the desk", - "language": "en", - "term": "/c/en/desk" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find in [[the desk]] is [[scissors]]" - }, - { - "start": { - "@id": "/c/en/scissors", - "@type": "Node", - "label": "scissors", - "language": "en", - "term": "/c/en/scissors" - }, - "end": { - "@id": "/c/en/cabinet", - "@type": "Node", - "label": "a cabinet", - "language": "en", - "term": "/c/en/cabinet" - }, - "weight": 2.0, - "surfaceText": "*Something you find in [[a cabinet]] is [[scissors]]" - }, - { - "start": { - "@id": "/c/en/scissors", - "@type": "Node", - "label": "scissors", - "language": "en", - "term": "/c/en/scissors" - }, - "end": { - "@id": "/c/en/house", - "@type": "Node", - "label": "a house", - "language": "en", - "term": "/c/en/house" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a house]] is [[scissors]]" - }, - { - "start": { - "@id": "/c/en/scissors", - "@type": "Node", - "label": "scissors", - "language": "en", - "term": "/c/en/scissors" - }, - "end": { - "@id": "/c/en/drawer", - "@type": "Node", - "label": "a drawer", - "language": "en", - "term": "/c/en/drawer" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a drawer]] is [[scissors]]" - }, - { - "start": { - "@id": "/c/en/scissors", - "@type": "Node", - "label": "scissors", - "language": "en", - "term": "/c/en/scissors" - }, - "end": { - "@id": "/c/en/backpack", - "@type": "Node", - "label": "a backpack", - "language": "en", - "term": "/c/en/backpack" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a backpack]] is [[scissors]]" - } - ], - "teddy_bear": [ - { - "start": { - "@id": "/c/en/teddy_bear", - "@type": "Node", - "label": "a teddy bear", - "language": "en", - "term": "/c/en/teddy_bear" - }, - "end": { - "@id": "/c/en/toy_store", - "@type": "Node", - "label": "a toy store", - "language": "en", - "term": "/c/en/toy_store" - }, - "weight": 3.4641016151377544, - "surfaceText": "*Something you find at [[a toy store]] is [[a teddy bear]]" - }, - { - "start": { - "@id": "/c/en/teddy_bear", - "@type": "Node", - "label": "a teddy bear", - "language": "en", - "term": "/c/en/teddy_bear" - }, - "end": { - "@id": "/c/en/shelf", - "@type": "Node", - "label": "a shelf", - "language": "en", - "term": "/c/en/shelf" - }, - "weight": 2.0, - "surfaceText": "*Something you find on [[a shelf]] is [[a teddy bear]]" - }, - { - "start": { - "@id": "/c/en/teddy_bear", - "@type": "Node", - "label": "a teddy bear", - "language": "en", - "term": "/c/en/teddy_bear" - }, - "end": { - "@id": "/c/en/bed", - "@type": "Node", - "label": "bed", - "language": "en", - "term": "/c/en/bed" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[bed]] is [[a teddy bear]]" - }, - { - "start": { - "@id": "/c/en/teddy_bear", - "@type": "Node", - "label": "a teddy bear", - "language": "en", - "term": "/c/en/teddy_bear" - }, - "end": { - "@id": "/c/en/home", - "@type": "Node", - "label": "a home", - "language": "en", - "term": "/c/en/home" - }, - "weight": 1.0, - "surfaceText": "*Something you find at [[a home]] is [[a teddy bear]]" - } - ], - "toothbrush": [ - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/suitcase", - "@type": "Node", - "label": "a suitcase", - "language": "en", - "term": "/c/en/suitcase" - }, - "weight": 4.47213595499958, - "surfaceText": "*Something you find in [[a suitcase]] is [[a toothbrush]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/dentist", - "@type": "Node", - "label": "the dentist", - "language": "en", - "term": "/c/en/dentist" - }, - "weight": 2.0, - "surfaceText": "*Something you find at [[the dentist]] is [[toothbrush]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/mouth", - "@type": "Node", - "label": "your mouth", - "language": "en", - "term": "/c/en/mouth" - }, - "weight": 2.0, - "surfaceText": "You are likely to find [[a toothbrush]] in [[your mouth]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/store", - "@type": "Node", - "label": "a store", - "language": "en", - "term": "/c/en/store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toothbrush]] in [[a store]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/grocery_store", - "@type": "Node", - "label": "a grocery store", - "language": "en", - "term": "/c/en/grocery_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toothbrush]] in [[a grocery store]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/drug_store", - "@type": "Node", - "label": "a drug store", - "language": "en", - "term": "/c/en/drug_store" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toothbrush]] in [[a drug store]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/dentist_office", - "@type": "Node", - "label": "a dentist office", - "language": "en", - "term": "/c/en/dentist_office" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toothbrush]] in [[a dentist office]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/bedroom", - "@type": "Node", - "label": "a bedroom", - "language": "en", - "term": "/c/en/bedroom" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a bedroom]] is [[a toothbrush]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/bathroom_cabinet", - "@type": "Node", - "label": "a bathroom cabinet", - "language": "en", - "term": "/c/en/bathroom_cabinet" - }, - "weight": 1.0, - "surfaceText": "You are likely to find [[a toothbrush]] in [[a bathroom cabinet]]" - }, - { - "start": { - "@id": "/c/en/toothbrush", - "@type": "Node", - "label": "a toothbrush", - "language": "en", - "term": "/c/en/toothbrush" - }, - "end": { - "@id": "/c/en/cabinet", - "@type": "Node", - "label": "a cabinet", - "language": "en", - "term": "/c/en/cabinet" - }, - "weight": 1.0, - "surfaceText": "*Something you find in [[a cabinet]] is [[a toothbrush]]" - } - ] -} \ No newline at end of file diff --git a/room_env/data/des-config-l-v1.json b/room_env/data/des-config-l-v1.json deleted file mode 100644 index 221f781..0000000 --- a/room_env/data/des-config-l-v1.json +++ /dev/null @@ -1,2462 +0,0 @@ -{ - "components": { - "Barbara": [ - [ - "donut", - "lap" - ], - [ - "donut", - "lap" - ], - [ - "donut", - "lap" - ], - [ - "donut", - "lap" - ] - ], - "Jennifer": [ - [ - "keyboard", - "kennel" - ], - [ - "keyboard", - "kennel" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "kitchen" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "kitchen" - ] - ], - "Lauren": [ - [ - "bird", - "tree" - ], - [ - "bird", - "countryside" - ], - [ - "bird", - "countryside" - ], - [ - "bird", - "countryside" - ] - ], - "Carl": [ - [ - "airplane", - "circus" - ], - [ - "airplane", - "lap" - ], - [ - "airplane", - "circus" - ], - [ - "airplane", - "sky" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ] - ], - "Jacob": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "bowl", - "water" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "water" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "David": [ - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "boat", - "lunchbox" - ], - [ - "boat", - "lunchbox" - ], - [ - "boat", - "lunchbox" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ] - ], - "Rachel": [ - [ - "train", - "store" - ], - [ - "bicycle", - "garage" - ], - [ - "bicycle", - "store" - ], - [ - "bicycle", - "garage" - ], - [ - "bicycle", - "garage" - ] - ], - "Alexander": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "house" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "classroom" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "classroom" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "movie" - ], - [ - "dog", - "movie" - ], - [ - "dog", - "kennel" - ], - [ - "train", - "nursery" - ], - [ - "train", - "nursery" - ] - ], - "Gloria": [ - [ - "sheep", - "kitchen" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "kitchen" - ], - [ - "sheep", - "lap" - ], - [ - "sheep", - "lap" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "kennel" - ] - ], - "Roger": [ - [ - "train", - "farm" - ], - [ - "train", - "farm" - ], - [ - "train", - "zoo" - ], - [ - "train", - "farm" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "farm" - ] - ], - "Raymond": [ - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "city" - ], - [ - "handbag", - "movie" - ], - [ - "handbag", - "movie" - ], - [ - "handbag", - "city" - ], - [ - "keyboard", - "garage" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "garage" - ], - [ - "keyboard", - "garage" - ], - [ - "keyboard", - "garage" - ], - [ - "keyboard", - "garage" - ] - ], - "Isabella": [ - [ - "train", - "kitchen" - ], - [ - "bird", - "tree" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "Joan": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "keyboard", - "desk" - ], - [ - "donut", - "lap" - ], - [ - "donut", - "movie" - ] - ], - "Beverly": [ - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ] - ], - "Michael": [ - [ - "elephant", - "circus" - ], - [ - "elephant", - "water" - ], - [ - "elephant", - "water" - ], - [ - "elephant", - "water" - ], - [ - "elephant", - "store" - ], - [ - "elephant", - "store" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "store" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "home" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "home" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "garage" - ] - ], - "Arthur": [ - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "bakery" - ] - ], - "Steven": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "bird", - "city" - ], - [ - "bird", - "city" - ], - [ - "bird", - "city" - ] - ], - "Margaret": [ - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "handbag", - "store" - ] - ], - "Carol": [ - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ] - ], - "Elijah": [ - [ - "train", - "farm" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "zoo" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ] - ], - "Scott": [ - [ - "boat", - "water" - ], - [ - "boat", - "store" - ], - [ - "boat", - "store" - ], - [ - "boat", - "water" - ], - [ - "boat", - "store" - ], - [ - "boat", - "water" - ], - [ - "boat", - "store" - ], - [ - "boat", - "store" - ] - ], - "Christina": [ - [ - "oven", - "bathroom" - ], - [ - "oven", - "air" - ], - [ - "oven", - "home" - ], - [ - "oven", - "bathroom" - ], - [ - "oven", - "air" - ], - [ - "oven", - "home" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bicycle", - "zoo" - ], - [ - "bicycle", - "garage" - ] - ], - "Frank": [ - [ - "train", - "circus" - ], - [ - "train", - "circus" - ], - [ - "train", - "circus" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ] - ], - "Marilyn": [ - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ], - [ - "train", - "zoo" - ] - ], - "Evelyn": [ - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "sky" - ], - [ - "donut", - "sky" - ], - [ - "donut", - "home" - ], - [ - "donut", - "sky" - ], - [ - "donut", - "home" - ], - [ - "donut", - "bakery" - ] - ], - "John": [ - [ - "kite", - "air" - ] - ], - "Linda": [ - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "sheep", - "farm" - ] - ], - "Judith": [ - [ - "bird", - "tree" - ], - [ - "bird", - "park" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "kitchen" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "kitchen" - ] - ], - "Brenda": [ - [ - "bicycle", - "garage" - ], - [ - "bicycle", - "garage" - ], - [ - "bird", - "sky" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "sky" - ], - [ - "bird", - "sky" - ], - [ - "bowl", - "farm" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "farm" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "farm" - ], - [ - "bowl", - "nursery" - ] - ], - "Rebecca": [ - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "house" - ], - [ - "boat", - "water" - ], - [ - "boat", - "house" - ], - [ - "boat", - "water" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "lunchbox" - ], - [ - "keyboard", - "lunchbox" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ], - "Walter": [ - [ - "car", - "city" - ], - [ - "car", - "cupboard" - ], - [ - "boat", - "water" - ] - ], - "Larry": [ - [ - "airplane", - "cupboard" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "oven", - "home" - ], - [ - "oven", - "bathroom" - ], - [ - "oven", - "home" - ], - [ - "oven", - "bathroom" - ] - ], - "Teresa": [ - [ - "donut", - "bakery" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ], - "Brittany": [ - [ - "kite", - "office" - ], - [ - "kite", - "air" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "keyboard", - "cupboard" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "cupboard" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "cupboard" - ], - [ - "keyboard", - "cupboard" - ] - ], - "Jean": [ - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Catherine": [ - [ - "bicycle", - "home" - ], - [ - "bicycle", - "garage" - ] - ], - "Nicholas": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "park" - ], - [ - "keyboard", - "park" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "elephant", - "circus" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "farm" - ] - ], - "Gregory": [ - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "bakery" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ] - ], - "Nancy": [ - [ - "bicycle", - "movie" - ], - [ - "kite", - "air" - ], - [ - "kite", - "store" - ], - [ - "kite", - "air" - ], - [ - "kite", - "air" - ], - [ - "kite", - "kitchen" - ], - [ - "kite", - "air" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "sky" - ], - [ - "keyboard", - "park" - ], - [ - "keyboard", - "desk" - ] - ], - "Ann": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "boat", - "bathroom" - ], - [ - "boat", - "bathroom" - ], - [ - "boat", - "bathroom" - ], - [ - "boat", - "bathroom" - ], - [ - "boat", - "bathroom" - ], - [ - "boat", - "bathroom" - ], - [ - "boat", - "water" - ], - [ - "boat", - "bathroom" - ] - ], - "Anthony": [ - [ - "sheep", - "farm" - ] - ], - "Laura": [ - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "lunchbox" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "nursery" - ], - [ - "airplane", - "cupboard" - ], - [ - "airplane", - "nursery" - ] - ], - "Jack": [ - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "kite", - "bakery" - ], - [ - "kite", - "air" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ] - ], - "Jose": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Billy": [ - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "farm" - ] - ], - "Justin": [ - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ] - ], - "Susan": [ - [ - "airplane", - "house" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ] - ], - "Ethan": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "store" - ], - [ - "bicycle", - "bakery" - ], - [ - "bicycle", - "garage" - ], - [ - "bicycle", - "sky" - ], - [ - "kite", - "air" - ] - ], - "Stephanie": [ - [ - "donut", - "apartment" - ], - [ - "donut", - "bakery" - ], - [ - "donut", - "tree" - ], - [ - "donut", - "tree" - ], - [ - "donut", - "apartment" - ], - [ - "donut", - "bakery" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Keith": [ - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "sheep", - "cupboard" - ], - [ - "sheep", - "farm" - ] - ], - "Julie": [ - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "airplane", - "nursery" - ], - [ - "airplane", - "nursery" - ], - [ - "airplane", - "nursery" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "nursery" - ], - [ - "airplane", - "nursery" - ], - [ - "airplane", - "sky" - ] - ], - "Dylan": [ - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "closet" - ], - [ - "bird", - "tree" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ] - ], - "Amanda": [ - [ - "bicycle", - "countryside" - ], - [ - "bicycle", - "countryside" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "nursery" - ], - [ - "dog", - "nursery" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "garage" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "garage" - ] - ], - "Christopher": [ - [ - "sheep", - "movie" - ], - [ - "sheep", - "farm" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ] - ], - "Kathleen": [ - [ - "kite", - "air" - ], - [ - "kite", - "air" - ], - [ - "kite", - "air" - ], - [ - "donut", - "bakery" - ], - [ - "elephant", - "lap" - ], - [ - "elephant", - "lap" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "bathroom" - ], - [ - "elephant", - "lap" - ] - ], - "Martha": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "cupboard" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "cupboard" - ], - [ - "elephant", - "water" - ], - [ - "elephant", - "water" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ] - ], - "Matthew": [ - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "classroom" - ], - [ - "oven", - "classroom" - ], - [ - "oven", - "classroom" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "oven", - "home" - ], - [ - "car", - "classroom" - ], - [ - "car", - "city" - ], - [ - "car", - "classroom" - ], - [ - "car", - "apartment" - ], - [ - "car", - "city" - ], - [ - "car", - "apartment" - ], - [ - "car", - "classroom" - ], - [ - "car", - "apartment" - ] - ], - "Olivia": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "car", - "city" - ], - [ - "car", - "park" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "city" - ], - [ - "car", - "park" - ], - [ - "sheep", - "movie" - ], - [ - "sheep", - "movie" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "movie" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "water" - ], - [ - "sheep", - "movie" - ], - [ - "sheep", - "farm" - ] - ], - "Donald": [ - [ - "car", - "home" - ], - [ - "car", - "home" - ], - [ - "car", - "city" - ], - [ - "car", - "home" - ], - [ - "car", - "office" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "city" - ], - [ - "dog", - "city" - ], - [ - "dog", - "kitchen" - ] - ], - "James": [ - [ - "sheep", - "nursery" - ], - [ - "sheep", - "nursery" - ], - [ - "sheep", - "nursery" - ], - [ - "sheep", - "nursery" - ], - [ - "airplane", - "sky" - ], - [ - "bicycle", - "garage" - ], - [ - "bicycle", - "nursery" - ], - [ - "bicycle", - "garage" - ], - [ - "bicycle", - "air" - ], - [ - "bicycle", - "air" - ], - [ - "bicycle", - "air" - ] - ], - "Patricia": [ - [ - "sheep", - "zoo" - ], - [ - "sheep", - "zoo" - ], - [ - "sheep", - "zoo" - ], - [ - "sheep", - "farm" - ], - [ - "sheep", - "farm" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "city" - ], - [ - "bowl", - "cupboard" - ] - ], - "Diana": [ - [ - "oven", - "home" - ] - ], - "Lisa": [ - [ - "car", - "city" - ], - [ - "car", - "lunchbox" - ], - [ - "car", - "lunchbox" - ], - [ - "car", - "city" - ], - [ - "car", - "lunchbox" - ], - [ - "car", - "lunchbox" - ], - [ - "boat", - "water" - ] - ], - "Natalie": [ - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "bird", - "tree" - ], - [ - "keyboard", - "kitchen" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "kitchen" - ], - [ - "keyboard", - "kitchen" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ] - }, - "resources": { - "lap": 4, - "kennel": 6, - "tree": 7, - "circus": 6, - "desk": 8, - "store": 8, - "kitchen": 6, - "farm": 8, - "cupboard": 7, - "zoo": 8, - "bakery": 6, - "sky": 6, - "water": 6, - "bathroom": 3, - "air": 5, - "garage": 6, - "city": 8, - "office": 2, - "lunchbox": 6, - "home": 8, - "movie": 4, - "house": 2, - "apartment": 1, - "countryside": 2, - "nursery": 5, - "park": 3, - "closet": 1, - "classroom": 2 - }, - "last_timestep": 128, - "semantic_knowledge": { - "bowl": "cupboard", - "dog": "kennel", - "airplane": "sky", - "keyboard": "desk", - "elephant": "circus", - "sandwich": "lunchbox", - "boat": "water", - "handbag": "store", - "sheep": "farm", - "donut": "bakery", - "bicycle": "garage", - "bird": "tree", - "car": "city", - "oven": "home", - "kite": "air", - "train": "zoo" - }, - "complexity": 73728 -} \ No newline at end of file diff --git a/room_env/data/des-config-m-v1.json b/room_env/data/des-config-m-v1.json deleted file mode 100644 index cb79648..0000000 --- a/room_env/data/des-config-m-v1.json +++ /dev/null @@ -1,919 +0,0 @@ -{ - "components": { - "Gregory": [ - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ] - ], - "Roger": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "Dylan": [ - [ - "boat", - "water" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ], - "Jacob": [ - [ - "sandwich", - "bakery" - ], - [ - "sandwich", - "bakery" - ] - ], - "Carol": [ - [ - "sandwich", - "circus" - ], - [ - "sandwich", - "circus" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "circus" - ], - [ - "sandwich", - "circus" - ] - ], - "Jack": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "countryside" - ], - [ - "dog", - "countryside" - ], - [ - "dog", - "countryside" - ] - ], - "Judith": [ - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "table" - ] - ], - "Gloria": [ - [ - "airplane", - "sky" - ], - [ - "airplane", - "city" - ], - [ - "airplane", - "city" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "city" - ], - [ - "airplane", - "city" - ], - [ - "airplane", - "sky" - ] - ], - "Alexander": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "keyboard", - "lap" - ] - ], - "Natalie": [ - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ] - ], - "Brittany": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "park" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ], - "Michael": [ - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "handbag", - "house" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "house" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "house" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ] - ], - "Amanda": [ - [ - "airplane", - "bakery" - ], - [ - "airplane", - "circus" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ] - ], - "Marilyn": [ - [ - "airplane", - "table" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "table" - ], - [ - "airplane", - "table" - ] - ], - "Laura": [ - [ - "airplane", - "nursery" - ], - [ - "airplane", - "nursery" - ] - ], - "Rebecca": [ - [ - "boat", - "water" - ] - ], - "Lauren": [ - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ] - ], - "Lisa": [ - [ - "boat", - "farm" - ], - [ - "boat", - "farm" - ], - [ - "boat", - "water" - ], - [ - "boat", - "farm" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "farm" - ] - ], - "Kathleen": [ - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "office" - ], - [ - "elephant", - "circus" - ] - ], - "Anthony": [ - [ - "dog", - "table" - ], - [ - "dog", - "table" - ], - [ - "dog", - "table" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "bakery" - ], - [ - "bowl", - "cupboard" - ] - ], - "Martha": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ], - "Donald": [ - [ - "bowl", - "bathroom" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "airplane", - "sky" - ] - ], - "Keith": [ - [ - "boat", - "zoo" - ], - [ - "boat", - "zoo" - ], - [ - "boat", - "zoo" - ] - ], - "John": [ - [ - "elephant", - "circus" - ], - [ - "elephant", - "desk" - ], - [ - "elephant", - "desk" - ], - [ - "elephant", - "circus" - ], - [ - "elephant", - "circus" - ] - ], - "Raymond": [ - [ - "boat", - "lunchbox" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "lunchbox" - ], - [ - "boat", - "lunchbox" - ], - [ - "boat", - "lunchbox" - ] - ], - "Justin": [ - [ - "bowl", - "kennel" - ], - [ - "bowl", - "kennel" - ], - [ - "bowl", - "kennel" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "Brenda": [ - [ - "bowl", - "nursery" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "garage" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "nursery" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "office" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "office" - ] - ], - "Nancy": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "kennel" - ], - [ - "bowl", - "kennel" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ] - ], - "Beverly": [ - [ - "airplane", - "sky" - ], - [ - "handbag", - "office" - ] - ], - "David": [ - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "boat", - "water" - ], - [ - "elephant", - "circus" - ] - ], - "Patricia": [ - [ - "bowl", - "countryside" - ], - [ - "bowl", - "countryside" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "countryside" - ], - [ - "bowl", - "countryside" - ], - [ - "bowl", - "countryside" - ], - [ - "bowl", - "countryside" - ], - [ - "bowl", - "cupboard" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "lunchbox" - ], - [ - "sandwich", - "bakery" - ], - [ - "sandwich", - "lunchbox" - ] - ], - "Christina": [ - [ - "handbag", - "office" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "store" - ], - [ - "handbag", - "office" - ] - ] - }, - "resources": { - "store": 4, - "cupboard": 7, - "water": 7, - "bakery": 3, - "circus": 6, - "kennel": 4, - "lunchbox": 4, - "sky": 4, - "desk": 4, - "table": 3, - "nursery": 2, - "farm": 1, - "bathroom": 1, - "zoo": 1, - "countryside": 2, - "office": 4, - "city": 1, - "park": 1, - "garage": 1, - "lap": 1, - "house": 1 - }, - "last_timestep": 128, - "semantic_knowledge": { - "bowl": "cupboard", - "dog": "kennel", - "airplane": "sky", - "keyboard": "desk", - "elephant": "circus", - "sandwich": "lunchbox", - "boat": "water", - "handbag": "store" - }, - "complexity": 12288 -} \ No newline at end of file diff --git a/room_env/data/des-config-s-v1.json b/room_env/data/des-config-s-v1.json deleted file mode 100644 index 764cc7f..0000000 --- a/room_env/data/des-config-s-v1.json +++ /dev/null @@ -1,536 +0,0 @@ -{ - "components": { - "Patricia": [ - [ - "dog", - "store" - ], - [ - "dog", - "store" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "store" - ], - [ - "dog", - "store" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "store" - ] - ], - "Laura": [ - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ] - ], - "Dylan": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "air" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "air" - ], - [ - "bowl", - "air" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "air" - ] - ], - "Alexander": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "dog", - "kennel" - ] - ], - "Anthony": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Brenda": [ - [ - "keyboard", - "desk" - ] - ], - "Gloria": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "closet" - ], - [ - "bowl", - "closet" - ], - [ - "bowl", - "closet" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ], - "Martha": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "cupboard" - ] - ], - "Lisa": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ], - [ - "dog", - "cupboard" - ] - ], - "Brittany": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ] - ], - "Keith": [ - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Christina": [ - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "airplane", - "park" - ], - [ - "airplane", - "park" - ], - [ - "airplane", - "sky" - ], - [ - "airplane", - "sky" - ] - ], - "Carol": [ - [ - "keyboard", - "park" - ], - [ - "keyboard", - "park" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Roger": [ - [ - "keyboard", - "classroom" - ], - [ - "keyboard", - "desk" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "Beverly": [ - [ - "keyboard", - "bakery" - ], - [ - "keyboard", - "bakery" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "bakery" - ] - ], - "John": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ], - [ - "keyboard", - "desk" - ] - ] - }, - "resources": { - "store": 1, - "sky": 4, - "cupboard": 8, - "kennel": 7, - "desk": 6, - "park": 2, - "classroom": 1, - "bakery": 1, - "air": 1, - "closet": 1 - }, - "last_timestep": 128, - "semantic_knowledge": { - "bowl": "cupboard", - "dog": "kennel", - "airplane": "sky", - "keyboard": "desk" - }, - "complexity": 2048 -} \ No newline at end of file diff --git a/room_env/data/des-config-xs-v1.json b/room_env/data/des-config-xs-v1.json deleted file mode 100644 index 9891c14..0000000 --- a/room_env/data/des-config-xs-v1.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "components": { - "Beverly": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "lap" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "lap" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "lap" - ], - [ - "dog", - "lap" - ] - ], - "John": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "desk" - ] - ], - "Lisa": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "Carol": [ - [ - "dog", - "kennel" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "cupboard" - ] - ], - "Patricia": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Anthony": [ - [ - "dog", - "bakery" - ], - [ - "dog", - "bakery" - ] - ], - "Roger": [ - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ], - "Brittany": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ], - [ - "dog", - "kennel" - ] - ] - }, - "resources": { - "cupboard": 5, - "kennel": 6, - "bakery": 1, - "desk": 2, - "lap": 1 - }, - "last_timestep": 128, - "semantic_knowledge": { - "bowl": "cupboard", - "dog": "kennel" - }, - "complexity": 512 -} \ No newline at end of file diff --git a/room_env/data/des-config-xxs-v1.json b/room_env/data/des-config-xxs-v1.json deleted file mode 100644 index 0611189..0000000 --- a/room_env/data/des-config-xxs-v1.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "components": { - "Brittany": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ], - "Patricia": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "desk" - ], - [ - "bowl", - "cupboard" - ] - ], - "Roger": [ - [ - "bowl", - "circus" - ] - ], - "Beverly": [ - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ], - [ - "bowl", - "cupboard" - ] - ] - }, - "resources": { - "cupboard": 3, - "circus": 1, - "desk": 1 - }, - "last_timestep": 128, - "semantic_knowledge": { - "bowl": "cupboard" - }, - "complexity": 128 -} \ No newline at end of file diff --git a/room_env/data/human-locations b/room_env/data/human-locations deleted file mode 100644 index 830f9c0..0000000 --- a/room_env/data/human-locations +++ /dev/null @@ -1,10 +0,0 @@ -A -B -C -D -E -F -G -H -I -J \ No newline at end of file diff --git a/room_env/data/human-names b/room_env/data/human-names deleted file mode 100644 index 1a3ee70..0000000 --- a/room_env/data/human-names +++ /dev/null @@ -1,200 +0,0 @@ -James -Robert -John -Michael -William -David -Richard -Joseph -Thomas -Charles -Christopher -Daniel -Matthew -Anthony -Mark -Donald -Steven -Paul -Andrew -Joshua -Kenneth -Kevin -Brian -George -Edward -Ronald -Timothy -Jason -Jeffrey -Ryan -Jacob -Gary -Nicholas -Eric -Jonathan -Stephen -Larry -Justin -Scott -Brandon -Benjamin -Samuel -Gregory -Frank -Alexander -Raymond -Patrick -Jack -Dennis -Jerry -Tyler -Aaron -Jose -Adam -Henry -Nathan -Douglas -Zachary -Peter -Kyle -Walter -Ethan -Jeremy -Harold -Keith -Christian -Roger -Noah -Gerald -Carl -Terry -Sean -Austin -Arthur -Lawrence -Jesse -Dylan -Bryan -Joe -Jordan -Billy -Bruce -Albert -Willie -Gabriel -Logan -Alan -Juan -Wayne -Roy -Ralph -Randy -Eugene -Vincent -Russell -Elijah -Louis -Bobby -Philip -Johnny -Mary -Patricia -Jennifer -Linda -Elizabeth -Barbara -Susan -Jessica -Sarah -Karen -Nancy -Lisa -Betty -Margaret -Sandra -Ashley -Kimberly -Emily -Donna -Michelle -Dorothy -Carol -Amanda -Melissa -Deborah -Stephanie -Rebecca -Sharon -Laura -Cynthia -Kathleen -Amy -Shirley -Angela -Helen -Anna -Brenda -Pamela -Nicole -Emma -Samantha -Katherine -Christine -Debra -Rachel -Catherine -Carolyn -Janet -Ruth -Maria -Heather -Diane -Virginia -Julie -Joyce -Victoria -Olivia -Kelly -Christina -Lauren -Joan -Evelyn -Judith -Megan -Cheryl -Andrea -Hannah -Martha -Jacqueline -Frances -Gloria -Ann -Teresa -Kathryn -Sara -Janice -Jean -Alice -Madison -Doris -Abigail -Julia -Judy -Grace -Denise -Amber -Marilyn -Beverly -Danielle -Theresa -Sophia -Marie -Diana -Brittany -Natalie -Isabella -Charlotte -Rose -Alexis -Kayla \ No newline at end of file diff --git a/room_env/data/ms-coco-80-categories b/room_env/data/ms-coco-80-categories deleted file mode 100644 index 1f42c8e..0000000 --- a/room_env/data/ms-coco-80-categories +++ /dev/null @@ -1,80 +0,0 @@ -person -bicycle -car -motorcycle -airplane -bus -train -truck -boat -traffic light -fire hydrant -stop sign -parking meter -bench -bird -cat -dog -horse -sheep -cow -elephant -bear -zebra -giraffe -backpack -umbrella -handbag -tie -suitcase -frisbee -skis -snowboard -sports ball -kite -baseball bat -baseball glove -skateboard -surfboard -tennis racket -bottle -wine glass -cup -fork -knife -spoon -bowl -banana -apple -sandwich -orange -broccoli -carrot -hot dog -pizza -donut -cake -chair -couch -potted plant -bed -dining table -toilet -tv -laptop -mouse -remote -keyboard -cell phone -microwave -oven -toaster -sink -refrigerator -book -clock -vase -scissors -teddy bear -hair drier -toothbrush \ No newline at end of file diff --git a/room_env/data/semantic-knowledge-small.json b/room_env/data/semantic-knowledge-small.json deleted file mode 100644 index 875c982..0000000 --- a/room_env/data/semantic-knowledge-small.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "person": { - "AtLocation": [ - { - "tail": "building", - "weight": 1 - } - ] - }, - "bicycle": { - "AtLocation": [ - { - "tail": "garage", - "weight": 1 - } - ] - }, - "car": { - "AtLocation": [ - { - "tail": "city", - "weight": 1 - } - ] - }, - "laptop": { - "AtLocation": [ - { - "tail": "desk", - "weight": 1 - } - ] - }, - "dog": { - "AtLocation": [ - { - "tail": "park", - "weight": 1 - } - ] - }, - "cat": { - "AtLocation": [ - { - "tail": "lap", - "weight": 10 - } - ] - }, - "couch": { - "AtLocation": [ - { - "tail": "house", - "weight": 5 - } - ] - }, - "bird": { - "AtLocation": [ - { - "tail": "tree", - "weight": 4 - } - ] - }, - "cup": { - "AtLocation": [ - { - "tail": "table", - "weight": 4 - } - ] - }, - "chair": { - "AtLocation": [ - { - "tail": "office", - "weight": 8 - } - ] - } -} \ No newline at end of file diff --git a/room_env/data/semantic-knowledge.json b/room_env/data/semantic-knowledge.json deleted file mode 100644 index a871a45..0000000 --- a/room_env/data/semantic-knowledge.json +++ /dev/null @@ -1,530 +0,0 @@ -{ - "person": { - "AtLocation": [ - { - "tail": "bus_stop", - "weight": 1 - } - ] - }, - "bicycle": { - "AtLocation": [ - { - "tail": "garage", - "weight": 1 - } - ] - }, - "car": { - "AtLocation": [ - { - "tail": "city", - "weight": 1 - } - ] - }, - "motorcycle": { - "AtLocation": [ - { - "tail": "garage", - "weight": 1 - } - ] - }, - "airplane": { - "AtLocation": [ - { - "tail": "sky", - "weight": 1 - } - ] - }, - "bus": { - "AtLocation": [ - { - "tail": "bus_stop", - "weight": 1 - } - ] - }, - "train": { - "AtLocation": [ - { - "tail": "zoo", - "weight": 1 - } - ] - }, - "truck": { - "AtLocation": [ - { - "tail": "garage", - "weight": 1 - } - ] - }, - "boat": { - "AtLocation": [ - { - "tail": "water", - "weight": 1 - } - ] - }, - "traffic_light": { - "AtLocation": [ - { - "tail": "corner_of_two_streets", - "weight": 1 - } - ] - }, - "fire_hydrant": { - "AtLocation": [ - { - "tail": "corner_of_two_streets", - "weight": 1 - } - ] - }, - "stop_sign": { - "AtLocation": [ - { - "tail": "corner_of_two_streets", - "weight": 1 - } - ] - }, - "bench": { - "AtLocation": [ - { - "tail": "bus_stop", - "weight": 1 - } - ] - }, - "bird": { - "AtLocation": [ - { - "tail": "tree", - "weight": 1 - } - ] - }, - "cat": { - "AtLocation": [ - { - "tail": "lap", - "weight": 1 - } - ] - }, - "dog": { - "AtLocation": [ - { - "tail": "kennel", - "weight": 1 - } - ] - }, - "horse": { - "AtLocation": [ - { - "tail": "race_track", - "weight": 1 - } - ] - }, - "sheep": { - "AtLocation": [ - { - "tail": "farm", - "weight": 1 - } - ] - }, - "cow": { - "AtLocation": [ - { - "tail": "countryside", - "weight": 1 - } - ] - }, - "elephant": { - "AtLocation": [ - { - "tail": "circus", - "weight": 1 - } - ] - }, - "bear": { - "AtLocation": [ - { - "tail": "park", - "weight": 1 - } - ] - }, - "zebra": { - "AtLocation": [ - { - "tail": "zoo", - "weight": 1 - } - ] - }, - "giraffe": { - "AtLocation": [ - { - "tail": "zoo", - "weight": 1 - } - ] - }, - "umbrella": { - "AtLocation": [ - { - "tail": "closet", - "weight": 1 - } - ] - }, - "handbag": { - "AtLocation": [ - { - "tail": "store", - "weight": 1 - } - ] - }, - "suitcase": { - "AtLocation": [ - { - "tail": "movie", - "weight": 1 - } - ] - }, - "frisbee": { - "AtLocation": [ - { - "tail": "park", - "weight": 1 - } - ] - }, - "skis": { - "AtLocation": [ - { - "tail": "garage", - "weight": 1 - } - ] - }, - "sports_ball": { - "AtLocation": [ - { - "tail": "school", - "weight": 1 - } - ] - }, - "kite": { - "AtLocation": [ - { - "tail": "air", - "weight": 1 - } - ] - }, - "bottle": { - "AtLocation": [ - { - "tail": "nursery", - "weight": 1 - } - ] - }, - "wine_glass": { - "AtLocation": [ - { - "tail": "cupboard", - "weight": 1 - } - ] - }, - "cup": { - "AtLocation": [ - { - "tail": "table", - "weight": 1 - } - ] - }, - "fork": { - "AtLocation": [ - { - "tail": "kitchen", - "weight": 1 - } - ] - }, - "knife": { - "AtLocation": [ - { - "tail": "kitchen", - "weight": 1 - } - ] - }, - "spoon": { - "AtLocation": [ - { - "tail": "bowl", - "weight": 1 - } - ] - }, - "bowl": { - "AtLocation": [ - { - "tail": "cupboard", - "weight": 1 - } - ] - }, - "banana": { - "AtLocation": [ - { - "tail": "monkey's_hand", - "weight": 1 - } - ] - }, - "apple": { - "AtLocation": [ - { - "tail": "apple_tree", - "weight": 1 - } - ] - }, - "sandwich": { - "AtLocation": [ - { - "tail": "lunchbox", - "weight": 1 - } - ] - }, - "broccoli": { - "AtLocation": [ - { - "tail": "farmer's_market", - "weight": 1 - } - ] - }, - "hot_dog": { - "AtLocation": [ - { - "tail": "soccer_game", - "weight": 1 - } - ] - }, - "pizza": { - "AtLocation": [ - { - "tail": "oven", - "weight": 1 - } - ] - }, - "donut": { - "AtLocation": [ - { - "tail": "bakery", - "weight": 1 - } - ] - }, - "cake": { - "AtLocation": [ - { - "tail": "bakery", - "weight": 1 - } - ] - }, - "chair": { - "AtLocation": [ - { - "tail": "office", - "weight": 1 - } - ] - }, - "couch": { - "AtLocation": [ - { - "tail": "house", - "weight": 1 - } - ] - }, - "potted_plant": { - "AtLocation": [ - { - "tail": "windowsill", - "weight": 1 - } - ] - }, - "bed": { - "AtLocation": [ - { - "tail": "house", - "weight": 1 - } - ] - }, - "dining_table": { - "AtLocation": [ - { - "tail": "house", - "weight": 1 - } - ] - }, - "toilet": { - "AtLocation": [ - { - "tail": "bathroom", - "weight": 1 - } - ] - }, - "tv": { - "AtLocation": [ - { - "tail": "house", - "weight": 1 - } - ] - }, - "laptop": { - "AtLocation": [ - { - "tail": "internet_cafe", - "weight": 1 - } - ] - }, - "mouse": { - "AtLocation": [ - { - "tail": "hole_in_wall", - "weight": 1 - } - ] - }, - "keyboard": { - "AtLocation": [ - { - "tail": "desk", - "weight": 1 - } - ] - }, - "cell_phone": { - "AtLocation": [ - { - "tail": "backpack", - "weight": 1 - } - ] - }, - "microwave": { - "AtLocation": [ - { - "tail": "apartment", - "weight": 1 - } - ] - }, - "oven": { - "AtLocation": [ - { - "tail": "home", - "weight": 1 - } - ] - }, - "sink": { - "AtLocation": [ - { - "tail": "kitchen", - "weight": 1 - } - ] - }, - "refrigerator": { - "AtLocation": [ - { - "tail": "garage", - "weight": 1 - } - ] - }, - "book": { - "AtLocation": [ - { - "tail": "classroom", - "weight": 1 - } - ] - }, - "clock": { - "AtLocation": [ - { - "tail": "desk", - "weight": 1 - } - ] - }, - "vase": { - "AtLocation": [ - { - "tail": "table", - "weight": 1 - } - ] - }, - "scissors": { - "AtLocation": [ - { - "tail": "desk", - "weight": 1 - } - ] - }, - "teddy_bear": { - "AtLocation": [ - { - "tail": "toy_store", - "weight": 1 - } - ] - }, - "toothbrush": { - "AtLocation": [ - { - "tail": "suitcase", - "weight": 1 - } - ] - } -} \ No newline at end of file diff --git a/room_env/data/top-human-names b/room_env/data/top-human-names deleted file mode 100644 index cdd5866..0000000 --- a/room_env/data/top-human-names +++ /dev/null @@ -1,20 +0,0 @@ -James -Robert -John -Michael -William -David -Richard -Joseph -Thomas -Charles -Mary -Patricia -Jennifer -Linda -Elizabeth -Barbara -Susan -Jessica -Sarah -Karen \ No newline at end of file diff --git a/room_env/data/top-human-names-small b/room_env/data/top-human-names-small deleted file mode 100644 index c9272c3..0000000 --- a/room_env/data/top-human-names-small +++ /dev/null @@ -1,10 +0,0 @@ -James -Robert -John -Michael -William -David -Richard -Joseph -Thomas -Charles \ No newline at end of file diff --git a/room_env/des.py b/room_env/des.py deleted file mode 100644 index a0eb1c4..0000000 --- a/room_env/des.py +++ /dev/null @@ -1,230 +0,0 @@ -"""Discrete Event Simlator (RoomDes) for the Room.""" -import json -import os -from copy import deepcopy -from pprint import pprint - - -def read_json(fname: str) -> dict: - """Read json. - - There is some path magic going on here. This is to account for both the production - and development mode. Don't use this function for a general purpose. - - """ - fullpath = os.path.join(os.path.dirname(__file__), fname) - - with open(fullpath, "r") as stream: - return json.load(stream) - - -class RoomDes: - - """RoomDes Class. - - This class is very simple at the moment. When it's initialized, it places N_{humans} - in the room. They periodically move to other locations. They also periodically - change the location of their objects they are holding. At the moment, - everything is deterministic. - - """ - - def __init__(self, des_size: str = "l", check_resources: bool = True) -> None: - """Instantiate the class. - - Args - ---- - des_size: configuartion for the RoomDes simulation. It should be either size or - dict. size can be "xxs (extra extra small", "xs (extra small)", "s (small)", - "m (medium)", or "l (large)". - - {"components": , "resources": , - "last_timestep": , - "semantic_knowledge": , "complexity", } - - should look like this: - - should look like this: - - {'desk': 2, 'A': 10000, 'lap': 10000} - - is a number where the DES terminates. - - is a dictionary of semantic knowledge. - - is defined as num_humans * num_total_objects - * maximum_num_objects_per_human * maximum_num_locations_per_object - - check_resources: whether to check if the resources are depleted or not. - - """ - if isinstance(des_size, str): - assert des_size.lower() in [ - "dev", - "xxs", - "xs", - "s", - "m", - "l", - ] - self.config = read_json(f"./data/des-config-{des_size.lower()}-v1.json") - else: - self.config = des_size - self.check_resources = check_resources - self._initialize() - - def _initialize(self) -> None: - """Initialize the simulator.""" - self.components = deepcopy(self.config["components"]) - self.resources = deepcopy(self.config["resources"]) - self.semantic_knowledge = deepcopy(self.config["semantic_knowledge"]) - - self.humans = [] - self.objects = [] - self.object_locations = [] - - for human, obj_locs in self.components.items(): - self.humans.append(human) - - for obj, loc in obj_locs: - self.objects.append(obj) - self.object_locations.append(loc) - - self.humans = sorted(list(set(self.humans))) - self.objects = sorted(list(set(self.objects))) - self.object_locations = sorted(list(set(self.object_locations))) - - self.until = deepcopy(self.config["last_timestep"]) - - self.states = [] - self.state = {} - - for human in self.components: - self.state[human] = {} - - ( - self.state[human]["object"], - self.state[human]["object_location"], - ) = self.components[human][0] - - if self.check_resources: - self.resources[self.state[human]["object_location"]] -= 1 - self.state[human]["current_time"] = 0 - - self.states.append(deepcopy(self.state)) - if self.check_resources: - for key, val in self.resources.items(): - assert val >= 0, f"{key}: {val}" - - self.events = [] - self.current_time = 0 - - def step(self) -> None: - """Proceed time by one.""" - previous_state = deepcopy(self.state) - previous_resources = deepcopy(self.resources) - - self.current_time += 1 - - for human in self.state: - object_location_idx = self.current_time % len(self.components[human]) - - self.state[human]["current_time"] = self.current_time - - if self.check_resources: - self.resources[self.state[human]["object_location"]] += 1 - - ( - self.state[human]["object"], - self.state[human]["object_location"], - ) = self.components[human][object_location_idx] - - if self.check_resources: - self.resources[self.state[human]["object_location"]] -= 1 - - if self.check_resources: - for key, val in self.resources.items(): - assert val >= 0, f"{key}: {val}" - - current_state = deepcopy(self.state) - current_resources = deepcopy(self.resources) - self.event = self.check_event( - previous_state, previous_resources, current_state, current_resources - ) - self.events.append(deepcopy(self.event)) - self.states.append(deepcopy(self.state)) - - def check_event( - self, - previous_state: dict, - previous_resources: dict, - current_state: dict, - current_resources: dict, - ) -> dict: - """Check if any events have occured between the two consecutive states. - - Args - ---- - previous_state - previous_resources - current_state - current_resources - - Returns - ------- - event - - """ - assert len(previous_state) == len(current_state) - assert len(previous_resources) == len(current_resources) - - state_changes = {} - resource_changes = {} - - humans = list(previous_state) - for human in humans: - previous_object = previous_state[human]["object"] - previous_object_location = previous_state[human]["object_location"] - previous_time = previous_state[human]["current_time"] - - current_object = current_state[human]["object"] - current_object_location = current_state[human]["object_location"] - current_time = current_state[human]["current_time"] - - assert current_time == previous_time + 1 - - state_changes[human] = {} - - if previous_object != current_object: - state_changes[human]["object"] = { - "previous": previous_object, - "current": current_object, - } - if previous_object_location != current_object_location: - state_changes[human]["object_location"] = { - "previous": previous_object_location, - "current": current_object_location, - } - - if len(state_changes[human]) == 0: - del state_changes[human] - else: - state_changes[human]["current_time"] = current_time - - for resource in previous_resources: - previous_amount = previous_resources[resource] - current_amount = current_resources[resource] - - if previous_amount != current_amount: - resource_changes[resource] = current_amount - previous_amount - - return {"state_changes": state_changes, "resource_changes": resource_changes} - - def run(self, debug: bool = False) -> None: - """Run until the RoomDes terminates.""" - while self.until > 0: - self.step() - if debug: - pprint(self.event) - - self.until -= 1 diff --git a/room_env/envs/__init__.py b/room_env/envs/__init__.py deleted file mode 100644 index cc22a14..0000000 --- a/room_env/envs/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from room_env.envs.room0 import RoomEnv0 -from room_env.envs.room1 import RoomEnv1 diff --git a/room_env/envs/room0.py b/room_env/envs/room0.py deleted file mode 100644 index a6a805d..0000000 --- a/room_env/envs/room0.py +++ /dev/null @@ -1,517 +0,0 @@ -"""Room environment compatible with gym. -I advise you to check out room1.py, as it's more general. -""" -import json -import logging -import os -import random -from copy import deepcopy -from itertools import cycle -from typing import Tuple - -import gymnasium as gym - -from ..utils import read_lines, remove_name, split_name_entity - -CORRECT = 1 -WRONG = 0 - -logging.basicConfig( - level=os.environ.get("LOGLEVEL", "INFO").upper(), - format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", -) - - -def read_json(fname: str) -> dict: - """Read json. - - There is some path magic going on here. This is to account for both the production - and development mode. Don't use this function for a general purpose. - - """ - fullpath = os.path.join(os.path.dirname(__file__), "../", fname) - - with open(fullpath, "r") as stream: - return json.load(stream) - - -class RoomEnv0(gym.Env): - """The Room environment version 0. - - In this big room, N_{agents} move around and observe N_{humans} placing objects. - Every time the agents move around (i.e., take a step), they observe one human_{i} - placing an object somewhere. Each agent can only observe one human at a time. - Every time the agents takes a step, the environment also asks them where an object - is. +1 reward is given when it gets right and 0 when it gets wrong. - - This environment is challenging in two ways: - - (1) An agent can't observe the entire room. It can only observe one human at a time. - This means that the environment is only partially observable. This constraint means - that it's more beneficial if more than one agent can collaborate. This constraint - also means that the agents should have a memory system to remember the past - observations. - - (2) The room environment changes every time. The humans can switch their locations, - change their objects, and place them at different locations. These changes are - not completely random. A decent portion of them come from commmon-sense knowledge. - This means that an agent with both episodic and semantic memory systems will perform - better than an agent with only one memory system. - - """ - - metadata = {"render.modes": ["console"]} - - def __init__( - self, - room_size: str = "small", - weighting_mode: str = "highest", - probs: dict = { - "commonsense": 0.7, - "new_location": 0.1, - "new_object": 0.1, - "switch_person": 0.5, - }, - limits: dict = { - "heads": None, - "tails": None, - "names": None, - "allow_spaces": False, - }, - max_step: int = 1000, - disjoint_entities: bool = True, - num_agents: int = 1, - ) -> None: - """Initialize the environment. - - Args - ---- - room_size: small or big - weighting_mode: Either "weighted" or "highest" - probs: the probabilities that govern the room environment changes. - limits: Limitation on the triples. - max_step: maximum step an agent can take. The environment will terminate when - the number reaches this value. - disjoint_entities: Assure that the heads and the tails don't overlap. - num_agents: number of agents in the room. - - """ - super().__init__() - self.room_size = room_size - if self.room_size.lower() == "small": - semantic_knowledge_path = "./data/semantic-knowledge-small.json" - names_path = "./data/top-human-names-small" - - elif self.room_size.lower() in ["large", "big"]: - semantic_knowledge_path = "./data/semantic-knowledge.json" - names_path = "./data/top-human-names" - - logging.debug("Creating an Observation-Question-Answer generator object ...") - self.limits = limits - - if set(list(self.limits.values())) != {None}: - logging.warning(f"The obserations will be limited by {self.limits}") - - ( - self.semantic_knowledge, - self.heads, - self.relations, - self.tails, - ) = self.load_semantic_knowledge( - semantic_knowledge_path, - limit_heads=self.limits["heads"], - limit_tails=self.limits["tails"], - allow_spaces=self.limits["allow_spaces"], - disjoint_entities=disjoint_entities, - ) - - assert len(self.relations) == 1, "At the moment there is only one relation." - - self.names = self.read_names( - names_path, self.limits["names"], self.limits["allow_spaces"] - ) - - assert len(self.names) <= len(self.heads) - - if disjoint_entities: - lhs = len(set(self.relations + self.names + self.heads + self.tails)) - rhs = ( - len(self.relations) - + len(self.names) - + len(self.heads) - + len(self.tails) - ) - - assert lhs == rhs - - self.weighting_mode = weighting_mode - self.probs = probs - self.max_step = max_step - self.num_agents = num_agents - # Our state / action space is quite complex. Here we just make a dummy - # observation space to bypass the sanity check. - self.observation_space = gym.spaces.Discrete(1) - self.action_space = gym.spaces.Discrete(1) - - def reset(self) -> Tuple: - """Reset the environment. - - This will place N_{humans} humans in the room. Each human only has one object, - which will be placed by the human in a random location. - - """ - self.step_counter = 0 - random.shuffle(self.names) - random.shuffle(self.heads) - self.room = [] - - for name, head in zip(self.names, self.heads): - relation = self.relations[0] # At the moment there is only one relation. - tail = self.generate_tail(head, relation) - if tail is not None: - self.room.append([f"{name}'s {head}", relation, f"{name}'s {tail}"]) - - navigate = [[i for i in range(len(self.room))] for _ in range(self.num_agents)] - for navigate_ in navigate: - random.shuffle(navigate_) - - self.navigate = [cycle(navigate_) for navigate_ in navigate] - - observations = self.generate_observations() - question, self.answer = self.generate_qa() - - info = {} - - return (observations, question), info - - def generate_observations(self) -> list: - """Generate a random obseration. - - Returns - ------- - observations: e.g., ["Tae's laptop, "AtLocation", "Tae's desk", 10] - - The last element in the list accounts for the timestamp. - - """ - observations = { - i: deepcopy([*self.room[next(navigate_)], self.step_counter]) - for i, navigate_ in enumerate(self.navigate) - } - - return observations - - def generate_qa(self) -> Tuple[list, str]: - """Generate a question and the answer. - - Returns - ------- - question: e.g., ["Tae's laptop", "AtLocation"] - answer: e.g., "Tae's desk" - - """ - random_choice = random.choice(self.room) - question = random_choice[:2] - answer = remove_name(random_choice[-1]) - - return question, answer - - def generate_tail(self, head: str, relation: str) -> str: - """This simulates humans placing their objects in their desired locations. - - Note that "head" shouldn't include a human name. - - """ - if random.random() < self.probs["commonsense"]: - logging.debug(f"Generating a common location for {head} ...") - tails = self.semantic_knowledge[head][relation] - - if len(tails) == 0: - return None - - if self.weighting_mode == "weighted": - tail = random.choices( - [tail["tail"] for tail in tails], - weights=[tail["weight"] for tail in tails], - k=1, - )[0] - elif self.weighting_mode == "highest": - tail = sorted( - self.semantic_knowledge[head][relation], key=lambda x: x["weight"] - )[-1]["tail"] - else: - raise ValueError - else: - logging.debug(f"Generating a NON common location for {head} ...") - while True: - tail = random.choice(self.tails) - if tail not in self.semantic_knowledge[head][relation]: - break - - return tail - - def renew(self) -> None: - """Renew the room. - - This is done every time when the agent takes a step. This is doen to simulate - that the room changes. People move. They place their objects in different - locations. They also change their objects. All of these are done in a random - manner. The randomness can be adjusted from the argument `probs`. - - With the chance of probs["new_location"], an object will be placed at a new - location. - - When the object is placed at a new locaiton, with the chance of - probs["commonsense"], an object will be placed at a commonsense-knowledge spot. - - With the chance of probs["new_object"], the person with the object will have - a new random object. - - With the chance of probs["switch_person"], two persons switch their spots. - - """ - room = [] - for head, relation, tail in self.room: - name1, head = split_name_entity(head) - name2, tail = split_name_entity(tail) - - assert name1 == name2, "we don't do name mixing at this moment." - - if random.random() < self.probs["new_object"]: - while True: - new_head = random.choice(self.heads) - if new_head != head: - head = new_head - tail = self.generate_tail(head, relation) - break - else: - if random.random() < self.probs["new_location"]: - while True: - new_tail = self.generate_tail(head, relation) - if new_tail != tail: - tail = new_tail - break - - room.append( - [ - f"{name1}'s {deepcopy(head)}", - deepcopy(relation), - f"{name2}'s {deepcopy(tail)}", - ], - ) - - if random.random() < self.probs["switch_person"]: - i, j = random.sample( - range( - 0, - len( - self.room, - ), - ), - 2, - ) - room[i], room[j] = room[j], room[i] - - self.room = room - - def step(self, action: str) -> Tuple[Tuple, int, bool, bool, dict]: - """An agent takes an action. - - Args - ---- - action: This is the agent's answer to the previous question. - - """ - if str(action).lower() == self.answer.lower(): - logging.info( - f"The prediction ({action}) matches the answer ({self.answer})!" - ) - reward = CORRECT - - else: - logging.info( - f"The prediction ({action}) does NOT match the answer ({self.answer})!" - ) - reward = WRONG - - self.step_counter += 1 - - # Things will change in the room! - self.renew() - - observations = self.generate_observations() - question, self.answer = self.generate_qa() - - info = {} - - if self.step_counter >= self.max_step: - done = True - else: - done = False - - truncated = False - - return (observations, question), reward, done, truncated, info - - def render(self, mode="console") -> None: - if mode != "console": - raise NotImplementedError() - else: - pass - - def close(self): - pass - - @staticmethod - def read_names( - path: str = "./data/top-human-names", - limit_names: int = None, - allow_spaces: bool = False, - ) -> list: - """Read 20 most common names. - - Args - ---- - path: The path to the top 20 human name list. - limit_names: Limit the number of names - allow_spaces: Whether to include words that have spaces - (e.g., corner of two streets) - - Returns - ------- - names: human names (e.g., James) - - """ - names = read_lines(path) - - if not allow_spaces: - names = [name for name in names if len(name.split("_")) == 1] - - if limit_names: - logging.warning(f"The number of names will be limited to {limit_names}") - names = sorted(names, key=len) - names = names[:limit_names] - - logging.info(f"Reading {path} complete! There are {len(names)} names in total") - - return names - - @staticmethod - def load_semantic_knowledge( - path: str, - limit_heads: int = None, - limit_tails: int = None, - allow_spaces: bool = False, - disjoint_entities: bool = True, - ) -> Tuple[list, list, list, list]: - """Load saved semantic knowledge. - - Args - ---- - path: the path to the pretrained semantic memory. - limit_heads: Limit the number of heads (e.g., 10) - limit_tails: Limit the number of tails per heads (e.g., 1) - allow_spaces: Whether to include words that have spaces - (e.g., corner of two streets) - disjoint_entities: Whether to force that there are no common elements between - entities. - - Returns - ------- - semantic_knowledge - heads - relations - tails - - """ - logging.debug(f"loading the semantic knowledge from {path}...") - semantic_knowledge = read_json(path) - - heads = sorted(list(set(semantic_knowledge.keys()))) - if disjoint_entities: - logging.warning("Tails that are heads will be removed.") - semantic_knowledge = { - key: { - key_: [tail for tail in val_ if tail["tail"] not in heads] - for key_, val_ in val.items() - } - for key, val in semantic_knowledge.items() - } - - semantic_knowledge = { - key: { - key_: val_ - for key_, val_ in val.items() - if len([tail for tail in val_ if tail["tail"]]) > 0 - } - for key, val in semantic_knowledge.items() - } - semantic_knowledge = { - key: val for key, val in semantic_knowledge.items() if len(val) > 0 - } - logging.info("empty entities are removed") - - # sort the semantic knowledge by its highest weight to be sure. - semantic_knowledge = { - key: { - key_: sorted(val_, key=lambda x: -x["weight"]) - for key_, val_ in val.items() - } - for key, val in semantic_knowledge.items() - } - - if not allow_spaces: - semantic_knowledge = { - key: { - key_: [v for v in val_ if len(v["tail"].split("_")) == 1] - for key_, val_ in val.items() - } - for key, val in semantic_knowledge.items() - if (len(key.split("_"))) == 1 - } - - if limit_heads: - logging.warning(f"Limiting the number of heads to {limit_heads} ...") - semantic_knowledge = { - key: val - for idx, (key, val) in enumerate(semantic_knowledge.items()) - if idx < limit_heads - } - - if limit_tails: - logging.warning( - f"Limiting the number of tails per head to {limit_tails} ..." - ) - semantic_knowledge = { - key: {key_: val_[:limit_tails] for key_, val_ in val.items()} - for key, val in semantic_knowledge.items() - } - - heads = sorted(list(set(semantic_knowledge.keys()))) - tails = sorted( - list( - set( - [ - foo["tail"] - for key, val in semantic_knowledge.items() - for key_, val_ in val.items() - for foo in val_ - ] - ) - ) - ) - relations = sorted( - list( - set( - [ - key_ - for key, val in semantic_knowledge.items() - for key_, val_ in val.items() - ] - ) - ) - ) - logging.info(f"semantic knowledge successfully loaded from {path}!") - - return semantic_knowledge, heads, relations, tails diff --git a/room_env/envs/room1.py b/room_env/envs/room1.py deleted file mode 100644 index 5fd5da3..0000000 --- a/room_env/envs/room1.py +++ /dev/null @@ -1,494 +0,0 @@ -"""Room environment compatible with gym. - -This env uses the RoomDes (room_env/envs/des.py), and Memory classes. -This is a more generalized version than RoomEnv0. -""" -import logging -import os -import random -from copy import deepcopy -from typing import Tuple - -import gymnasium as gym - -from ..des import RoomDes -from ..memory import EpisodicMemory, SemanticMemory, ShortMemory -from ..policy import answer_question, encode_observation, manage_memory -from ..utils import seed_everything - -logging.basicConfig( - level=os.environ.get("LOGLEVEL", "INFO").upper(), - format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", -) - - -class RoomEnv1(gym.Env): - """The Room environment version 1. - - This env includes three state-action spaces. You have to choose which one of the - three will be RL trained. - - Memory management. - State: episodic, semantic, and short-term memory systems at time t - Action: (0) Move the oldest short-term memory to the episodic, - (1) to the semantic, or (2) forget it - - Question-answer - State: episodic and semantic memory systems at time t - Action: (0) Select the episodic memory system to answer the question, or - (1) the semantic - - Encoding an observation to a short-term memory. The state space is - (i) triple-based, (ii) text-based, or (iii) image-based. - Triple - State: [(head_i, relation_i, tail_i) | i is from 1 to N] - Action: Choose one of the N triples (actions) to be encoded as - a short-term memory. - Text - State: [token_1, token_2, …, token_N] - Action: This is actually now N^3, where the first, second and third are to - choose head, relation, and tail, respectively. - Image - State: An image with objects - Action: Not sure yet … - - """ - - metadata = {"render.modes": ["console"]} - - def __init__( - self, - des_size: str = "l", - seed: int = 42, - policies: dict = { - "memory_management": "RL", - "question_answer": "episodic_semantic", - "encoding": "argmax", - }, - capacity: dict = {"episodic": 16, "semantic": 16, "short": 1}, - question_prob: int = 1.0, - observation_params: str = "perfect", - allow_random_human: bool = False, - allow_random_question: bool = False, - total_episode_rewards: int = 128, - pretrain_semantic: bool = False, - check_resources: bool = True, - varying_rewards: bool = False, - ) -> None: - """ - - Args - ---- - des_size: "xxs", "xs", "s", "m", or "l". - seed: random seed number - policies: - memory_management: - "RL": Reinforcement learning to learn the policy. - "episodic": Always take action 1: move to the episodic. - "semantic": Always take action 2: move to the semantic. - "forget": Always take action 3: forget the oldest short-term memory. - "random": Take one of the three actions uniform-randomly. - "neural": Neural network policy - question_answer: - "RL": Reinforcement learning to learn the policy. - "episodic_semantic": First look up the episodic and then the semantic. - "semantic_episodic": First look up the semantic and then the episodic. - "episodic": Only look up the episodic. - "semantic": Only look up the semantic. - "random": Take one of the two actions uniform-randomly. - "neural": Neural network policy - encoding: - "RL": Reinforcement learning to learn the policy. - "argmax": Take the triple with the highest score. - "neural": Neural network policy - capacity: memory capactiy of the agent. - e.g., {"episodic": 1, "semantic": 1} - question_prob: The probability of a question being asked at every observation. - observation_params: At the moment this is only "perfect". - allow_random_human: whether or not to generate a random human sequence. - allow_random_question: whether or not to geneate a random question sequence. - total_episode_rewards: total episode rewards - pretrain_semantic: whether to prepopulate the semantic memory with ConceptNet - or not - check_resources: whether to check the resources in the DES. - varying_rewards: If true, then the rewards are scaled in every episode so that - total_episode_rewards is total_episode_rewards. - - """ - self.seed = seed - seed_everything(self.seed) - self.policies = policies - assert len([pol for pol in self.policies.values() if pol.lower() == "rl"]) == 1 - self.capacity = capacity - self.question_prob = question_prob - - self.observation_params = observation_params - - self.allow_random_human = allow_random_human - self.allow_random_question = allow_random_question - self.total_episode_rewards = total_episode_rewards - self.pretrain_semantic = pretrain_semantic - self.check_resources = check_resources - self.varying_rewards = varying_rewards - - # Our state space is quite complex. Here we just make a dummy observation space. - # to bypass the sanity check. - self.observation_space = gym.spaces.Discrete(1) - - if self.policies["memory_management"].lower() == "rl": - # 0 for episodic, 1 for semantic, and 2 to forget - self.action_space = gym.spaces.Discrete(3) - if self.policies["question_answer"].lower() == "rl": - # 0 for episodic and 1 for semantic - self.action_space = gym.spaces.Discrete(2) - if self.policies["encoding"].lower() == "rl": - raise NotImplementedError - - self.des_size = des_size - self.des = RoomDes( - des_size=self.des_size, - check_resources=self.check_resources, - ) - assert 0 < self.question_prob <= 1 - - self.init_memory_systems() - - def init_memory_systems(self) -> None: - """Initialize the agent's memory systems.""" - self.memory_systems = { - "episodic": EpisodicMemory(capacity=self.capacity["episodic"]), - "semantic": SemanticMemory(capacity=self.capacity["semantic"]), - "short": ShortMemory(capacity=self.capacity["short"]), - } - - if self.pretrain_semantic: - assert self.capacity["semantic"] > 0 - _ = self.memory_systems["semantic"].pretrain_semantic( - self.des.semantic_knowledge, - return_remaining_space=False, - freeze=False, - ) - - def generate_sequences(self) -> None: - """Generate human and question sequences in advance.""" - if self.observation_params.lower() == "perfect": - if self.allow_random_human: - self.human_sequence = random.choices( - list(self.des.humans), k=self.des.until + 1 - ) - else: - self.human_sequence = ( - self.des.humans * (self.des.until // len(self.des.humans) + 1) - )[: self.des.until + 1] - else: - raise NotImplementedError - - if self.allow_random_question: - self.question_sequence = [ - random.choice(self.human_sequence[: i + 1]) - for i in range(len(self.human_sequence)) - ] - else: - self.question_sequence = [self.human_sequence[0]] - self.des.run() - assert ( - len(self.des.states) - == len(self.des.events) + 1 - == len(self.human_sequence) - ) - for i in range(len(self.human_sequence) - 1): - start = max(i + 2 - len(self.des.humans), 0) - end = i + 2 - humans_observed = self.human_sequence[start:end] - - current_state = self.des.states[end - 1] - humans_not_changed = [] - for j, human in enumerate(humans_observed): - observed_state = self.des.states[start + j] - - is_changed = False - for to_check in ["object", "object_location"]: - if ( - current_state[human][to_check] - != observed_state[human][to_check] - ): - is_changed = True - if not is_changed: - humans_not_changed.append(human) - - self.question_sequence.append(random.choice(humans_not_changed)) - - self.des._initialize() - - effective_question_sequence = [] - for i, question in enumerate(self.question_sequence[:-1]): - if random.random() < self.question_prob: - effective_question_sequence.append(question) - else: - effective_question_sequence.append(None) - # The last observation shouldn't have a question - effective_question_sequence.append(None) - self.question_sequence = effective_question_sequence - - assert len(self.human_sequence) == len(self.question_sequence) - - self.num_questions = sum( - [True for question in self.question_sequence if question is not None] - ) - if self.varying_rewards: - self.CORRECT = self.total_episode_rewards / self.num_questions - self.WRONG = -self.CORRECT - else: - self.CORRECT = 1 - self.WRONG = -1 - - @staticmethod - def extract_memory_entires(memory_systems: dict) -> dict: - """Extract the entries from the Memory objects. - Ars - --- - memory_systems: {"episodic": EpisodicMemory, "semantic": SemanticMemory, - "short": ShortMemory} - - Returns - ------- - memory_systems_: memory_systems only with entries. - """ - memory_systems_ = {} - for key, value in memory_systems.items(): - memory_systems_[key] = deepcopy(value.entries) - - return memory_systems_ - - def generate_oqa( - self, increment_des: bool = False - ) -> Tuple[dict, dict, dict, bool]: - """Generate an observation, question, and answer. - - Args - ---- - increment_des: whether or not to take a step in the DES. - - Returns - ------- - observation = { - "human": , - "object": , - "object_location": , - } - question = {"human": , "object": } - answer = - is_last: True, if its the last observation in the queue, othewise False - - """ - human_o = self.human_sequence.pop(0) - human_q = self.question_sequence.pop(0) - - is_last_o = len(self.human_sequence) == 0 - is_last_q = len(self.question_sequence) == 0 - - assert is_last_o == is_last_q - is_last = is_last_o - - if increment_des: - self.des.step() - - obj_o = self.des.state[human_o]["object"] - obj_loc_o = self.des.state[human_o]["object_location"] - observation = deepcopy( - { - "human": human_o, - "object": obj_o, - "object_location": obj_loc_o, - "current_time": self.des.current_time, - } - ) - - if human_q is not None: - obj_q = self.des.state[human_q]["object"] - obj_loc_q = self.des.state[human_q]["object_location"] - - question = deepcopy({"human": human_q, "object": obj_q}) - answer = deepcopy(obj_loc_q) - - else: - question = None - answer = None - - return observation, question, answer, is_last - - def reset(self) -> dict: - """Reset the environment. - - - Returns - ------- - state - - """ - self.des._initialize() - self.generate_sequences() - self.init_memory_systems() - info = {} - self.obs, self.question, self.answer, self.is_last = self.generate_oqa( - increment_des=False - ) - - if self.policies["encoding"].lower() == "rl": - return deepcopy(self.obs), info - - if self.policies["memory_management"].lower() == "rl": - encode_observation(self.memory_systems, self.policies["encoding"], self.obs) - return deepcopy(self.extract_memory_entires(self.memory_systems)), info - - if self.policies["question_answer"].lower() == "rl": - encode_observation(self.memory_systems, self.policies["encoding"], self.obs) - manage_memory(self.memory_systems, self.policies["memory_management"]) - while True: - if (self.question is None) and (self.answer is None): - ( - self.obs, - self.question, - self.answer, - self.is_last, - ) = self.generate_oqa(increment_des=True) - encode_observation( - self.memory_systems, self.policies["encoding"], self.obs - ) - manage_memory( - self.memory_systems, self.policies["memory_management"] - ) - else: - return { - "memory_systems": deepcopy( - self.extract_memory_entires(self.memory_systems) - ), - "question": deepcopy(self.question), - }, info - - raise ValueError - - def step(self, action: int) -> Tuple[Tuple, int, bool, bool, dict]: - """An agent takes an action. - - Args - ---- - action: This depends on the state - - Returns - ------- - state, reward, done, truncated, info - - """ - info = {} - truncated = False - if self.policies["encoding"].lower() == "rl": - # This is a dummy code - self.obs = self.obs[action] - encode_observation(self.memory_systems, self.policies["encoding"], self.obs) - manage_memory(self.memory_systems, self.policies["memory_management"]) - - if (self.question is None) and (self.answer is None): - reward = 0 - else: - pred = answer_question( - self.memory_systems, self.policies["question_answer"], self.question - ) - if str(pred).lower() == self.answer: - reward = self.CORRECT - else: - reward = self.WRONG - self.obs, self.question, self.answer, self.is_last = self.generate_oqa( - increment_des=True - ) - state = deepcopy(self.obs) - - if self.is_last: - done = True - else: - done = False - - return state, reward, done, truncated, info - - if self.policies["memory_management"].lower() == "rl": - if action == 0: - manage_memory(self.memory_systems, "episodic") - elif action == 1: - manage_memory(self.memory_systems, "semantic") - elif action == 2: - manage_memory(self.memory_systems, "forget") - else: - raise ValueError - - if (self.question is None) and (self.answer is None): - reward = 0 - else: - pred = answer_question( - self.memory_systems, self.policies["question_answer"], self.question - ) - if str(pred).lower() == self.answer: - reward = self.CORRECT - else: - reward = self.WRONG - - self.obs, self.question, self.answer, self.is_last = self.generate_oqa( - increment_des=True - ) - encode_observation(self.memory_systems, self.policies["encoding"], self.obs) - state = deepcopy(self.extract_memory_entires(self.memory_systems)) - - if self.is_last: - done = True - else: - done = False - - return state, reward, done, truncated, info - - if self.policies["question_answer"].lower() == "rl": - if action == 0: - pred = answer_question(self.memory_systems, "episodic", self.question) - elif action == 1: - pred = answer_question(self.memory_systems, "semantic", self.question) - else: - raise ValueError - - if str(pred).lower() == self.answer: - reward = self.CORRECT - else: - reward = self.WRONG - - while True: - ( - self.obs, - self.question, - self.answer, - self.is_last, - ) = self.generate_oqa(increment_des=True) - encode_observation( - self.memory_systems, self.policies["encoding"], self.obs - ) - manage_memory(self.memory_systems, self.policies["memory_management"]) - - if self.is_last: - state = None - done = True - return state, reward, done, truncated, info - else: - done = False - - if (self.question is not None) and (self.answer is not None): - state = { - "memory_systems": deepcopy( - self.extract_memory_entires(self.memory_systems) - ), - "question": deepcopy(self.question), - } - - return state, reward, done, truncated, info - - def render(self, mode="console") -> None: - if mode != "console": - raise NotImplementedError() - else: - pass diff --git a/room_env/memory.py b/room_env/memory.py deleted file mode 100644 index 2f7198e..0000000 --- a/room_env/memory.py +++ /dev/null @@ -1,1057 +0,0 @@ -"""Memory system classes.""" -import logging -import os -import random -from copy import deepcopy -from pprint import pformat -from typing import List, Tuple - -from .utils import get_duplicate_dicts, list_duplicates_of - -logging.basicConfig( - level=os.environ.get("LOGLEVEL", "INFO").upper(), - format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", -) - - -class Memory: - """Memory (episodic, semantic, or short) class""" - - def __init__(self, memory_type: str, capacity: int) -> None: - """ - - Args - ---- - memory_type: episodic, semantic, or short - capacity: memory capacity - - """ - logging.debug( - f"instantiating a {memory_type} memory object with size {capacity} ..." - ) - - assert memory_type in ["episodic", "semantic", "short"] - self.type = memory_type - self.entries = [] - self.capacity = capacity - self._frozen = False - - logging.debug(f"{memory_type} memory object with size {capacity} instantiated!") - - def __repr__(self): - - return pformat(vars(self), indent=4, width=1) - - def forget(self, mem: dict) -> None: - """forget the given memory. - - Args - ---- - mem: A memory in a dictionary format. - - for episodic and short: - {"human": , "object": , "object_location": , - "timestamp": } - - for semantic: - {"object": , "object_location": , - "num_generalized": } - - """ - if self._frozen: - error_msg = "The memory system is frozen!" - logging.error(error_msg) - raise ValueError(error_msg) - - if mem not in self.entries: - error_msg = f"{mem} is not in the memory system!" - logging.error(error_msg) - raise ValueError(error_msg) - - logging.debug(f"Forgetting {mem} ...") - self.entries.remove(mem) - logging.info(f"{mem} forgotten!") - - def forget_all(self) -> None: - """Forget everything in the memory system!""" - if self.is_frozen: - logging.warning( - "The memory system is frozen. Can't forget all. Unfreeze first." - ) - else: - logging.warning("EVERYTHING IN THE MEMORY SYSTEM WILL BE FORGOTTEN!") - self.entries = [] - - @property - def is_empty(self) -> bool: - """Return true if empty.""" - return len(self.entries) == 0 - - @property - def is_full(self) -> bool: - """Return true if full.""" - return len(self.entries) == self.capacity - - @property - def is_frozen(self) -> bool: - """Is frozen?""" - return self._frozen - - @property - def size(self) -> int: - """Get the size (number of filled entries) of the memory system.""" - return len(self.entries) - - def freeze(self) -> None: - """Freeze the memory so that nothing can be added / deleted.""" - self._frozen = True - - def unfreeze(self) -> None: - """Unfreeze the memory so that something can be added / deleted.""" - self._frozen = False - - def forget_random(self) -> None: - """Forget a memory in the memory system in a uniform distribution manner.""" - logging.warning("forgetting a random memory using a uniform distribution ...") - mem = random.choice(self.entries) - self.forget(mem) - - def increase_capacity(self, increase: int) -> None: - """Increase the capacity. - - Args - ---- - increase: the amount of entries to increase. - - """ - assert isinstance(increase, int) and (not self.is_frozen) - logging.debug(f"Increasing the memory capacity by {increase} ...") - self.capacity += increase - logging.info( - f"The memory capacity has been increased by {increase} and now it's " - f"{self.capacity}!" - ) - - def decrease_capacity(self, decrease: int) -> None: - """decrease the capacity. - - Args - ---- - decrease: the amount of entries to decrease. - - """ - assert ( - isinstance(decrease, int) - and (self.capacity - decrease >= 0) - and (not self.is_frozen) - ) - logging.debug(f"Decreasing the memory capacity by {decrease} ...") - self.capacity -= decrease - logging.info( - f"The memory capacity has been decreased by {decrease} and now it's " - f"{self.capacity}!" - ) - - -class EpisodicMemory(Memory): - """Episodic memory class.""" - - def __init__(self, capacity: int) -> None: - """Init an episodic memory system. - - Args - ---- - capacity: capacity of the memory system (i.e., number of entries) - - """ - super().__init__("episodic", capacity) - - def can_be_added(self, mem: dict) -> bool: - """Checks if a memory can be added to the system or not. - - Args - ---- - mem: An episodic memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - Returns - ------- - True or False - - """ - if (self.capacity <= 0) or (self._frozen) or (self.is_full): - return False - - else: - return True - - def add(self, mem: dict) -> None: - """Append a memory to the episodic memory system. - - Args - ---- - mem: An episodic memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - if self._frozen: - error_msg = "The memory system is frozen!" - logging.error(error_msg) - raise ValueError(error_msg) - - logging.debug(f"Adding a new memory entry {mem} ...") - self.entries.append(mem) - logging.info( - f"memory entry {mem} added. Now there are in total of " - f"{len(self.entries)} memories!" - ) - self.clean_old_memories() - - # sort ascending - self.entries.sort(key=lambda x: x["timestamp"]) - - assert self.size <= self.capacity - - def get_oldest_memory(self, entries: list = None) -> List: - """Get the oldest memory in the episodic memory system. - - At the moment, this is simply done by looking up the timestamps and comparing - them. - - Returns - ------- - mem: the oldest memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - if entries is None: - logging.debug("No entries were specified. We'll use the memory system.") - entries = self.entries - - # sorted() is ascending by default. - mem_candidate = sorted(entries, key=lambda x: x["timestamp"])[0] - mem = random.choice( - [mem for mem in entries if mem_candidate["timestamp"] == mem["timestamp"]] - ) - logging.info(f"{mem} is the oldest memory in the entries.") - - return mem - - def get_latest_memory(self, entries: list = None) -> dict: - """Get the latest memory in the episodic memory system. - - At the moment, this is simply done by looking up the timestamps and comparing - them. - - Returns - ------- - mem: the latest memory in a dictionary format - - for episodic: - {"human": , "object": , "object_location": , - "timestamp": } - - """ - if entries is None: - logging.debug("No entries were specified. We'll use the memory system.") - entries = self.entries - - # sorted() is ascending by default. - mem_candidate = sorted(entries, key=lambda x: x["timestamp"])[-1] - mem = random.choice( - [mem for mem in entries if mem_candidate["timestamp"] == mem["timestamp"]] - ) - logging.info(f"{mem} is the oldest memory in the entries.") - - return mem - - def forget_oldest(self) -> None: - """Forget the oldest entry in the memory system. - - At the moment, this is simply done by looking up the timestamps and comparing - them. - - """ - logging.debug("forgetting the oldest memory (FIFO)...") - - mem = self.get_oldest_memory() - self.forget(mem) - - def answer_random(self) -> Tuple[str, int]: - """Answer the question with a uniform-randomly chosen memory. - - Returns - ------- - pred: prediction (e.g., desk) - timestamp - - """ - if self.is_empty: - logging.warning("Memory is empty. I can't answer any questions!") - pred = None - timestamp = None - - else: - mem = random.choice(self.entries) - pred = mem["object_location"] - timestamp = mem["timestamp"] - - logging.info(f"pred: {pred}, timestamp: {timestamp}") - - return pred, timestamp - - def answer_latest(self, question: dict) -> Tuple[str, int]: - """Answer the question with the latest relevant memory. - - If object X was found at Y and then later on found Z, then this strategy answers - Z, instead of Y. - - Args - ---- - question: a dict (i.e., {"human": , "object": }) - - Returns - ------- - pred: prediction - timestamp: timestamp - - """ - logging.debug("answering a question with the answer_latest policy ...") - - if self.is_empty: - logging.warning("Memory is empty. I can't answer any questions!") - pred = None - timestamp = None - - else: - duplicates = get_duplicate_dicts( - {"human": question["human"], "object": question["object"]}, self.entries - ) - - if len(duplicates) == 0: - logging.info("no relevant memories found.") - pred = None - timestamp = None - - else: - logging.info( - f"{len(duplicates)} relevant memories were found in the entries!" - ) - mem = self.get_latest_memory(duplicates) - pred = mem["object_location"] - timestamp = mem["timestamp"] - - logging.info(f"pred: {pred}, timestamp: {timestamp}") - - return pred, timestamp - - @staticmethod - def ob2epi(ob: dict) -> dict: - """Turn an observation into an episodic memory. - - At the moment, the observation format is the same as an episodic memory - for simplification. - - Args - ---- - ob: An observation in a dictionary format - - {"human": , "object": , - "object_location": , "current_time": } - - Returns - ------- - mem: An episodic memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - logging.debug(f"Turning an observation {ob} into a episodic memory ...") - - mem = deepcopy(ob) - mem["timestamp"] = mem.pop("current_time") - - logging.info(f"Observation {ob} is now a episodic memory {mem}") - - return mem - - def find_same_memory(self, mem) -> dict: - """Find an episodic memory that's almost the same as the query memory. - - Args - ---- - mem: An episodic memory in a dictionary format - - {"human": , "object": , - "object_location": , "timestamp": } - - Returns - ------- - an episodic memory if it exists. Otherwise return None. - - """ - for entry in self.entries: - if ( - (entry["human"] == mem["human"]) - and (entry["object"] == mem["object"]) - and (entry["object_location"] == mem["object_location"]) - ): - return entry - - return None - - def clean_old_memories(self) -> List: - """Find if there are duplicate memories with different timestamps.""" - logging.debug("finding if duplicate memories exist ...") - - entries = deepcopy(self.entries) - logging.debug(f"There are {len(entries)} episdoic memories before cleaning") - for entry in entries: - del entry["timestamp"] - - entries = [str(mem) for mem in entries] # to make list hashable - uniques = set(entries) - - locs_all = [ - list_duplicates_of(entries, unique_entry) for unique_entry in uniques - ] - locs_all.sort(key=len) - entries_cleaned = [] - - for locs in locs_all: - mem = self.entries[locs[0]] - mem["timestamp"] = max([self.entries[loc]["timestamp"] for loc in locs]) - entries_cleaned.append(mem) - - self.entries = entries_cleaned - logging.debug(f"There are {len(self.entries)} episdoic memories after cleaning") - - -class ShortMemory(Memory): - """Short-term memory class.""" - - def __init__(self, capacity: int) -> None: - super().__init__("short", capacity) - - def add(self, mem: dict) -> None: - """Append a memory to the short memory system. - - mem: A short memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - if self._frozen: - error_msg = "The memory system is frozen!" - logging.error(error_msg) - raise ValueError(error_msg) - - assert not self.is_full - - logging.debug(f"Adding a new memory entry {mem} ...") - self.entries.append(mem) - logging.info( - f"memory entry {mem} added. Now there are in total of " - f"{len(self.entries)} memories!" - ) - # sort ascending - self.entries.sort(key=lambda x: x["timestamp"]) - - assert self.size <= self.capacity - - def get_oldest_memory(self, entries: list = None) -> List: - """Get the oldest memory in the episodic memory system. - - At the moment, this is simply done by looking up the timestamps and comparing - them. - - Returns - ------- - mem: the oldest memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - if entries is None: - logging.debug("No entries were specified. We'll use the memory system.") - entries = self.entries - - # sorted() is ascending by default. - mem_candidate = sorted(entries, key=lambda x: x["timestamp"])[0] - mem = random.choice( - [mem for mem in entries if mem_candidate["timestamp"] == mem["timestamp"]] - ) - logging.info(f"{mem} is the oldest memory in the entries.") - - return mem - - def get_latest_memory(self, entries: list = None) -> dict: - """Get the latest memory in the episodic memory system. - - At the moment, this is simply done by looking up the timestamps and comparing - them. - - Returns - ------- - mem: the latest memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - if entries is None: - logging.debug("No entries were specified. We'll use the memory system.") - entries = self.entries - - # sorted() is ascending by default. - mem_candidate = sorted(entries, key=lambda x: x["timestamp"])[-1] - mem = random.choice( - [mem for mem in entries if mem_candidate["timestamp"] == mem["timestamp"]] - ) - logging.info(f"{mem} is the oldest memory in the entries.") - - return mem - - def forget_oldest(self) -> None: - """Forget the oldest entry in the memory system. - - At the moment, this is simply done by looking up the timestamps and comparing - them. - - """ - logging.debug("forgetting the oldest memory (FIFO)...") - - mem = self.get_oldest_memory() - self.forget(mem) - - def find_similar_memories(self, mem) -> None: - """Find similar memories. - - mem: A short memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - logging.debug("Searching for similar memories in the short memory system...") - similar = [] - for entry in self.entries: - if (entry["object"] == mem["object"]) and ( - entry["object_location"] == mem["object_location"] - ): - similar.append(entry) - - logging.info(f"{len(similar)} similar short memories found!") - - return similar - - @staticmethod - def ob2short(ob: dict) -> dict: - """Turn an observation into an short memory. - - At the moment, the observation format is almost the same as an episodic memory - for simplification. - - Args - ---- - ob: An observation in a dictionary format - - {"human": , "object": , - "object_location": , "current_time": } - - Returns - ------- - mem: An episodic memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - logging.debug(f"Turning an observation {ob} into a short memory ...") - - mem = deepcopy(ob) - mem["timestamp"] = mem.pop("current_time") - - logging.info(f"Observation {ob} is now a episodic memory {mem}") - - return mem - - @staticmethod - def short2epi(short: dict) -> dict: - """Turn a short memory into a episodic memory. - - Args - ---- - short: A short memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - Returns - ------- - epi: An episodic memory in a dictionary format - - {"human": , - "object": , "object_location": , - "timestamp": } - - """ - epi = deepcopy(short) - return epi - - @staticmethod - def short2sem(short: dict) -> dict: - """Turn a short memory into a episodic memory. - - Args - ---- - short: A short memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - Returns - ------- - sem: A semantic memory in a dictionary format - - {"object": , "object_location": , - "num_generalized": } - - """ - sem = deepcopy(short) - - del sem["human"] - del sem["timestamp"] - sem["num_generalized"] = 1 - - return sem - - def find_same_memory(self, mem) -> dict: - """Find a short memory that's almost the same as the query memory. - - Args - ---- - mem: A short memory in a dictionary format - - {"human": , "object": , - "object_location": , "timestamp": } - - Returns - ------- - A short memory if it exists. Otherwise return None. - - """ - for entry in self.entries: - if ( - (entry["human"] == mem["human"]) - and (entry["object"] == mem["object"]) - and (entry["object_location"] == mem["object_location"]) - ): - return entry - - return None - - -class SemanticMemory(Memory): - """Semantic memory class.""" - - def __init__( - self, - capacity: int, - ) -> None: - """Init a semantic memory system. - - Args - ---- - capacity: capacity of the memory system (i.e., number of entries) - - """ - super().__init__("semantic", capacity) - - def can_be_added(self, mem: dict) -> bool: - """Checks if a memory can be added to the system or not. - - Args - ---- - True or False - - """ - if self.capacity <= 0: - return False - - if self._frozen: - return False - - if self.is_full: - if self.find_same_memory(mem) is None: - return False - else: - return True - else: - return True - - def pretrain_semantic( - self, - semantic_knowledge: dict, - return_remaining_space: bool = True, - freeze: bool = True, - ) -> int: - """Pretrain the semantic memory system from ConceptNet. - - Args - ---- - semantic_knowledge: from ConceptNet. - return_remaining_space: whether or not to return the remaining space from the - semantic memory system. - freeze: whether or not to freeze the semantic memory system or not. - - Returns - ------- - free_space: free space that was not used, if any, so that it can be added to - the episodic memory system. - """ - self.semantic_knowledge = deepcopy(semantic_knowledge) - for obj, loc in self.semantic_knowledge.items(): - if self.is_full: - break - mem = {"object": obj, "object_location": loc, "num_generalized": 1} - logging.debug(f"adding a pretrained semantic knowledge {mem}") - self.add(mem) - - if return_remaining_space: - free_space = self.capacity - len(self.entries) - self.decrease_capacity(free_space) - logging.info( - f"The remaining space {free_space} will be returned. Now " - f"the capacity of the semantic memory system is {self.capacity}" - ) - - else: - free_space = None - - if freeze: - self.freeze() - logging.info("The semantic memory system is frozen!") - - return free_space - - def get_weakest_memory(self, entries: list = None) -> List: - """Get the weakest memory in the semantic memory system system. - - At the moment, this is simply done by looking up the number of generalized - memories comparing them. In the end, an RL agent has to learn this - by itself. - - Returns - ------- - mem: the weakest memory in a dictionary format - - for semantic: - {"object": , "object_location": , - "num_generalized": } - - """ - if entries is None: - logging.debug("No entries were specified. We'll use the memory system.") - entries = self.entries - - # sorted() is ascending by default. - mem_candidate = sorted(entries, key=lambda x: x["num_generalized"])[0] - mem = random.choice( - [ - mem - for mem in entries - if mem_candidate["num_generalized"] == mem["num_generalized"] - ] - ) - logging.info(f"{mem} is the weakest memory in the entries.") - - return mem - - def get_strongest_memory(self, entries: list = None) -> List: - """Get the strongest memory in the semantic memory system system. - - At the moment, this is simply done by looking up the number of generalized - memories comparing them. - - Returns - ------- - mem: the strongest memory in a dictionary format - - - for semantic: - {"object": , "object_location": , - "num_generalized": } - - """ - if entries is None: - logging.debug("No entries were specified. We'll use the memory system.") - entries = self.entries - - # sorted() is ascending by default. - mem_candidate = sorted(entries, key=lambda x: x["num_generalized"])[-1] - mem = random.choice( - [ - mem - for mem in entries - if mem_candidate["num_generalized"] == mem["num_generalized"] - ] - ) - logging.info(f"{mem} is the strongest memory in the entries.") - - return mem - - def find_similar_memories(self, mem) -> None: - """Find similar memories. - - mem: A short memory in a dictionary format - - {"human": , "object": , "object_location": , - "timestamp": } - - """ - logging.debug("Searching for similar memories in the short memory system...") - similar = [] - for entry in self.entries: - if (entry["object"] == mem["object"]) and ( - entry["object_location"] == mem["object_location"] - ): - similar.append(entry) - - logging.info(f"{len(similar)} similar short memories found!") - - return similar - - def forget_weakest(self) -> None: - """Forget the weakest entry in the semantic memory system. - - At the moment, this is simply done by looking up the number of generalized - memories and comparing them. - - """ - logging.debug("forgetting the weakest memory ...") - mem = self.get_weakest_memory() - self.forget(mem) - logging.info(f"{mem} is forgotten!") - - def answer_random(self) -> Tuple[str, int]: - """Answer the question with a uniform-randomly chosen memory. - - Returns - ------- - pred: prediction (e.g., desk) - num_generalized - - """ - if self.is_empty: - logging.warning("Memory is empty. I can't answer any questions!") - pred = None - num_generalized = None - - else: - mem = random.choice(self.entries) - pred = mem["object_location"] - num_generalized = mem["num_generalized"] - - logging.info(f"pred: {pred}, num_generalized: {num_generalized}") - - return pred, num_generalized - - def answer_strongest(self, question: list) -> Tuple[str, int]: - """Answer the question (Find the head that matches the question, and choose the - strongest one among them). - - Args - ---- - question: a dict (i.e., {"human": , "object": }) - - Returns - ------- - pred: prediction - num_generalized: number of generalized samples. - - """ - logging.debug("answering a question with the answer_strongest policy ...") - - if self.is_empty: - logging.warning("Memory is empty. I can't answer any questions!") - pred = None - num_generalized = None - - else: - duplicates = get_duplicate_dicts( - {"object": question["object"]}, self.entries - ) - if len(duplicates) == 0: - logging.info("no relevant memories found.") - pred = None - num_generalized = None - - else: - logging.info( - f"{len(duplicates)} relevant memories were found in the entries!" - ) - mem = self.get_strongest_memory(duplicates) - pred = mem["object_location"] - num_generalized = mem["num_generalized"] - - logging.info(f"pred: {pred}, num_generalized: {num_generalized}") - - return pred, num_generalized - - @staticmethod - def ob2sem(ob: dict) -> dict: - """Turn an observation into a semantic memory. - - At the moment, this is simply done by removing the names from the head and the - tail. - - Args - ---- - ob: An observation in a dictionary format - - {"human": , "object": , - "object_location": , "current_time": } - - - Returns - ------- - mem: A semantic memory in a dictionary format - - {"human": , "object": , "object_location": , - "num_generalized": } - - """ - logging.debug(f"Turning an observation {ob} into a semantic memory ...") - mem = deepcopy(ob) - - del mem["human"] - del mem["current_time"] - - # 1 stands for the 1 generalized. - mem["num_generalized"] = 1 - - logging.info(f"Observation {ob} is now a semantic memory {mem}") - - return mem - - def clean_same_memories(self) -> List: - """Find if there are duplicate memories cuz they should be summed out. - - At the moment, this is simply done by matching string values. - - """ - logging.debug("finding if duplicate memories exist ...") - - entries = deepcopy(self.entries) - logging.debug( - f"There are in total of {len(entries)} semantic memories before cleaning" - ) - for entry in entries: - del entry["num_generalized"] - - entries = [str(mem) for mem in entries] # to make list hashable - uniques = set(entries) - - locs_all = [ - list_duplicates_of(entries, unique_entry) for unique_entry in uniques - ] - locs_all.sort(key=len) - entries_cleaned = [] - - for locs in locs_all: - mem = self.entries[locs[0]] - mem["num_generalized"] = sum( - [self.entries[loc]["num_generalized"] for loc in locs] - ) - entries_cleaned.append(mem) - - self.entries = entries_cleaned - logging.debug( - f"There are now in total of {len(self.entries)} semantic memories after cleaning" - ) - - def add(self, mem: dict): - """Append a memory to the semantic memory system. - - Args - ---- - mem: A memory in a dictionary format - - {"object": , "object_location": , - "num_generalized": } - - """ - if self._frozen: - error_msg = "The memory system is frozen!" - logging.error(error_msg) - raise ValueError(error_msg) - - logging.debug(f"Adding a new memory entry {mem} ...") - self.entries.append(mem) - logging.info( - f"memory entry {mem} added. Now there are in total of " - f"{len(self.entries)} memories!" - ) - self.clean_same_memories() - - # sort ascending - self.entries.sort(key=lambda x: x["num_generalized"]) - - assert self.size <= self.capacity - - def find_same_memory(self, mem) -> dict: - """Find a semantic memory that's almost the same as the query memory. - - Args - ---- - mem: A semantic memory in a dictionary format - - {"object": , "object_location": , - "num_generalized": } - - Returns - ------- - A semantic memory if it exists. Otherwise return None. - - """ - for entry in self.entries: - if (entry["object"] == mem["object"]) and ( - entry["object_location"] == mem["object_location"] - ): - return entry - - return None - - def find_same_object_memory(self, mem) -> dict: - """Find a semantic memory whose object is the same as the query memory. - - Args - ---- - mem: A semantic memory in a dictionary format - - {"object": , "object_location": , - "num_generalized": } - - Returns - ------- - A semantic memory if it exists. Otherwise return None. - - """ - for entry in self.entries: - if (entry["object"] == mem["object"]) and ( - entry["object_location"] != mem["object_location"] - ): - return entry - - return None diff --git a/room_env/policy.py b/room_env/policy.py deleted file mode 100644 index cde0b88..0000000 --- a/room_env/policy.py +++ /dev/null @@ -1,144 +0,0 @@ -"""Handcrafted / trained policies. - -The trained neural network policies are not implemented yet. -""" -import random - -from .memory import ShortMemory - - -def encode_observation(memory_systems: dict, policy: str, obs: dict) -> None: - """Non RL policy of encoding an observation into a short-term memory. - - Args - ---- - memory_systems: {"episodic": EpisodicMemory, "semantic": SemanticMemory, - "short": ShortMemory} - policy: "argmax" or "neural" - obs: observation = {"human": , - "object": , - "object_location": } - - """ - if policy.lower() == "argmax": - mem_short = ShortMemory.ob2short(obs) - else: - raise NotImplementedError - - memory_systems["short"].add(mem_short) - - -def manage_memory(memory_systems: dict, policy: str) -> None: - """Non RL memory management policy. - - Args - ---- - memory_systems: {"episodic": EpisodicMemory, "semantic": SemanticMemory, - "short": ShortMemory} - policy: "episodic", "semantic", "forget", "random", or "neural" - - """ - assert policy.lower() in [ - "episodic", - "semantic", - "forget", - "random", - "neural", - ] - if policy.lower() == "episodic": - if memory_systems["episodic"].capacity != 0: - if memory_systems["episodic"].is_full: - memory_systems["episodic"].forget_oldest() - mem_short = memory_systems["short"].get_oldest_memory() - mem_epi = ShortMemory.short2epi(mem_short) - memory_systems["episodic"].add(mem_epi) - - elif policy.lower() == "semantic": - if memory_systems["semantic"].capacity != 0: - if memory_systems["semantic"].is_full: - memory_systems["semantic"].forget_weakest() - mem_short = memory_systems["short"].get_oldest_memory() - mem_sem = ShortMemory.short2sem(mem_short) - memory_systems["semantic"].add(mem_sem) - - elif policy.lower() == "forget": - pass - - elif policy.lower() == "random": - action_number = random.choice([0, 1, 2]) - if action_number == 0: - if memory_systems["episodic"].is_full: - memory_systems["episodic"].forget_oldest() - mem_short = memory_systems["short"].get_oldest_memory() - mem_epi = ShortMemory.short2epi(mem_short) - memory_systems["episodic"].add(mem_epi) - - elif action_number == 1: - if memory_systems["semantic"].is_full: - memory_systems["semantic"].forget_weakest() - - mem_short = memory_systems["short"].get_oldest_memory() - mem_sem = ShortMemory.short2sem(mem_short) - memory_systems["semantic"].add(mem_sem) - - else: - pass - - elif policy.lower() == "neural": - raise NotImplementedError - - else: - raise ValueError - - memory_systems["short"].forget_oldest() - - -def answer_question(memory_systems: dict, policy: str, question: dict) -> str: - """Non RL question answering policy. - - Args - ---- - memory_systems: {"episodic": EpisodicMemory, "semantic": SemanticMemory, - "short": ShortMemory} - policy: "episodic_semantic", "semantic_episodic", "episodic", "semantic", - "random", or "neural", - question: question = {"human": , "object": } - - Returns - ------- - pred: prediction - - """ - assert policy.lower() in [ - "episodic_semantic", - "semantic_episodic", - "episodic", - "semantic", - "random", - "neural", - ] - pred_epi, _ = memory_systems["episodic"].answer_latest(question) - pred_sem, _ = memory_systems["semantic"].answer_strongest(question) - - if policy.lower() == "episodic_semantic": - if pred_epi is None: - pred = pred_sem - else: - pred = pred_epi - elif policy.lower() == "semantic_episodic": - if pred_sem is None: - pred = pred_epi - else: - pred = pred_sem - elif policy.lower() == "episodic": - pred = pred_epi - elif policy.lower() == "semantic": - pred = pred_sem - elif policy.lower() == "random": - pred = random.choice([pred_epi, pred_sem]) - elif policy.lower() == "neural": - raise NotImplementedError - else: - raise ValueError - - return pred diff --git a/room_env/utils.py b/room_env/utils.py deleted file mode 100644 index e51fbc4..0000000 --- a/room_env/utils.py +++ /dev/null @@ -1,630 +0,0 @@ -"""Utility functions""" -import json -import logging -import os -import random -import subprocess -from copy import deepcopy -from typing import List, Tuple - -import gymnasium as gym -import numpy as np -import torch -import yaml - -import room_env - -from .des import RoomDes - -logging.basicConfig( - level=os.environ.get("LOGLEVEL", "INFO").upper(), - format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", -) - - -def seed_everything(seed: int) -> None: - """Seed every randomness to seed""" - random.seed(seed) - os.environ["PYTHONHASHSEED"] = str(seed) - np.random.seed(seed) - torch.manual_seed(seed) - torch.cuda.manual_seed(seed) - torch.backends.cudnn.deterministic = True - torch.backends.cudnn.benchmark = True - - -def read_lines(fname: str) -> list: - """Read lines from a text file. - - There is some path magic going on here. This is to account for both the production - and development mode. Don't use this function for a general purpose. - - """ - if fname.startswith("/"): - fullpath = fname - else: - fullpath = os.path.join(os.path.dirname(__file__), fname) - - logging.debug(f"Reading {fullpath} ...") - with open(fullpath, "r") as stream: - names = stream.readlines() - names = [line.strip() for line in names] - - return names - - -def read_json(fname: str) -> dict: - """Read json""" - logging.debug(f"reading json {fname} ...") - with open(fname, "r") as stream: - return json.load(stream) - - -def write_json(content: dict, fname: str) -> None: - """Write json""" - logging.debug(f"writing json {fname} ...") - with open(fname, "w") as stream: - json.dump(content, stream, indent=4, sort_keys=False) - - -def read_yaml(fname: str) -> dict: - """Read yaml. - - There is some path magic going on here. This is to account for both the production - and development mode. Don't use this function for a general purpose. - - """ - if fname.startswith("/"): - fullpath = fname - else: - fullpath = os.path.join(os.path.dirname(__file__), fname) - logging.debug(f"reading yaml {fullpath} ...") - with open(fullpath, "r") as stream: - return yaml.safe_load(stream) - - -def write_yaml(content: dict, fname: str) -> None: - """write yaml.""" - logging.debug(f"writing yaml {fname} ...") - with open(fname, "w") as stream: - yaml.dump(content, stream, indent=2, sort_keys=False) - - -def read_data(data_path: str) -> dict: - """Read train, val, test spilts. - - Args - ---- - data_path: path to data. - - Returns - ------- - data: {'train': list of training obs, - 'val': list of val obs, - 'test': list of test obs} - """ - logging.debug(f"reading data from {data_path} ...") - data = read_json(data_path) - logging.info(f"Succesfully read data {data_path}") - - return data - - -def argmax(iterable): - """argmax""" - return max(enumerate(iterable), key=lambda x: x[1])[0] - - -def remove_name(entity: str) -> str: - """Remove name from the entity. - - Args - ---- - entity: e.g., Bob's laptop - - Returns - ------- - e.g., laptop - - """ - return entity.split()[-1] - - -def split_name_entity(name_entity: str) -> Tuple[str, str]: - """Separate name and entity from the given string. - - Args - ---- - name_entity: e.g., "Bob's laptop" - - Returns - ------- - name: e.g., Bob - entity: e.g., laptop - - """ - logging.debug(f"spliting name and entity from {name_entity}") - splitted = name_entity.split() - assert len(splitted) == 2 and "'" in splitted[0] - name = splitted[0].split("'")[0] - entity = splitted[1] - - return name, entity - - -def get_duplicate_dicts(search: dict, target: list) -> List: - """Find if there are duplicate dicts. - - Args - ---- - search: dict - target: target list to look up. - - Returns - ------- - duplicates: a list of dicts or None - - """ - assert isinstance(search, dict) - logging.debug("finding if duplicate dicts exist ...") - duplicates = [] - - for candidate in target: - assert isinstance(candidate, dict) - if set(search).issubset(set(candidate)): - if all([val == candidate[key] for key, val in search.items()]): - duplicates.append(candidate) - - logging.info(f"{len(duplicates)} duplicates were found!") - - return duplicates - - -def list_duplicates_of(seq, item) -> List: - # https://stackoverflow.com/questions/5419204/index-of-duplicates-items-in-a-python-list - start_at = -1 - locs = [] - while True: - try: - loc = seq.index(item, start_at + 1) - except ValueError: - break - else: - locs.append(loc) - start_at = loc - return locs - - -def make_des_config( - commonsense_prob: float, - num_humans: int, - num_total_objects: int, - maximum_num_objects_per_human: int, - maximum_num_locations_per_object: int, - maxiumum_days_period: int, - des_size: str, - last_timestep: int = 128, -) -> dict: - """Make a des config. - - Args - ---- - commonsense_prob: commonsense probability - num_humans: number of humans - num_total_objects: number of total objects - maximum_num_objects_per_human: maximum number of objects per human - maximum_num_locations_per_object: maximum number of locations per object - maxiumum_days_period: maxiumum number of days period - des_size: The size of DES (i.e., "xxs", "xs", "s", "m", "l", "dev") - last_timestep: last time step where the DES terminates. - - Returns - ------- - des config - - """ - des_config = { - "human_names_path": "./room_env/data/human-names", - "last_timestep": last_timestep, - "maxiumum_days_period": maxiumum_days_period, - "save_path": f"./room_env/data/des-config-{des_size}.json", - "seed": 42, - "semantic_knowledge_path": "./room_env/data/semantic-knowledge.json", - } - - des_config["commonsense_prob"] = commonsense_prob - des_config["num_humans"] = num_humans - des_config["num_total_objects"] = num_total_objects - des_config["maximum_num_objects_per_human"] = maximum_num_objects_per_human - des_config["maximum_num_locations_per_object"] = maximum_num_locations_per_object - - return des_config - - -def get_des_variables(des_size: str = "l") -> Tuple[int, int, int]: - """Get the des variables. - - Args - ---- - des_size: The size of DES (i.e., "xxs", "xs", "s", "m", "l", "dev") - - Returns - ------- - capacity, num_humans, num_total_objects - - """ - if des_size == "dev": - capacity = 16 - - elif des_size == "xxs": - capacity = 2 - - elif des_size == "xs": - capacity = 4 - - elif des_size == "s": - capacity = 8 - - elif des_size == "m": - capacity = 16 - - elif des_size == "l": - capacity = 32 - - else: - raise ValueError - - num_humans = capacity * 2 - num_total_objects = capacity // 2 - - return capacity, num_humans, num_total_objects - - -def run_des_seeds( - seeds: list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], - capacity: int = 32, - des_size: str = "l", - allow_random_human: bool = True, - allow_random_question: bool = True, - question_prob: float = 0.1, -) -> dict: - """Run the RoomEnv-v1 with multiple different seeds. - - Args - ---- - seeds: - capacity: - des_size: - allow_random_human: - allow_random_question: - question_prob: - - Returns - ------- - results - - """ - results = {} - how_to_forget = ["episodic", "semantic", "random", "pre_sem"] - - for forget_short in how_to_forget: - - if forget_short == "random": - pretrain_semantic = False - capacity_ = { - "episodic": capacity // 2, - "semantic": capacity // 2, - "short": 1, - } - elif forget_short == "episodic": - pretrain_semantic = False - capacity_ = {"episodic": capacity, "semantic": 0, "short": 1} - elif forget_short == "semantic": - pretrain_semantic = False - capacity_ = {"episodic": 0, "semantic": capacity, "short": 1} - elif forget_short == "pre_sem": - pretrain_semantic = True - capacity_ = { - "episodic": capacity // 2, - "semantic": capacity // 2, - "short": 1, - } - else: - raise ValueError - - results_ = [] - for seed in seeds: - env = gym.make( - "RoomEnv-v1", - des_size=des_size, - seed=seed, - policies={ - "memory_management": "rl", - "question_answer": "episodic_semantic", - "encoding": "argmax", - }, - capacity=capacity_, - question_prob=question_prob, - observation_params="perfect", - allow_random_human=allow_random_human, - allow_random_question=allow_random_question, - pretrain_semantic=pretrain_semantic, - check_resources=False, - varying_rewards=False, - ) - state, info = env.reset() - rewards = 0 - while True: - if forget_short == "random": - action = random.choice([0, 1, 2]) - elif forget_short == "episodic": - action = 0 - elif forget_short == "semantic": - action = 1 - elif forget_short == "pre_sem": - action = 0 - else: - raise ValueError - state, reward, done, truncated, info = env.step(action) - rewards += reward - if done: - break - results_.append(rewards) - - results[forget_short] = np.mean(results_) - - return results - - -def run_all_des_configs( - des_size: str, - capacity: int, - maximum_num_objects_per_human: int, - maximum_num_locations_per_object: int, - maxiumum_days_period: int, - commonsense_prob: float, - num_humans: int, - num_total_objects: int, - seeds: list, - allow_random_human: bool, - allow_random_question: bool, - last_timestep: int, - question_prob: float, -) -> dict: - """Run the RoomEnv-v1 with different des configs, with multiple different seeds. - - Args - ---- - des_size: The size of DES (i.e., "xxs", "xs", "s", "m", "l", "dev") - capacity: int, - maximum_num_objects_per_human: maximum number of objects per human - maximum_num_locations_per_object: maximum number of locations per object - maxiumum_days_period: maxiumum number of days period - commonsense_prob: commonsense probability - num_humans: number of humans - num_total_objects: number of total objects - seeds: list, - allow_random_human: bool, - allow_random_question: bool, - last_timestep: int, - question_prob: float, - - Returns - ------- - results - - """ - des_config = make_des_config( - commonsense_prob=commonsense_prob, - num_humans=num_humans, - num_total_objects=num_total_objects, - maximum_num_objects_per_human=maximum_num_objects_per_human, - maximum_num_locations_per_object=maximum_num_locations_per_object, - maxiumum_days_period=maxiumum_days_period, - des_size=des_size, - last_timestep=last_timestep, - ) - - complexity = ( - num_humans - * num_total_objects - * maximum_num_objects_per_human - * maximum_num_locations_per_object - * maxiumum_days_period - ) - - with open("create_des_config.yaml", "w") as stream: - yaml.safe_dump(des_config, stream, indent=2) - - sub_out = subprocess.call( - ["python", "create_des_config.py"], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - if sub_out == 1: - return None - - rewards = run_des_seeds( - seeds=seeds, - capacity=capacity, - des_size=des_size, - allow_random_human=allow_random_human, - allow_random_question=allow_random_question, - question_prob=question_prob, - ) - results = { - "mean_rewards_diff": rewards["pre_sem"] - - rewards["random"] / 3 - - rewards["semantic"] / 3 - - rewards["episodic"] / 3, - "mean_rewards_episodic": rewards["episodic"], - "mean_rewards_semantic": rewards["semantic"], - "mean_rewards_random": rewards["random"], - "mean_rewards_pre_sem": rewards["pre_sem"], - "complexity": complexity, - "commonsense_prob": commonsense_prob, - "maximum_num_locations_per_object": maximum_num_locations_per_object, - "maximum_num_objects_per_human": maximum_num_objects_per_human, - "num_humans": num_humans, - "num_total_objects": num_total_objects, - "maxiumum_days_period": maxiumum_days_period, - "allow_random_human": allow_random_human, - "allow_random_question": allow_random_question, - "question_prob": question_prob, - } - return deepcopy(results) - - -def fill_des_resources(des_size: str) -> None: - """Fill resources - - Args - ---- - des_size - - """ - des = RoomDes(des_size=des_size, check_resources=False) - des.run() - resources = { - foo: 9999 - for foo in set( - [bar["object_location"] for foo in des.states for bar in foo.values()] - ) - } - des.config["resources"] = deepcopy(resources) - write_json(des.config, f"./room_env/data/des-config-{des_size}.json") - resources = [] - des = RoomDes(des_size=des_size, check_resources=True) - resources.append(deepcopy(des.resources)) - while des.until > 0: - des.step() - des.until -= 1 - resources.append(deepcopy(des.resources)) - - object_locations = deepcopy(list(des.resources.keys())) - resources = { - object_location: 9999 - - min([resource[object_location] for resource in resources]) - for object_location in object_locations - } - - des.config["resources"] = deepcopy(resources) - write_json(des.config, f"./room_env/data/des-config-{des_size}.json") - des = RoomDes(des_size=des_size, check_resources=True) - - -def get_handcrafted( - env: str = "RoomEnv-v1", - des_size: str = "l", - seeds: list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], - question_prob: float = 0.1, - observation_params: str = "perfect", - policies: dict = { - "memory_management": "rl", - "question_answer": "episodic_semantic", - "encoding": "argmax", - }, - capacities: list = [2, 4, 8, 16, 32, 64], - allow_random_human: bool = False, - allow_random_question: bool = True, - varying_rewards: bool = False, - check_resources: bool = True, -) -> None: - """Get the env results with handcrafted policies. - - At the moment only {"memory_management": "rl"} is supported. - - Args - ---- - env: str = "RoomEnv-v1", - des_size: str = "l", - seeds: list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], - question_prob: float = 0.1, - policies: dict = { - "memory_management": "rl", - "question_answer": "episodic_semantic", - "encoding": "argmax", - }, - capacities: list = [2, 4, 8, 16, 32, 64], - allow_random_human: whether to allow random humans to be observed. - allow_random_question: whether to allow random questions to be asked. - varying_rewards: If true, then the rewards are scaled in every episode so that - total_episode_rewards is 128. - - Returns - ------- - handcrafted_results - - """ - how_to_forget = ["episodic", "semantic", "random", "pre_sem"] - env_ = env - handcrafted_results = {} - - for capacity in capacities: - handcrafted_results[capacity] = {} - for forget_short in how_to_forget: - - if forget_short == "random": - pretrain_semantic = False - capacity_ = { - "episodic": capacity // 2, - "semantic": capacity // 2, - "short": 1, - } - elif forget_short == "episodic": - pretrain_semantic = False - capacity_ = {"episodic": capacity, "semantic": 0, "short": 1} - elif forget_short == "semantic": - pretrain_semantic = False - capacity_ = {"episodic": 0, "semantic": capacity, "short": 1} - elif forget_short == "pre_sem": - pretrain_semantic = True - capacity_ = { - "episodic": capacity // 2, - "semantic": capacity // 2, - "short": 1, - } - else: - raise ValueError - - results = [] - for seed in seeds: - env = gym.make( - env_, - des_size=des_size, - seed=seed, - policies=policies, - capacity=capacity_, - question_prob=question_prob, - observation_params=observation_params, - allow_random_human=allow_random_human, - allow_random_question=allow_random_question, - pretrain_semantic=pretrain_semantic, - check_resources=check_resources, - varying_rewards=varying_rewards, - ) - state, info = env.reset() - rewards = 0 - while True: - if forget_short == "random": - action = random.choice([0, 1, 2]) - elif forget_short == "episodic": - action = 0 - elif forget_short == "semantic": - action = 1 - elif forget_short == "pre_sem": - action = 0 - else: - raise ValueError - state, reward, done, truncated, info = env.step(action) - rewards += reward - if done: - break - results.append(rewards) - - mean_ = np.mean(results).round(3).item() - std_ = np.std(results).round(3).item() - handcrafted_results[capacity][forget_short] = {"mean": mean_, "std": std_} - - return handcrafted_results diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index f9f84b2..0000000 --- a/setup.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[metadata] -name = room_env -version = 1.0.2 -author = Taewoon Kim -author_email = tae898@gmail.com -description = The Room environment -long_description = file: README.md -long_description_content_type = text/markdown -url = https://github.com/tae898/room-env -project_urls = - Bug Tracker = https://github.com/tae898/room-env/issues -classifiers = - Programming Language :: Python :: 3 - License :: OSI Approved :: MIT License - Operating System :: OS Independent - -[options] -packages = find: -python_requires = >=3.8 -install_requires= - gymnasium>=0.27.1 - torch>=1.12.1 - PyYAML>=6.0 - tqdm - -[options.package_data] -* = data/* diff --git a/setup.py b/setup.py deleted file mode 100644 index 7f1a176..0000000 --- a/setup.py +++ /dev/null @@ -1,4 +0,0 @@ -from setuptools import setup - -if __name__ == "__main__": - setup() diff --git a/test/test_des.py b/test/test_des.py deleted file mode 100644 index db11c96..0000000 --- a/test/test_des.py +++ /dev/null @@ -1,10 +0,0 @@ -import unittest - -from room_env.des import RoomDes - - -class DesTest(unittest.TestCase): - def test_all(self) -> None: - for des_size in ["xxs", "xs", "s", "m", "l"]: - des = RoomDes(des_size=des_size) - des.run() diff --git a/test/test_memory.py b/test/test_memory.py deleted file mode 100644 index 5d6f184..0000000 --- a/test/test_memory.py +++ /dev/null @@ -1,11 +0,0 @@ -import unittest - -from room_env.memory import EpisodicMemory, Memory, SemanticMemory, ShortMemory - - -class MemoryTest(unittest.TestCase): - def test_all(self) -> None: - for capacity in [1, 2, 4, 8, 16, 32]: - m = EpisodicMemory(capacity=capacity) - m = SemanticMemory(capacity=capacity) - m = ShortMemory(capacity=capacity) diff --git a/test/test_policy.py b/test/test_policy.py deleted file mode 100644 index 8525115..0000000 --- a/test/test_policy.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest - -from room_env.memory import EpisodicMemory, Memory, SemanticMemory, ShortMemory -from room_env.policy import answer_question, encode_observation, manage_memory - - -class PolicyTest(unittest.TestCase): - def setUp(self) -> None: - self.memory_systems = { - "short": ShortMemory(capacity=1), - "episodic": EpisodicMemory(capacity=16), - "semantic": SemanticMemory(capacity=16), - } - - def test_encode_observation(self): - with self.assertRaises(NotImplementedError): - encode_observation( - memory_systems=self.memory_systems, - policy="foo", - obs={"human": "Tae", "object": "Ubuntu", "object_location": "Linux"}, - ) - - def test_manage_memory(self): - with self.assertRaises(NotImplementedError): - manage_memory(memory_systems=self.memory_systems, policy="neural") - - def test_answer_question(self): - with self.assertRaises(NotImplementedError): - answer_question( - memory_systems=self.memory_systems, - policy="neural", - question={"human": "Tae", "object": "Ubuntu"}, - ) diff --git a/test/test_room_env_v0.py b/test/test_room_env_v0.py deleted file mode 100644 index a354647..0000000 --- a/test/test_room_env_v0.py +++ /dev/null @@ -1,16 +0,0 @@ -import unittest - -import gymnasium as gym - -import room_env - - -class RoomEnv1Test(unittest.TestCase): - def test_all(self) -> None: - for room_size in ["small", "big"]: - env = gym.make("RoomEnv-v0", room_size=room_size) - observations, info = env.reset() - while True: - observations, reward, done, truncated, info = env.step("foo") - if done: - break diff --git a/test/test_room_env_v1.py b/test/test_room_env_v1.py deleted file mode 100644 index 86351dd..0000000 --- a/test/test_room_env_v1.py +++ /dev/null @@ -1,163 +0,0 @@ -import logging -import random -import unittest - -import gymnasium as gym - -import room_env - -logger = logging.getLogger() -logger.disabled = True - - -class RoomEnv1Test(unittest.TestCase): - def test_all(self) -> None: - for des_size in ["xxs", "xs", "s", "m", "l"]: - for question_prob in [0.1, 0.2, 0.4, 1]: - for allow_random_human in [True, False]: - for allow_random_question in [True, False]: - for pretrain_semantic in [True, False]: - for check_resources in [True, False]: - for varying_rewards in [True, False]: - env = gym.make( - "RoomEnv-v1", - des_size=des_size, - question_prob=question_prob, - allow_random_human=allow_random_human, - allow_random_question=allow_random_question, - pretrain_semantic=pretrain_semantic, - check_resources=check_resources, - varying_rewards=varying_rewards, - ) - state, info = env.reset() - while True: - ( - state, - reward, - done, - truncated, - info, - ) = env.step(random.randint(0, 2)) - if done: - break - - def test_wrong_init0(self) -> None: - - with self.assertRaises(AssertionError): - env = gym.make( - "RoomEnv-v1", - policies={ - "memory_management": "RL", - "question_answer": "RL", - "encoding": "argmax", - }, - ) - del env - - def test_wrong_init1(self) -> None: - - with self.assertRaises(NotImplementedError): - env = gym.make( - "RoomEnv-v1", - policies={ - "memory_management": "episodic", - "question_answer": "episodic", - "encoding": "rl", - }, - ) - del env - - def test_wrong_init2(self) -> None: - - with self.assertRaises(NotImplementedError): - env = gym.make("RoomEnv-v1", observation_params="foo") - state, info = env.reset() - del env - - def test_rewards(self) -> None: - env = gym.make( - "RoomEnv-v1", - policies={ - "memory_management": "RL", - "question_answer": "episodic_semantic", - "encoding": "argmax", - }, - seed=random.randint(0, 10000), - question_prob=0.1, - capacity={"episodic": 16, "semantic": 16, "short": 1}, - varying_rewards=True, - ) - state, info = env.reset() - self.assertAlmostEqual( - env.total_episode_rewards, env.CORRECT * env.num_questions - ) - - def test_reset_qa(self) -> None: - for memory_management in ["episodic", "semantic"]: - env = gym.make( - "RoomEnv-v1", - policies={ - "memory_management": memory_management, - "question_answer": "rl", - "encoding": "argmax", - }, - seed=random.randint(0, 10000), - question_prob=0.1, - capacity={"episodic": 16, "semantic": 16, "short": 1}, - ) - state, info = env.reset() - self.assertIn("memory_systems", state) - self.assertIn("question", state) - - self.assertIn("episodic", state["memory_systems"]) - self.assertIn("semantic", state["memory_systems"]) - self.assertIn("short", state["memory_systems"]) - self.assertIn("question", state) - - if memory_management == "semantic": - self.assertGreater(len(state["memory_systems"]["semantic"]), 0) - self.assertEqual(len(state["memory_systems"]["episodic"]), 0) - - else: - self.assertEqual(len(state["memory_systems"]["semantic"]), 0) - self.assertGreater(len(state["memory_systems"]["episodic"]), 0) - - self.assertEqual(len(state["memory_systems"]["short"]), 0) - - while True: - state, reward, done, truncated, info = env.step(random.randint(0, 1)) - if done: - break - self.assertIn("episodic", state["memory_systems"]) - self.assertIn("semantic", state["memory_systems"]) - self.assertIn("short", state["memory_systems"]) - self.assertIn("question", state) - - def test_reset_memory_management(self) -> None: - for qa_policy in ["episodic", "semantic", "episodic_semantic"]: - env = gym.make( - "RoomEnv-v1", - policies={ - "memory_management": "rl", - "question_answer": qa_policy, - "encoding": "argmax", - }, - seed=random.randint(0, 10000), - question_prob=0.1, - capacity={"episodic": 16, "semantic": 16, "short": 1}, - ) - state, info = env.reset() - self.assertIn("episodic", state) - self.assertIn("semantic", state) - self.assertIn("short", state) - - self.assertEqual(len(state["semantic"]), 0) - self.assertEqual(len(state["episodic"]), 0) - self.assertEqual(len(state["short"]), 1) - while True: - state, reward, done, truncated, info = env.step(random.randint(0, 2)) - if done: - break - self.assertIn("episodic", state) - self.assertIn("semantic", state) - self.assertIn("short", state) diff --git a/test/test_utils.py b/test/test_utils.py deleted file mode 100644 index e4a6506..0000000 --- a/test/test_utils.py +++ /dev/null @@ -1,18 +0,0 @@ -import unittest - -from room_env.utils import argmax, get_duplicate_dicts, list_duplicates_of - - -class UtilsTest(unittest.TestCase): - def test_argmax(self): - self.assertEqual(argmax([6, 1, 2, 3, 4, 5]), 0) - - def test_get_duplicate_dicts(self): - foo = get_duplicate_dicts({"foo": 1}, [{"foo": 1}, {"bar": 2}, {"foo": 1}]) - self.assertEqual(foo, [{"foo": 1}, {"foo": 1}]) - - def test_list_duplicates_of(self): - foo = list_duplicates_of( - [{"foo": 1}, {"bar": 2}, {"foo": 2}, {"foo": 1}], {"foo": 1} - ) - self.assertEqual(foo, [0, 3])