diff --git a/.circleci/config.yml b/.circleci/config.yml index c753662a7f..96402b9413 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: - run: name: setup command: | - sudo pip install black "isort[pyproject]" numpy --progress-bar off + sudo pip install black flake8 "isort[pyproject]" numpy --progress-bar off sudo pip install -r requirements.txt --progress-bar off - run: name: run black @@ -26,9 +26,13 @@ jobs: name: run isort command: | isort --version - isort -rc habitat/. habitat_baselines/. examples/. test/. setup.py --diff - isort -rc habitat/. habitat_baselines/. examples/. test/. setup.py --check-only - + isort habitat/. habitat_baselines/. examples/. test/. setup.py --diff + isort habitat/. habitat_baselines/. examples/. test/. setup.py --check-only + - run: + name: run flake8 + command: | + flake8 --version + flake8 habitat/. habitat_baselines/. examples/. tests/. setup.py install_and_test_ubuntu: <<: *gpu steps: diff --git a/.editorconfig b/.editorconfig index b910f1829c..86817b22fb 100644 --- a/.editorconfig +++ b/.editorconfig @@ -20,4 +20,3 @@ include_trailing_comma = true ensure_newline_before_comments=true use_parentheses = true known_first_party = habitat,habitat_sim,habitat_baselines,version -known_third_party = PIL,attr,conf,cv2,git,gym,ifcfg,imageio,magnum,matplotlib,mock,numba,numpy,orbslam2,pyrobot,pytest,quaternion,requests,scipy,setuptools,torch,torchvision,tqdm,yacs diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3676801f6f..d4a38150a2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,14 +20,8 @@ repos: - id: mixed-line-ending args: ['--fix=lf'] -- repo: https://github.com/asottile/seed-isort-config - rev: v2.2.0 - hooks: - - id: seed-isort-config - language_version: python3 - -- repo: https://github.com/pre-commit/mirrors-isort - rev: v5.0.7 +- repo: https://github.com/timothycrosley/isort + rev: 5.4.2 hooks: - id: isort exclude: docs/ @@ -43,9 +37,14 @@ repos: rev: master hooks: - id: autoflake - args: ['--expand-star-imports', '--ignore-init-module-imports', '--in-place'] + args: ['--expand-star-imports', '--ignore-init-module-imports', '--in-place', '-c'] exclude: docs/ +- repo: https://gitlab.com/pycqa/flake8 + rev: 3.8.3 + hooks: + - id: flake8 + - repo: https://github.com/kynan/nbstripout rev: master hooks: diff --git a/examples/example.py b/examples/example.py index f8fa32057a..e509309d06 100644 --- a/examples/example.py +++ b/examples/example.py @@ -14,12 +14,12 @@ def example(): config=habitat.get_config("configs/tasks/pointnav.yaml") ) as env: print("Environment creation successful") - observations = env.reset() + observations = env.reset() # noqa: F841 print("Agent stepping around inside environment.") count_steps = 0 while not env.episode_over: - observations = env.step(env.action_space.sample()) + observations = env.step(env.action_space.sample()) # noqa: F841 count_steps += 1 print("Episode finished after {} steps.".format(count_steps)) diff --git a/examples/tutorials/colabs/Habitat_Interactive_Tasks.ipynb b/examples/tutorials/colabs/Habitat_Interactive_Tasks.ipynb index 99f29319b7..f954e51c52 100644 --- a/examples/tutorials/colabs/Habitat_Interactive_Tasks.ipynb +++ b/examples/tutorials/colabs/Habitat_Interactive_Tasks.ipynb @@ -68,9 +68,7 @@ "import gzip\n", "import json\n", "import os\n", - "import random\n", "import sys\n", - "import time\n", "from typing import Any, Dict, List, Optional, Type\n", "\n", "import attr\n", @@ -87,7 +85,6 @@ "import habitat_sim\n", "from habitat.config import Config\n", "from habitat.core.registry import registry\n", - "from habitat_sim.utils import common as ut\n", "from habitat_sim.utils import viz_utils as vut\n", "\n", "if \"google.colab\" in sys.modules:\n", @@ -145,10 +142,6 @@ " video_file = output_path + prefix + \".mp4\"\n", " print(\"Encoding the video: %s \" % video_file)\n", " writer = vut.get_fast_video_writer(video_file, fps=fps)\n", - " thumb_size = (int(videodims[0] / 5), int(videodims[1] / 5))\n", - " outline_frame = (\n", - " np.ones((thumb_size[1] + 2, thumb_size[0] + 2, 3), np.uint8) * 150\n", - " )\n", " for ob in observations:\n", " # If in RGB/RGBA format, remove the alpha channel\n", " rgb_im_1st_person = cv2.cvtColor(ob[\"rgb\"], cv2.COLOR_RGBA2RGB)\n", @@ -815,7 +808,7 @@ " sim, \"rgb\", crosshair_pos=[128, 190], max_distance=1.0\n", " )\n", " print(f\"Closest Object ID: {closest_object} using 1.0 threshold\")\n", - " assert closest_object == -1, f\"Agent shoud not be able to pick any object\"" + " assert closest_object == -1, \"Agent shoud not be able to pick any object\"" ] }, { @@ -1129,7 +1122,6 @@ "from habitat.core.embodied_task import Measure\n", "from habitat.core.simulator import Observations, Sensor, SensorTypes, Simulator\n", "from habitat.tasks.nav.nav import PointGoalSensor\n", - "from habitat_sim.utils.common import quat_from_magnum\n", "\n", "\n", "@registry.register_sensor\n", @@ -1493,7 +1485,6 @@ "# @markdown - The agent gets a slack penalty of -0.01 for every action it takes in the environment.\n", "# @markdown - Finally the agent gets a large success reward when the episode is completed successfully.\n", "\n", - "from collections import defaultdict\n", "from typing import Optional, Type\n", "\n", "import numpy as np\n", @@ -1680,15 +1671,12 @@ "from typing import Any, Dict, List, Optional\n", "\n", "import numpy as np\n", - "import torch\n", "from torch.optim.lr_scheduler import LambdaLR\n", "\n", "from habitat import Config, logger\n", - "from habitat.core.vector_env import ThreadedVectorEnv\n", "from habitat.utils.visualizations.utils import observations_to_image\n", - "from habitat_baselines.common.base_trainer import BaseRLTrainer\n", "from habitat_baselines.common.baseline_registry import baseline_registry\n", - "from habitat_baselines.common.env_utils import construct_envs, make_env_fn\n", + "from habitat_baselines.common.env_utils import make_env_fn\n", "from habitat_baselines.common.environments import get_env_class\n", "from habitat_baselines.common.rollout_storage import RolloutStorage\n", "from habitat_baselines.common.tensorboard_utils import TensorboardWriter\n", @@ -1698,7 +1686,7 @@ " linear_decay,\n", ")\n", "from habitat_baselines.rl.models.rnn_state_encoder import RNNStateEncoder\n", - "from habitat_baselines.rl.ppo import PPO, PointNavBaselinePolicy\n", + "from habitat_baselines.rl.ppo import PPO\n", "from habitat_baselines.rl.ppo.policy import Net, Policy\n", "from habitat_baselines.rl.ppo.ppo_trainer import PPOTrainer\n", "\n", @@ -1721,7 +1709,7 @@ " num_processes = config.NUM_PROCESSES\n", " configs = []\n", " env_classes = [env_class for _ in range(num_processes)]\n", - " dataset = make_dataset(config.TASK_CONFIG.DATASET.TYPE)\n", + " dataset = habitat.datasets.make_dataset(config.TASK_CONFIG.DATASET.TYPE)\n", " scenes = config.TASK_CONFIG.DATASET.CONTENT_SCENES\n", " if \"*\" in config.TASK_CONFIG.DATASET.CONTENT_SCENES:\n", " scenes = dataset.get_scenes_to_load(config.TASK_CONFIG.DATASET)\n", @@ -2160,8 +2148,7 @@ "import torch\n", "\n", "import habitat\n", - "from habitat import Config, Env, RLEnv, VectorEnv, make_dataset\n", - "from habitat.config import get_config\n", + "from habitat import Config\n", "from habitat_baselines.config.default import get_config as get_baseline_config\n", "\n", "baseline_config = get_baseline_config(\n", diff --git a/examples/tutorials/nb_python/Habitat_Interactive_Tasks.py b/examples/tutorials/nb_python/Habitat_Interactive_Tasks.py index 19cee826ec..b0e0cd8671 100644 --- a/examples/tutorials/nb_python/Habitat_Interactive_Tasks.py +++ b/examples/tutorials/nb_python/Habitat_Interactive_Tasks.py @@ -71,9 +71,7 @@ import gzip import json import os -import random import sys -import time from typing import Any, Dict, List, Optional, Type import attr @@ -90,7 +88,6 @@ import habitat_sim from habitat.config import Config from habitat.core.registry import registry -from habitat_sim.utils import common as ut from habitat_sim.utils import viz_utils as vut if "google.colab" in sys.modules: @@ -141,10 +138,6 @@ def make_video_cv2( video_file = output_path + prefix + ".mp4" print("Encoding the video: %s " % video_file) writer = vut.get_fast_video_writer(video_file, fps=fps) - thumb_size = (int(videodims[0] / 5), int(videodims[1] / 5)) - outline_frame = ( - np.ones((thumb_size[1] + 2, thumb_size[0] + 2, 3), np.uint8) * 150 - ) for ob in observations: # If in RGB/RGBA format, remove the alpha channel rgb_im_1st_person = cv2.cvtColor(ob["rgb"], cv2.COLOR_RGBA2RGB) @@ -749,7 +742,7 @@ def raycast(sim, sensor_name, crosshair_pos=[128, 128], max_distance=2.0): sim, "rgb", crosshair_pos=[128, 190], max_distance=1.0 ) print(f"Closest Object ID: {closest_object} using 1.0 threshold") - assert closest_object == -1, f"Agent shoud not be able to pick any object" + assert closest_object == -1, "Agent shoud not be able to pick any object" # %% @@ -1039,7 +1032,6 @@ def step(self, action: int): from habitat.core.embodied_task import Measure from habitat.core.simulator import Observations, Sensor, SensorTypes, Simulator from habitat.tasks.nav.nav import PointGoalSensor -from habitat_sim.utils.common import quat_from_magnum @registry.register_sensor @@ -1383,7 +1375,6 @@ def print_info(obs, metrics): # @markdown - The agent gets a slack penalty of -0.01 for every action it takes in the environment. # @markdown - Finally the agent gets a large success reward when the episode is completed successfully. -from collections import defaultdict from typing import Optional, Type import numpy as np @@ -1565,15 +1556,12 @@ def get_info(self, observations): from typing import Any, Dict, List, Optional import numpy as np -import torch from torch.optim.lr_scheduler import LambdaLR from habitat import Config, logger -from habitat.core.vector_env import ThreadedVectorEnv from habitat.utils.visualizations.utils import observations_to_image -from habitat_baselines.common.base_trainer import BaseRLTrainer from habitat_baselines.common.baseline_registry import baseline_registry -from habitat_baselines.common.env_utils import construct_envs, make_env_fn +from habitat_baselines.common.env_utils import make_env_fn from habitat_baselines.common.environments import get_env_class from habitat_baselines.common.rollout_storage import RolloutStorage from habitat_baselines.common.tensorboard_utils import TensorboardWriter @@ -1583,7 +1571,7 @@ def get_info(self, observations): linear_decay, ) from habitat_baselines.rl.models.rnn_state_encoder import RNNStateEncoder -from habitat_baselines.rl.ppo import PPO, PointNavBaselinePolicy +from habitat_baselines.rl.ppo import PPO from habitat_baselines.rl.ppo.policy import Net, Policy from habitat_baselines.rl.ppo.ppo_trainer import PPOTrainer @@ -1606,7 +1594,7 @@ def construct_envs( num_processes = config.NUM_PROCESSES configs = [] env_classes = [env_class for _ in range(num_processes)] - dataset = make_dataset(config.TASK_CONFIG.DATASET.TYPE) + dataset = habitat.datasets.make_dataset(config.TASK_CONFIG.DATASET.TYPE) scenes = config.TASK_CONFIG.DATASET.CONTENT_SCENES if "*" in config.TASK_CONFIG.DATASET.CONTENT_SCENES: scenes = dataset.get_scenes_to_load(config.TASK_CONFIG.DATASET) @@ -2034,8 +2022,7 @@ def eval(self) -> None: import torch import habitat -from habitat import Config, Env, RLEnv, VectorEnv, make_dataset -from habitat.config import get_config +from habitat import Config from habitat_baselines.config.default import get_config as get_baseline_config baseline_config = get_baseline_config( diff --git a/examples/vln_benchmark.py b/examples/vln_benchmark.py index f500266249..17b2b3feaa 100644 --- a/examples/vln_benchmark.py +++ b/examples/vln_benchmark.py @@ -6,6 +6,7 @@ import argparse from collections import defaultdict +from typing import Dict import habitat from habitat.config.default import get_config diff --git a/habitat/__init__.py b/habitat/__init__.py index a37e4dc415..5c90fbd9c9 100644 --- a/habitat/__init__.py +++ b/habitat/__init__.py @@ -12,7 +12,7 @@ from habitat.core.embodied_task import EmbodiedTask, Measure, Measurements from habitat.core.env import Env, RLEnv from habitat.core.logging import logger -from habitat.core.registry import registry +from habitat.core.registry import registry # noqa : F401 from habitat.core.simulator import Sensor, SensorSuite, SensorTypes, Simulator from habitat.core.vector_env import ThreadedVectorEnv, VectorEnv from habitat.datasets import make_dataset diff --git a/habitat/core/benchmark.py b/habitat/core/benchmark.py index 1449310f6a..77b500ee4e 100644 --- a/habitat/core/benchmark.py +++ b/habitat/core/benchmark.py @@ -46,7 +46,7 @@ def remote_evaluate( import pickle import time - import evalai_environment_habitat + import evalai_environment_habitat # noqa: F401 import evaluation_pb2 import evaluation_pb2_grpc import grpc diff --git a/habitat/core/embodied_task.py b/habitat/core/embodied_task.py index 604d8e71e7..04c9bb49d0 100644 --- a/habitat/core/embodied_task.py +++ b/habitat/core/embodied_task.py @@ -320,7 +320,7 @@ def step(self, action: Union[int, Dict[str, Any]], episode: Type[Episode]): def get_action_name(self, action_index: int): if action_index >= len(self.actions): - raise ValueError(f"Action index '{action}' is out of range.") + raise ValueError(f"Action index '{action_index}' is out of range.") return self._action_keys[action_index] @property diff --git a/habitat/core/utils.py b/habitat/core/utils.py index 33d26e09bb..ac378ada9c 100644 --- a/habitat/core/utils.py +++ b/habitat/core/utils.py @@ -4,11 +4,12 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +import cmath import json from typing import List import numpy as np -import quaternion +import quaternion # noqa: F401 from habitat.utils.geometry_utils import quaternion_to_list @@ -148,7 +149,7 @@ def floatstr( _inf=float("inf"), _neginf=-float("inf"), ): - if o != o: + if cmath.isnan(o): text = "NaN" elif o == _inf: text = "Infinity" diff --git a/habitat/datasets/__init__.py b/habitat/datasets/__init__.py index b0b567fbce..ccdd0c9ee9 100644 --- a/habitat/datasets/__init__.py +++ b/habitat/datasets/__init__.py @@ -4,4 +4,4 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from habitat.datasets.registration import make_dataset +from habitat.datasets.registration import make_dataset # noqa: F401 . diff --git a/habitat/datasets/eqa/__init__.py b/habitat/datasets/eqa/__init__.py index 872c0a5afe..cad568273d 100644 --- a/habitat/datasets/eqa/__init__.py +++ b/habitat/datasets/eqa/__init__.py @@ -10,17 +10,12 @@ def _try_register_mp3d_eqa_dataset(): try: - from habitat.datasets.eqa.mp3d_eqa_dataset import Matterport3dDatasetV1 - - has_mp3deqa = True + from habitat.datasets.eqa.mp3d_eqa_dataset import ( # noqa: F401 isort:skip + Matterport3dDatasetV1, + ) except ImportError as e: - has_mp3deqa = False mp3deqa_import_error = e - if has_mp3deqa: - from habitat.datasets.eqa.mp3d_eqa_dataset import Matterport3dDatasetV1 - else: - @registry.register_dataset(name="MP3DEQA-v1") class Matterport3dDatasetImportError(Dataset): def __init__(self, *args, **kwargs): diff --git a/habitat/datasets/eqa/mp3d_eqa_dataset.py b/habitat/datasets/eqa/mp3d_eqa_dataset.py index 0b9f862818..39b5b96702 100644 --- a/habitat/datasets/eqa/mp3d_eqa_dataset.py +++ b/habitat/datasets/eqa/mp3d_eqa_dataset.py @@ -13,7 +13,7 @@ from habitat.core.dataset import Dataset from habitat.core.registry import registry from habitat.core.simulator import AgentState -from habitat.datasets.utils import VocabDict, VocabFromText +from habitat.datasets.utils import VocabDict from habitat.tasks.eqa.eqa import EQAEpisode, QuestionData from habitat.tasks.nav.nav import ShortestPathPoint from habitat.tasks.nav.object_nav_task import ObjectGoal diff --git a/habitat/datasets/object_nav/__init__.py b/habitat/datasets/object_nav/__init__.py index afec166586..b7e831d476 100644 --- a/habitat/datasets/object_nav/__init__.py +++ b/habitat/datasets/object_nav/__init__.py @@ -17,21 +17,13 @@ # Post that PR we would no longer need try register blocks. def _try_register_objectnavdatasetv1(): try: - from habitat.datasets.object_nav.object_nav_dataset import ( + from habitat.datasets.object_nav.object_nav_dataset import ( # noqa: F401 ObjectNavDatasetV1, ) - has_pointnav = True except ImportError as e: - has_pointnav = False pointnav_import_error = e - if has_pointnav: - from habitat.datasets.object_nav.object_nav_dataset import ( - ObjectNavDatasetV1, - ) - else: - @registry.register_dataset(name="ObjectNav-v1") class ObjectNavDatasetImportError(Dataset): def __init__(self, *args, **kwargs): diff --git a/habitat/datasets/pointnav/__init__.py b/habitat/datasets/pointnav/__init__.py index 5d3980f8c8..e347e04789 100644 --- a/habitat/datasets/pointnav/__init__.py +++ b/habitat/datasets/pointnav/__init__.py @@ -17,21 +17,13 @@ # Post that PR we would no longer need try register blocks. def _try_register_pointnavdatasetv1(): try: - from habitat.datasets.pointnav.pointnav_dataset import ( + from habitat.datasets.pointnav.pointnav_dataset import ( # noqa: F401 PointNavDatasetV1, ) - has_pointnav = True except ImportError as e: - has_pointnav = False pointnav_import_error = e - if has_pointnav: - from habitat.datasets.pointnav.pointnav_dataset import ( - PointNavDatasetV1, - ) - else: - @registry.register_dataset(name="PointNav-v1") class PointnavDatasetImportError(Dataset): def __init__(self, *args, **kwargs): diff --git a/habitat/datasets/utils.py b/habitat/datasets/utils.py index 4010a8c632..773f8ffbcf 100644 --- a/habitat/datasets/utils.py +++ b/habitat/datasets/utils.py @@ -3,7 +3,10 @@ # Copyright (c) Facebook, Inc. and its affiliates. # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. - +""" + Tokenize and vocabulary utils originally authored by @apsdehal and are + taken from Pythia. +""" import re from collections import Counter from typing import List @@ -16,11 +19,6 @@ SENTENCE_SPLIT_REGEX = re.compile(r"([^\w-]+)") -""" - Tokenize and vocabulary utils originally authored by @apsdehal and are - taken from Pythia. -""" - def tokenize( sentence, regex=SENTENCE_SPLIT_REGEX, keep=["'s"], remove=[",", "?"] @@ -158,8 +156,7 @@ def __init__( if only_unk_extra: extras = [self.UNK_TOKEN] - self.word_list = extras + token_list - self._build() + super(VocabFromText, self).__init__(word_list=extras + token_list) def get_action_shortest_path( diff --git a/habitat/datasets/vln/__init__.py b/habitat/datasets/vln/__init__.py index d416161c71..3d94cd4796 100644 --- a/habitat/datasets/vln/__init__.py +++ b/habitat/datasets/vln/__init__.py @@ -10,17 +10,12 @@ def _try_register_r2r_vln_dataset(): try: - from habitat.datasets.vln.r2r_vln_dataset import VLNDatasetV1 - - has_r2r_vln = True + from habitat.datasets.vln.r2r_vln_dataset import ( # noqa: F401 isort:skip + VLNDatasetV1, + ) except ImportError as e: - has_r2r_vln = False r2r_vln_import_error = e - if has_r2r_vln: - from habitat.datasets.vln.r2r_vln_dataset import VLNDatasetV1 - else: - @registry.register_dataset(name="R2RVLN-v1") class R2RDatasetImportError(Dataset): def __init__(self, *args, **kwargs): diff --git a/habitat/sims/__init__.py b/habitat/sims/__init__.py index 255612702b..c450f1c2d6 100644 --- a/habitat/sims/__init__.py +++ b/habitat/sims/__init__.py @@ -4,4 +4,4 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from habitat.sims.registration import make_sim +from habitat.sims.registration import make_sim # noqa: F401 diff --git a/habitat/sims/habitat_simulator/__init__.py b/habitat/sims/habitat_simulator/__init__.py index 46cf7fca4f..7facf8a21d 100644 --- a/habitat/sims/habitat_simulator/__init__.py +++ b/habitat/sims/habitat_simulator/__init__.py @@ -8,7 +8,7 @@ def _try_register_habitat_sim(): try: - import habitat_sim + import habitat_sim # noqa: F401 has_habitat_sim = True except ImportError as e: @@ -16,10 +16,9 @@ def _try_register_habitat_sim(): habitat_sim_import_error = e if has_habitat_sim: - from habitat.sims.habitat_simulator.actions import ( + from habitat.sims.habitat_simulator.actions import ( # noqa: F401 HabitatSimV1ActionSpaceConfiguration, ) - from habitat.sims.habitat_simulator.habitat_simulator import HabitatSim else: @registry.register_simulator(name="Sim-v0") diff --git a/habitat/sims/habitat_simulator/actions.py b/habitat/sims/habitat_simulator/actions.py index 16945503f3..e1cdfc2221 100644 --- a/habitat/sims/habitat_simulator/actions.py +++ b/habitat/sims/habitat_simulator/actions.py @@ -11,7 +11,7 @@ import habitat_sim from habitat.core.registry import registry -from habitat.core.simulator import ActionSpaceConfiguration, Config +from habitat.core.simulator import ActionSpaceConfiguration from habitat.core.utils import Singleton diff --git a/habitat/sims/habitat_simulator/habitat_simulator.py b/habitat/sims/habitat_simulator/habitat_simulator.py index 8c81fb04c5..9e376808fb 100644 --- a/habitat/sims/habitat_simulator/habitat_simulator.py +++ b/habitat/sims/habitat_simulator/habitat_simulator.py @@ -11,7 +11,6 @@ import habitat_sim from habitat.core.dataset import Episode -from habitat.core.logging import logger from habitat.core.registry import registry from habitat.core.simulator import ( AgentState, diff --git a/habitat/sims/pyrobot/__init__.py b/habitat/sims/pyrobot/__init__.py index 0fa099dcee..8106f7b2ac 100644 --- a/habitat/sims/pyrobot/__init__.py +++ b/habitat/sims/pyrobot/__init__.py @@ -10,7 +10,7 @@ def _try_register_pyrobot(): try: - import pyrobot + import pyrobot # noqa: F401 has_pyrobot = True except ImportError as e: @@ -18,7 +18,7 @@ def _try_register_pyrobot(): pyrobot_import_error = e if has_pyrobot: - from habitat.sims.pyrobot.pyrobot import PyRobot + from habitat.sims.pyrobot.pyrobot import PyRobot # noqa: F401 else: @registry.register_simulator(name="PyRobot-v0") diff --git a/habitat/sims/pyrobot/pyrobot.py b/habitat/sims/pyrobot/pyrobot.py index aa20e0c0dc..13b10db6bc 100644 --- a/habitat/sims/pyrobot/pyrobot.py +++ b/habitat/sims/pyrobot/pyrobot.py @@ -191,8 +191,6 @@ def __init__(self, config: Config) -> None: ), "Invalid robot type {}".format(self._config.ROBOT) self._robot_config = getattr(self._config, self._config.ROBOT.upper()) - action_spaces_dict = {} - self._action_space = self._robot_action_space( self._config.ROBOT, self._robot_config ) diff --git a/habitat/tasks/__init__.py b/habitat/tasks/__init__.py index 8a0437e902..95996cdff2 100644 --- a/habitat/tasks/__init__.py +++ b/habitat/tasks/__init__.py @@ -4,4 +4,4 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from habitat.tasks.registration import make_task +from habitat.tasks.registration import make_task # noqa: F401 diff --git a/habitat/tasks/eqa/__init__.py b/habitat/tasks/eqa/__init__.py index 2f85a59e28..11dd265494 100644 --- a/habitat/tasks/eqa/__init__.py +++ b/habitat/tasks/eqa/__init__.py @@ -10,17 +10,10 @@ def _try_register_eqa_task(): try: - from habitat.tasks.eqa.eqa import EQATask - - has_eqatask = True + from habitat.tasks.eqa.eqa import EQATask # noqa: F401 except ImportError as e: - has_eqatask = False eqatask_import_error = e - if has_eqatask: - from habitat.tasks.eqa.eqa import EQATask - else: - @registry.register_task(name="EQA-v0") class EQATaskImportError(EmbodiedTask): def __init__(self, *args, **kwargs): diff --git a/habitat/tasks/nav/__init__.py b/habitat/tasks/nav/__init__.py index f12cc41ecc..a3abbec0f4 100644 --- a/habitat/tasks/nav/__init__.py +++ b/habitat/tasks/nav/__init__.py @@ -10,17 +10,10 @@ def _try_register_nav_task(): try: - from habitat.tasks.nav.nav import NavigationTask - - has_navtask = True + from habitat.tasks.nav.nav import NavigationTask # noqa except ImportError as e: - has_navtask = False navtask_import_error = e - if has_navtask: - from habitat.tasks.nav.nav import NavigationTask - else: - @registry.register_task(name="Nav-v0") class NavigationTaskImportError(EmbodiedTask): def __init__(self, *args, **kwargs): diff --git a/habitat/tasks/vln/__init__.py b/habitat/tasks/vln/__init__.py index c3eff70cfc..3d5e9f5224 100644 --- a/habitat/tasks/vln/__init__.py +++ b/habitat/tasks/vln/__init__.py @@ -10,17 +10,10 @@ def _try_register_vln_task(): try: - from habitat.tasks.vln.vln import VLNTask - - has_vlntask = True + from habitat.tasks.vln.vln import VLNTask # noqa: F401 except ImportError as e: - has_vlntask = False vlntask_import_error = e - if has_vlntask: - from habitat.tasks.vln.vln import VLNTask - else: - @registry.register_task(name="VLN-v0") class VLNTaskImportError(EmbodiedTask): def __init__(self, *args, **kwargs): diff --git a/habitat/utils/__init__.py b/habitat/utils/__init__.py index 49c8ba90f9..1b401e1e57 100644 --- a/habitat/utils/__init__.py +++ b/habitat/utils/__init__.py @@ -3,6 +3,5 @@ # Copyright (c) Facebook, Inc. and its affiliates. # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from habitat.utils import geometry_utils __all__ = ["visualizations", "geometry_utils"] diff --git a/habitat_baselines/__init__.py b/habitat_baselines/__init__.py index a5d02f3e55..2e4d20dabd 100644 --- a/habitat_baselines/__init__.py +++ b/habitat_baselines/__init__.py @@ -5,7 +5,7 @@ # LICENSE file in the root directory of this source tree. from habitat_baselines.common.base_trainer import BaseRLTrainer, BaseTrainer -from habitat_baselines.rl.ddppo import DDPPOTrainer +from habitat_baselines.rl.ddppo import DDPPOTrainer # noqa: F401 from habitat_baselines.rl.ppo.ppo_trainer import PPOTrainer, RolloutStorage __all__ = ["BaseTrainer", "BaseRLTrainer", "PPOTrainer", "RolloutStorage"] diff --git a/habitat_baselines/agents/ppo_agents.py b/habitat_baselines/agents/ppo_agents.py index ae5765d20a..a066dbbf17 100644 --- a/habitat_baselines/agents/ppo_agents.py +++ b/habitat_baselines/agents/ppo_agents.py @@ -14,7 +14,6 @@ import habitat from habitat.config import Config -from habitat.config.default import get_config from habitat.core.agent import Agent from habitat_baselines.common.utils import batch_obs from habitat_baselines.rl.ppo import PointNavBaselinePolicy @@ -148,8 +147,6 @@ def main(): ) args = parser.parse_args() - config = get_config(args.task_config) - agent_config = get_default_config() agent_config.INPUT_TYPE = args.input_type agent_config.MODEL_PATH = args.model_path diff --git a/habitat_baselines/agents/slam_agents.py b/habitat_baselines/agents/slam_agents.py index 4dcfb75366..28e7c7a7fb 100644 --- a/habitat_baselines/agents/slam_agents.py +++ b/habitat_baselines/agents/slam_agents.py @@ -127,7 +127,7 @@ def act(self, habitat_observation=None, random_prob=1.0): class BlindAgent(RandomAgent): def __init__(self, config): - super(BlindAgent, self).__init__() + super(BlindAgent, self).__init__(config) self.pos_th = config.DIST_TO_STOP self.angle_th = config.ANGLE_TH self.reset() @@ -170,6 +170,7 @@ def act(self, habitat_observation=None, random_prob=0.1): class ORBSLAM2Agent(RandomAgent): def __init__(self, config, device=torch.device("cuda:0")): + super(ORBSLAM2Agent, self).__init__(config) self.num_actions = config.NUM_ACTIONS self.dist_threshold_to_stop = config.DIST_TO_STOP self.slam_vocab_path = config.SLAM_VOCAB_PATH @@ -494,7 +495,7 @@ def planner_prediction_to_command(self, p_next): pos_th = self.pos_th if get_distance(p_init, p_next) <= pos_th: return command - d_angle = angle_to_pi_2_minus_pi_2( + d_angle = norm_ang( get_direction(p_init, p_next, ang_th=d_angle_rot_th, pos_th=pos_th) ) if abs(d_angle) < d_angle_rot_th: @@ -530,6 +531,7 @@ def __init__( device=torch.device("cuda:0"), monocheckpoint="habitat_baselines/slambased/data/mp3d_resnet50.pth", ): + super(ORBSLAM2MonodepthAgent, self).__init__(config) self.num_actions = config.NUM_ACTIONS self.dist_threshold_to_stop = config.DIST_TO_STOP self.slam_vocab_path = config.SLAM_VOCAB_PATH @@ -572,8 +574,8 @@ def __init__( self.checkpoint = monocheckpoint if not os.path.isfile(self.checkpoint): mp3d_url = "http://cmp.felk.cvut.cz/~mishkdmy/navigation/mp3d_ft_monodepth_resnet50.pth" - suncg_me_url = "http://cmp.felk.cvut.cz/~mishkdmy/navigation/suncg_me_resnet.pth" - suncg_mf_url = "http://cmp.felk.cvut.cz/~mishkdmy/navigation/suncg_mf_resnet.pth" + # suncg_me_url = "http://cmp.felk.cvut.cz/~mishkdmy/navigation/suncg_me_resnet.pth" + # suncg_mf_url = "http://cmp.felk.cvut.cz/~mishkdmy/navigation/suncg_mf_resnet.pth" url = mp3d_url print("No monodepth checkpoint found. Downloading...", url) download(url, self.checkpoint) diff --git a/habitat_baselines/common/env_utils.py b/habitat_baselines/common/env_utils.py index c0de564eb8..9b9a8b33d3 100644 --- a/habitat_baselines/common/env_utils.py +++ b/habitat_baselines/common/env_utils.py @@ -7,8 +7,6 @@ import random from typing import Type, Union -import numpy as np - import habitat from habitat import Config, Env, RLEnv, VectorEnv, make_dataset diff --git a/habitat_baselines/rl/ddppo/__init__.py b/habitat_baselines/rl/ddppo/__init__.py index 5c0f29b5b2..70a8dd6f7e 100644 --- a/habitat_baselines/rl/ddppo/__init__.py +++ b/habitat_baselines/rl/ddppo/__init__.py @@ -4,4 +4,4 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from habitat_baselines.rl.ddppo.algo import DDPPOTrainer +from habitat_baselines.rl.ddppo.algo import DDPPOTrainer # noqa1 diff --git a/habitat_baselines/rl/ddppo/algo/__init__.py b/habitat_baselines/rl/ddppo/algo/__init__.py index 090eb6e046..5bebaa5380 100644 --- a/habitat_baselines/rl/ddppo/algo/__init__.py +++ b/habitat_baselines/rl/ddppo/algo/__init__.py @@ -4,4 +4,6 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from habitat_baselines.rl.ddppo.algo.ddppo_trainer import DDPPOTrainer +from habitat_baselines.rl.ddppo.algo.ddppo_trainer import ( # noqa: F401 isort:skip + DDPPOTrainer, +) diff --git a/habitat_baselines/rl/ddppo/algo/ddppo_trainer.py b/habitat_baselines/rl/ddppo/algo/ddppo_trainer.py index 811f031773..fe1fbebf57 100644 --- a/habitat_baselines/rl/ddppo/algo/ddppo_trainer.py +++ b/habitat_baselines/rl/ddppo/algo/ddppo_trainer.py @@ -35,7 +35,7 @@ save_interrupted_state, ) from habitat_baselines.rl.ddppo.algo.ddppo import DDPPO -from habitat_baselines.rl.ddppo.policy.resnet_policy import ( +from habitat_baselines.rl.ddppo.policy.resnet_policy import ( # noqa: F401 PointNavResNetPolicy, ) from habitat_baselines.rl.ppo.ppo_trainer import PPOTrainer diff --git a/habitat_baselines/rl/ddppo/data_generation/create_gibson_large_dataset.py b/habitat_baselines/rl/ddppo/data_generation/create_gibson_large_dataset.py index d4d86800f6..ad27d381d8 100644 --- a/habitat_baselines/rl/ddppo/data_generation/create_gibson_large_dataset.py +++ b/habitat_baselines/rl/ddppo/data_generation/create_gibson_large_dataset.py @@ -20,7 +20,6 @@ import tqdm import habitat -import habitat_sim from habitat.datasets.pointnav.pointnav_generator import ( generate_pointnav_episode, ) diff --git a/habitat_baselines/rl/ddppo/policy/__init__.py b/habitat_baselines/rl/ddppo/policy/__init__.py index 48d7c9e439..429557ab08 100644 --- a/habitat_baselines/rl/ddppo/policy/__init__.py +++ b/habitat_baselines/rl/ddppo/policy/__init__.py @@ -4,5 +4,4 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. - -from .resnet_policy import PointNavResNetPolicy +from .resnet_policy import PointNavResNetPolicy # noqa: F401. diff --git a/habitat_baselines/rl/ddppo/policy/resnet.py b/habitat_baselines/rl/ddppo/policy/resnet.py index 341a04eedc..4c28aa452d 100644 --- a/habitat_baselines/rl/ddppo/policy/resnet.py +++ b/habitat_baselines/rl/ddppo/policy/resnet.py @@ -4,7 +4,6 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -import torch from torch import nn as nn diff --git a/habitat_baselines/rl/ddppo/policy/resnet_policy.py b/habitat_baselines/rl/ddppo/policy/resnet_policy.py index 5b04f5ea2b..ae237b45d6 100644 --- a/habitat_baselines/rl/ddppo/policy/resnet_policy.py +++ b/habitat_baselines/rl/ddppo/policy/resnet_policy.py @@ -11,7 +11,6 @@ from torch import nn as nn from torch.nn import functional as F -from habitat import logger from habitat.tasks.nav.nav import ( EpisodicCompassSensor, EpisodicGPSSensor, diff --git a/habitat_baselines/rl/models/simple_cnn.py b/habitat_baselines/rl/models/simple_cnn.py index 59cb82822e..1c0a7f0d9e 100644 --- a/habitat_baselines/rl/models/simple_cnn.py +++ b/habitat_baselines/rl/models/simple_cnn.py @@ -1,6 +1,5 @@ import numpy as np import torch -from gym.spaces import Box from torch import nn as nn from habitat_baselines.common.utils import Flatten, ResizeCenterCropper diff --git a/habitat_baselines/rl/ppo/__init__.py b/habitat_baselines/rl/ppo/__init__.py index 641d742d4a..d4fbfef92c 100644 --- a/habitat_baselines/rl/ppo/__init__.py +++ b/habitat_baselines/rl/ppo/__init__.py @@ -6,5 +6,6 @@ from habitat_baselines.rl.ppo.policy import Net, PointNavBaselinePolicy, Policy from habitat_baselines.rl.ppo.ppo import PPO +from habitat_baselines.rl.ppo.ppo_trainer import RolloutStorage __all__ = ["PPO", "Policy", "RolloutStorage", "Net", "PointNavBaselinePolicy"] diff --git a/habitat_baselines/rl/ppo/policy.py b/habitat_baselines/rl/ppo/policy.py index 69d0f8bfe3..d05c354553 100644 --- a/habitat_baselines/rl/ppo/policy.py +++ b/habitat_baselines/rl/ppo/policy.py @@ -15,7 +15,7 @@ PointGoalSensor, ) from habitat_baselines.common.baseline_registry import baseline_registry -from habitat_baselines.common.utils import CategoricalNet, Flatten +from habitat_baselines.common.utils import CategoricalNet from habitat_baselines.rl.models.rnn_state_encoder import RNNStateEncoder from habitat_baselines.rl.models.simple_cnn import SimpleCNN diff --git a/habitat_baselines/rl/ppo/ppo_trainer.py b/habitat_baselines/rl/ppo/ppo_trainer.py index f32fcffa84..c345a02e55 100644 --- a/habitat_baselines/rl/ppo/ppo_trainer.py +++ b/habitat_baselines/rl/ppo/ppo_trainer.py @@ -27,7 +27,7 @@ generate_video, linear_decay, ) -from habitat_baselines.rl.ppo import PPO, PointNavBaselinePolicy +from habitat_baselines.rl.ppo import PPO @baseline_registry.register_trainer(name="ppo") diff --git a/habitat_baselines/slambased/monodepth.py b/habitat_baselines/slambased/monodepth.py index ebffd4a79a..79590c1d59 100644 --- a/habitat_baselines/slambased/monodepth.py +++ b/habitat_baselines/slambased/monodepth.py @@ -21,7 +21,7 @@ from torch import nn as nn from torch.nn import functional as F from torch.utils import model_zoo as model_zoo -from torchvision import transforms, utils +from torchvision import transforms r"""ResNet code gently borrowed from https://github.com/pytorch/vision/blob/master/torchvision/models/py @@ -616,18 +616,19 @@ def define_model(is_resnet, is_densenet, is_senet): Encoder, num_features=2048, block_channel=[256, 512, 1024, 2048] ) if is_densenet: - original_model = dendensenet161(pretrained=False) - Encoder = E_densenet(original_model) - model1 = model( - Encoder, num_features=2208, block_channel=[192, 384, 1056, 2208] - ) + # original_model = dendensenet161(pretrained=False) + # Encoder = E_densenet(original_model) + # model1 = model( + # Encoder, num_features=2208, block_channel=[192, 384, 1056, 2208] + # ) + raise NotImplementedError() if is_senet: - original_model = senet154(pretrained=False) - Encoder = E_senet(original_model) - model1 = model( - Encoder, num_features=2048, block_channel=[256, 512, 1024, 2048] - ) - + # original_model = senet154(pretrained=False) + # Encoder = E_senet(original_model) + # model1 = model( + # Encoder, num_features=2048, block_channel=[256, 512, 1024, 2048] + # ) + raise NotImplementedError() return model1 diff --git a/setup.cfg b/setup.cfg index 28dcb2b4a4..bfcefae3f3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,20 @@ [aliases] test=pytest +[flake8] +select = F +exclude = + .git, + __pycache__, + docs, + build, + dist, + data +per-file-ignores = + */__init__.py:F401 + examples/tutorials/nb_python/*.py:F841 + + [tool:pytest] addopts = --verbose -rsxX -q --cov-report=xml --cov=./ testpaths = test diff --git a/test/test_baseline_agents.py b/test/test_baseline_agents.py index 8efeb6dd5e..62b9f54015 100644 --- a/test/test_baseline_agents.py +++ b/test/test_baseline_agents.py @@ -9,7 +9,6 @@ import pytest import habitat -from habitat.config import Config as CN try: from habitat_baselines.agents import ppo_agents, simple_agents diff --git a/test/test_examples.py b/test/test_examples.py index 456ea7ef8a..5b72a6d3c0 100644 --- a/test/test_examples.py +++ b/test/test_examples.py @@ -1,6 +1,5 @@ import itertools import multiprocessing -import os import runpy import sys from os import path as osp diff --git a/test/test_mp3d_eqa.py b/test/test_mp3d_eqa.py index a500755795..a55589228b 100644 --- a/test/test_mp3d_eqa.py +++ b/test/test_mp3d_eqa.py @@ -16,7 +16,7 @@ from habitat.datasets import make_dataset from habitat.datasets.eqa import mp3d_eqa_dataset as mp3d_dataset from habitat.tasks.eqa.eqa import AnswerAction -from habitat.tasks.nav.nav import MoveForwardAction, StopAction +from habitat.tasks.nav.nav import MoveForwardAction from habitat.utils.geometry_utils import ( angle_between_quaternions, quaternion_from_coeff, diff --git a/test/test_object_nav_task.py b/test/test_object_nav_task.py index 9c9b22b5e9..87d6673439 100644 --- a/test/test_object_nav_task.py +++ b/test/test_object_nav_task.py @@ -7,7 +7,6 @@ import json import time -import numpy as np import pytest import habitat @@ -16,9 +15,7 @@ from habitat.core.logging import logger from habitat.datasets import make_dataset from habitat.datasets.object_nav.object_nav_dataset import ObjectNavDatasetV1 -from habitat.tasks.eqa.eqa import AnswerAction from habitat.tasks.nav.nav import MoveForwardAction -from habitat.utils.test_utils import sample_non_stop_action CFG_TEST = "configs/test/habitat_mp3d_object_nav_test.yaml" EPISODES_LIMIT = 6 diff --git a/test/test_pyrobot.py b/test/test_pyrobot.py index b1472e785c..79fb28af3a 100644 --- a/test/test_pyrobot.py +++ b/test/test_pyrobot.py @@ -55,8 +55,8 @@ def test_pyrobot(mocker): config = get_config() with make_sim("PyRobot-v0", config=config.PYROBOT) as reality: - observations = reality.reset() - observations = reality.step( + _ = reality.reset() + _ = reality.step( "go_to_relative", { "xyt_position": [0, 0, (10 / 180) * np.pi], diff --git a/test/test_sensors.py b/test/test_sensors.py index 2d1d37157d..8c0eeec8bb 100644 --- a/test/test_sensors.py +++ b/test/test_sensors.py @@ -448,14 +448,14 @@ def test_noise_models_rgbd(): - no_noise_obs[0]["rgb"].astype(np.float) ) > 1.5e-2 * np.linalg.norm( no_noise_obs[0]["rgb"].astype(np.float) - ), f"No RGB noise detected." + ), "No RGB noise detected." assert np.linalg.norm( obs["depth"].astype(np.float) - no_noise_obs[0]["depth"].astype(np.float) ) > 1.5e-2 * np.linalg.norm( no_noise_obs[0]["depth"].astype(np.float) - ), f"No Depth noise detected." + ), "No Depth noise detected." images = [] state = env.sim.get_agent_state() diff --git a/test/test_spaces.py b/test/test_spaces.py index 8601dac57b..c110461d51 100644 --- a/test/test_spaces.py +++ b/test/test_spaces.py @@ -5,7 +5,6 @@ # LICENSE file in the root directory of this source tree. import gym -import pytest from habitat.core.spaces import ActionSpace, EmptySpace, ListSpace