Skip to content

Commit

Permalink
Allow the env to be closed many times (#68)
Browse files Browse the repository at this point in the history
* expose env_ids and 3ple loop registration

* parametrize env test and double close check

* fix double close

* update version

* isort

* remove extra line in test
  • Loading branch information
qgallouedec authored Jun 6, 2023
1 parent f645048 commit 488e5ce
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 167 deletions.
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
author = "Quentin Gallouédec"

# The full version, including alpha/beta/rc tags
release = "v3.0.6"
release = "v3.0.7"


# -- General configuration ---------------------------------------------------
Expand Down
64 changes: 17 additions & 47 deletions panda_gym/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,50 +5,20 @@
with open(os.path.join(os.path.dirname(__file__), "version.txt"), "r") as file_handler:
__version__ = file_handler.read().strip()

for reward_type in ["sparse", "dense"]:
for control_type in ["ee", "joints"]:
reward_suffix = "Dense" if reward_type == "dense" else ""
control_suffix = "Joints" if control_type == "joints" else ""
kwargs = {"reward_type": reward_type, "control_type": control_type}

register(
id="PandaReach{}{}-v3".format(control_suffix, reward_suffix),
entry_point="panda_gym.envs:PandaReachEnv",
kwargs=kwargs,
max_episode_steps=50,
)

register(
id="PandaPush{}{}-v3".format(control_suffix, reward_suffix),
entry_point="panda_gym.envs:PandaPushEnv",
kwargs=kwargs,
max_episode_steps=50,
)

register(
id="PandaSlide{}{}-v3".format(control_suffix, reward_suffix),
entry_point="panda_gym.envs:PandaSlideEnv",
kwargs=kwargs,
max_episode_steps=50,
)

register(
id="PandaPickAndPlace{}{}-v3".format(control_suffix, reward_suffix),
entry_point="panda_gym.envs:PandaPickAndPlaceEnv",
kwargs=kwargs,
max_episode_steps=50,
)

register(
id="PandaStack{}{}-v3".format(control_suffix, reward_suffix),
entry_point="panda_gym.envs:PandaStackEnv",
kwargs=kwargs,
max_episode_steps=100,
)

register(
id="PandaFlip{}{}-v3".format(control_suffix, reward_suffix),
entry_point="panda_gym.envs:PandaFlipEnv",
kwargs=kwargs,
max_episode_steps=50,
)
ENV_IDS = []

for task in ["Reach", "Slide", "Push", "PickAndPlace", "Stack", "Flip"]:
for reward_type in ["sparse", "dense"]:
for control_type in ["ee", "joints"]:
reward_suffix = "Dense" if reward_type == "dense" else ""
control_suffix = "Joints" if control_type == "joints" else ""
env_id = f"Panda{task}{control_suffix}{reward_suffix}-v3"

register(
id=env_id,
entry_point=f"panda_gym.envs:Panda{task}Env",
kwargs={"reward_type": reward_type, "control_type": control_type},
max_episode_steps=100 if task == "Stack" else 50,
)

ENV_IDS.append(env_id)
3 changes: 2 additions & 1 deletion panda_gym/pybullet.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ def step(self) -> None:

def close(self) -> None:
"""Close the simulation."""
self.physics_client.disconnect()
if self.physics_client.isConnected():
self.physics_client.disconnect()

def save_state(self) -> int:
"""Save the current simulation state.
Expand Down
2 changes: 1 addition & 1 deletion panda_gym/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.0.6
3.0.7
124 changes: 7 additions & 117 deletions test/envs_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import gymnasium as gym
import pytest

import panda_gym

Expand All @@ -12,123 +13,12 @@ def run_env(env):
if terminated or truncated:
env.reset()
env.close()
# check that it allows to be closed multiple times
env.close()


def test_reach():
env = gym.make("PandaReach-v3")
run_env(env)


def test_slide():
env = gym.make("PandaSlide-v3")
run_env(env)


def test_push():
env = gym.make("PandaPush-v3")
run_env(env)


def test_pickandplace():
env = gym.make("PandaPickAndPlace-v3")
run_env(env)


def test_stack():
env = gym.make("PandaStack-v3")
run_env(env)


def test_flip():
env = gym.make("PandaFlip-v3")
run_env(env)


def test_dense_reach():
env = gym.make("PandaReachDense-v3")
run_env(env)


def test_dense_slide():
env = gym.make("PandaSlideDense-v3")
run_env(env)


def test_dense_push():
env = gym.make("PandaPushDense-v3")
run_env(env)


def test_dense_pickandplace():
env = gym.make("PandaPickAndPlaceDense-v3")
run_env(env)


def test_dense_stack():
env = gym.make("PandaStackDense-v3")
run_env(env)


def test_dense_flip():
env = gym.make("PandaFlipDense-v3")
run_env(env)


def test_reach_joints():
env = gym.make("PandaReachJoints-v3")
run_env(env)


def test_slide_joints():
env = gym.make("PandaSlideJoints-v3")
run_env(env)


def test_push_joints():
env = gym.make("PandaPushJoints-v3")
run_env(env)


def test_pickandplace_joints():
env = gym.make("PandaPickAndPlaceJoints-v3")
run_env(env)


def test_stack_joints():
env = gym.make("PandaStackJoints-v3")
run_env(env)


def test_flip_joints():
env = gym.make("PandaFlipJoints-v3")
run_env(env)


def test_dense_reach_joints():
env = gym.make("PandaReachJointsDense-v3")
run_env(env)


def test_dense_slide_joints():
env = gym.make("PandaSlideDense-v3")
run_env(env)


def test_dense_push_joints():
env = gym.make("PandaPushJointsDense-v3")
run_env(env)


def test_dense_pickandplace_joints():
env = gym.make("PandaPickAndPlaceJointsDense-v3")
run_env(env)


def test_dense_stack_joints():
env = gym.make("PandaStackJointsDense-v3")
run_env(env)


def test_dense_flip_joints():
env = gym.make("PandaFlipJointsDense-v3")
@pytest.mark.parametrize("env_id", panda_gym.ENV_IDS)
def test_env(env_id):
"""Tests running panda gym envs."""
env = gym.make(env_id)
run_env(env)

0 comments on commit 488e5ce

Please sign in to comment.