Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DO NOT MERGE] Update to 1.0.0 alpha2 #36

Open
wants to merge 36 commits into
base: main
Choose a base branch
from

Conversation

traversaro
Copy link
Contributor

Checklist

  • Used a personal fork of the feedstock to propose changes
  • Bumped the build number (if the version is unchanged)
  • Reset the build number to 0 (if the version changed)
  • Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
  • Ensured the license file is being packaged.

@conda-forge-webservices
Copy link

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

I do have some suggestions for making it better though...

For recipe:

  • Recipes should usually depend on matplotlib-base as opposed to matplotlib so that runtime environments do not require large packages like qt.

@traversaro traversaro mentioned this pull request Apr 6, 2024
1 task
@pseudo-rnd-thoughts
Copy link
Contributor

In summary, we only have mujoco-py and mujoco issues which is good
Not sure why mujoco-py is failing, doesn't seemed to have been installed
For mujoco, these are known issues and will be fixed in alpha 2, nothing to worry about

=========================== short test summary info ============================
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[10-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[100-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[1000-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[10000-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[HalfCheetah-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[Hopper-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[Walker2d-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_y_position[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-HalfCheetah] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-Hopper] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-Swimmer] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-Walker2d] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_y_velocity[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_xy_velocity_xpos[Ant-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_xy_velocity_com[Humanoid-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_set_state[v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_set_state[v2] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_distance_from_origin_info[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_model_object_count[v5] - assert 8 == 18
 +  where 8 = <mujoco._structs.MjModel object at 0x7ff512a4d570>.nbvh
 +    where <mujoco._structs.MjModel object at 0x7ff512a4d570> = <gymnasium.envs.mujoco.pusher_v5.PusherEnv object at 0x7ff512d12c10>.model
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_model_object_count[v4] - assert 8 == 18
 +  where 8 = <mujoco._structs.MjModel object at 0x7ff512e5a7b0>.nbvh
 +    where <mujoco._structs.MjModel object at 0x7ff512e5a7b0> = <gymnasium.envs.mujoco.pusher_v4.PusherEnv object at 0x7ff512b4b0d0>.model
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_model_sensors[v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_model_sensors[v2] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_reset_noise_scale[Ant-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_reset_noise_scale[HalfCheetah-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_reset_noise_scale[Hopper-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_reset_noise_scale[Humanoid-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_reset_noise_scale[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_reset_noise_scale[Walker2d-v3] - gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'. (HINT: you need to install mujoco-py, and also perform the setup instructions here: https://github.com/openai/mujoco-py.)
==== 29 failed, 2390 passed, 74 skipped, 234 warnings in 109.44s (0:01:49) =====

@traversaro
Copy link
Contributor Author

I also removed the cython dependency from gymnasium-mujoco as it appears it is not used there.

@pseudo-rnd-thoughts
Copy link
Contributor

@traversaro I've cut alpha 2, however, this is causing new strange issues, do you understand what the problem is?

@traversaro
Copy link
Contributor Author

@traversaro I've cut alpha 2, however, this is causing new strange issues, do you understand what the problem is?

Do you refer to the mujoco_py errors? I guess something changed in Farama-Foundation/Gymnasium#934, making the collection of test fail if mujoco_py is not installed, however I would need to first understand why mujoco_py tests were automatically skipped before to be honest. An alternative is to manually suppress mujoco_py test collection at the pytest invocation level, let me know what you prefer.

Or perhaps you were referring to something else?

@traversaro
Copy link
Contributor Author

Yes, looking at the logic in Farama-Foundation/Gymnasium#934 it seems that before just running from gymnasium.envs.mujoco import MuJocoPyEnv did not resulted in a error.DependencyNotInstalled exception, but the expection was only raised when MuJocoPyEnv.__init__ constructor was called. Instead after Farama-Foundation/Gymnasium#934 just calling from gymnasium.envs.mujoco.mujoco_py_env import MuJocoPyEnv results in a error.DependencyNotInstalled exception, that I guess create an hard error during test collection.

@traversaro traversaro changed the title [DO NOT MERGE] Update to 1.0.0 alpha1 [DO NOT MERGE] Update to 1.0.0 alpha2 May 22, 2024
@traversaro
Copy link
Contributor Author

Ok, new round of errors:

FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[HalfCheetah-v3] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[Hopper-v3] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_position[Walker2d-v3] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_y_position[Swimmer-v3] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-HalfCheetah] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-Hopper] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')
FAILED tests/envs/mujoco/test_mujoco_v5.py::test_verify_info_x_velocity[v3-Swimmer] - gymnasium.error.DependencyNotInstalled: ("No module named 'mujoco_py'. Could not import mujoco_py, which is needed for MuJoCo environments older than V4", 'You could either use a newer version of the environments, or install the (deprecated) mujoco-py packagefollowing the instructions on their GitHub page.')

This seems just due to the fact that the test_mujoco_v5 directly uses mujoco_py in https://github.com/Farama-Foundation/Gymnasium/blob/0e8f41e62771851a3a60b087c38396ce1191efa8/tests/envs/mujoco/test_mujoco_v5.py#L10, instead of using try_make_env as other tests: https://github.com/Farama-Foundation/Gymnasium/blob/0e8f41e62771851a3a60b087c38396ce1191efa8/tests/envs/utils.py#L9 . So I guess we can just skip that test locally here as it will not work without mujoco_py .

Other failures:

FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[10-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[100-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[1000-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[10000-human] - ValueError: NULL pointer access

This seems to be real errors, any idea @pseudo-rnd-thoughts ?

@traversaro
Copy link
Contributor Author

On some configurations there are a pip check errors like:

+ pip check
chex 0.1.83 has requirement jax>=0.4.16, but you have jax 0.4.13.
optax 0.2.2 has requirement chex>=0.1.86, but you have chex 0.1.83.

but this problems are not related to gymnasium, probably some wrong metadata.

@traversaro
Copy link
Contributor Author

On some configurations there are a pip check errors like:

+ pip check
chex 0.1.83 has requirement jax>=0.4.16, but you have jax 0.4.13.
optax 0.2.2 has requirement chex>=0.1.86, but you have chex 0.1.83.

but this problems are not related to gymnasium, probably some wrong metadata.

Indeed it was some problem in metadata of chex (conda-forge/chex-feedstock#21) and optax (conda-forge/optax-feedstock#19). The proper solution would be to prepare a repodata patch, but given that Python 3.8 is close to EOL, I guess we can just skip pip check on Python 3.8 .

@traversaro
Copy link
Contributor Author

FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[10-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[100-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[1000-human] - ValueError: NULL pointer access
FAILED tests/envs/mujoco/test_mujoco_rendering.py::test_max_geom_attribute[10000-human] - ValueError: NULL pointer access

This seems to be real errors, any idea @pseudo-rnd-thoughts ?

The precise line is:

2024-05-22T08:01:04.3732926Z ______________________ test_max_geom_attribute[10-human] _______________________
2024-05-22T08:01:04.3733201Z 
2024-05-22T08:01:04.3733486Z model = <mujoco._structs.MjModel object at 0x7f5171616430>
2024-05-22T08:01:04.3733968Z data = <mujoco._structs.MjData object at 0x7f5171745bf0>, render_mode = 'human'
2024-05-22T08:01:04.3734285Z max_geom = 10
2024-05-22T08:01:04.3734480Z 
2024-05-22T08:01:04.3734781Z     @pytest.mark.parametrize("render_mode", ["human", "rgb_array", "depth_array"])
2024-05-22T08:01:04.3735149Z     @pytest.mark.parametrize("max_geom", [10, 100, 1000, 10000])
2024-05-22T08:01:04.3735461Z     def test_max_geom_attribute(
2024-05-22T08:01:04.3735808Z         model: mujoco.MjModel, data: mujoco.MjData, render_mode: str, max_geom: int
2024-05-22T08:01:04.3736108Z     ):
2024-05-22T08:01:04.3736406Z         """Test that the max_geom attribute is set correctly."""
2024-05-22T08:01:04.3736713Z     
2024-05-22T08:01:04.3736965Z         # initialize renderer
2024-05-22T08:01:04.3737263Z         renderer = ExposedViewerRenderer(
2024-05-22T08:01:04.3737605Z             model, data, width=DEFAULT_SIZE, height=DEFAULT_SIZE, max_geom=max_geom
2024-05-22T08:01:04.3737919Z         )
2024-05-22T08:01:04.3738528Z     
2024-05-22T08:01:04.3738816Z         # assert max_geom attribute
2024-05-22T08:01:04.3739110Z         assert renderer.max_geom == max_geom
2024-05-22T08:01:04.3739389Z     
2024-05-22T08:01:04.3739645Z         # initialize viewer via render
2024-05-22T08:01:04.3739959Z >       viewer = renderer.get_viewer(render_mode)
2024-05-22T08:01:04.3740159Z 
2024-05-22T08:01:04.3740457Z tests/envs/mujoco/test_mujoco_rendering.py:77:

Perhaps is just a usual problem of human rendered not supported in CI?

@pseudo-rnd-thoughts
Copy link
Contributor

pseudo-rnd-thoughts commented May 22, 2024

Thanks for looking at this

Good point, I suspect that you're right.
We can either disable the test or patch the parameterize to exclude human

@traversaro
Copy link
Contributor Author

traversaro commented May 24, 2024

linux-x64 + python==3.8 :

        # step
        for i in range(100):
            action = env.action_space.sample()
            assert np.array([action]) in envs.action_space
    
            obs, reward, term, trunc, info = env.step(action)
            vec_obs, vec_reward, vec_term, vec_trunc, vec_info = envs.step(
                np.array([action])
            )
    
            assert obs in env.observation_space
            assert vec_obs in envs.observation_space
            assert np.all(obs == vec_obs[0])
            assert reward == vec_reward
            assert term == vec_term
            assert trunc == vec_trunc
            assert info == vec_info
    
>           assert np.all(env.unwrapped.state == envs.unwrapped.state[:, 0])
E           assert False
E            +  where False = <function all at 0x7f9afd147e50>((0.0482833404...5962559545411) == array([ 0.048... -0.30359626])
E            +    where <function all at 0x7f9afd147e50> = np.all
E               +     0.1448233344319772,
E               +     0.02686103030253148,
E               +     -0.3035962559545411,
E               + ))

Not sure about this one. As it is Python 3.8 only, I would just skip it.

@traversaro
Copy link
Contributor Author

Last (detected) Windows failure win-64 :

2024-05-24T10:37:11.9886576Z ______________________________ test_update_info _______________________________
2024-05-24T10:37:11.9887055Z 
2024-05-24T10:37:11.9887541Z     def test_update_info():
2024-05-24T10:37:11.9888015Z         env = DictInfoToList(ResetOptionAsInfo())
2024-05-24T10:37:11.9888826Z     
2024-05-24T10:37:11.9889498Z         # Test num-envs==1 then expand_dims(sub-env-info) == vector-infos
2024-05-24T10:37:11.9890003Z         env.unwrapped.num_envs = 1
2024-05-24T10:37:11.9890471Z     
2024-05-24T10:37:11.9890874Z         vector_infos = {
2024-05-24T10:37:11.9891351Z             "a": np.array([0]),
2024-05-24T10:37:11.9891781Z             "b": np.array([0.0]),
2024-05-24T10:37:11.9892271Z             "c": np.array([None], dtype=object),
2024-05-24T10:37:11.9892760Z             "d": np.zeros(
2024-05-24T10:37:11.9893173Z                 (
2024-05-24T10:37:11.9893618Z                     1,
2024-05-24T10:37:11.9894025Z                     2,
2024-05-24T10:37:11.9894467Z                 )
2024-05-24T10:37:11.9895039Z             ),
2024-05-24T10:37:11.9895482Z             "e": np.array([Discrete(1)], dtype=object),
2024-05-24T10:37:11.9895989Z             "_a": np.array([True]),
2024-05-24T10:37:11.9896424Z             "_b": np.array([True]),
2024-05-24T10:37:11.9896913Z             "_c": np.array([True]),
2024-05-24T10:37:11.9897449Z             "_d": np.array([True]),
2024-05-24T10:37:11.9897935Z             "_e": np.array([True]),
2024-05-24T10:37:11.9898390Z         }
2024-05-24T10:37:11.9898834Z         _, list_info = env.reset(options=vector_infos)
2024-05-24T10:37:11.9899346Z         expected_list_info = [
2024-05-24T10:37:11.9899784Z             {
2024-05-24T10:37:11.9900246Z                 "a": np.int64(0),
2024-05-24T10:37:11.9900724Z                 "b": np.float64(0.0),
2024-05-24T10:37:11.9901150Z                 "c": None,
2024-05-24T10:37:11.9901621Z                 "d": np.zeros((2,)),
2024-05-24T10:37:11.9902052Z                 "e": Discrete(1),
2024-05-24T10:37:11.9902508Z             }
2024-05-24T10:37:11.9902948Z         ]
2024-05-24T10:37:11.9903334Z     
2024-05-24T10:37:11.9903828Z >       assert data_equivalence(list_info, expected_list_info)
2024-05-24T10:37:11.9904310Z E       AssertionError: assert False
2024-05-24T10:37:11.9905180Z E        +  where False = data_equivalence([{'a': 0, 'b': 0.0, 'c': None, 'd': array([0., 0.]), ...}], [{'a': 0, 'b': 0.0, 'c': None, 'd': array([0., 0.]), ...}])
2024-05-24T10:37:11.9905646Z 

@traversaro
Copy link
Contributor Author

Another win-64 failure:

2024-05-24T15:13:04.5127781Z _________________________ test_model_object_count[v5] _________________________
2024-05-24T15:13:04.5129274Z 
2024-05-24T15:13:04.5134918Z version = 'v5'
2024-05-24T15:13:04.5135453Z 
2024-05-24T15:13:04.5136296Z     @pytest.mark.parametrize("version", ["v5", "v4"])
2024-05-24T15:13:04.5137033Z     def test_model_object_count(version: str):
2024-05-24T15:13:04.5138022Z         """Verify that all the objects of the model are loaded, mostly useful for using non-mujoco simulator."""
2024-05-24T15:13:04.5139433Z         env = gym.make(f"Ant-{version}").unwrapped
2024-05-24T15:13:04.5140231Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5140944Z         assert env.model.nq == 15
2024-05-24T15:13:04.5141557Z         assert env.model.nv == 14
2024-05-24T15:13:04.5142820Z         assert env.model.nu == 8
2024-05-24T15:13:04.5144407Z         assert env.model.nbody == 14
2024-05-24T15:13:04.5145123Z         assert env.model.nbvh == 14
2024-05-24T15:13:04.5146309Z         assert env.model.njnt == 9
2024-05-24T15:13:04.5146727Z         assert env.model.ngeom == 14
2024-05-24T15:13:04.5147051Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5147309Z     
2024-05-24T15:13:04.5147807Z         env = gym.make(f"HalfCheetah-{version}").unwrapped
2024-05-24T15:13:04.5148160Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5148823Z         assert env.model.nq == 9
2024-05-24T15:13:04.5156831Z         assert env.model.nv == 9
2024-05-24T15:13:04.5157566Z         assert env.model.nu == 6
2024-05-24T15:13:04.5158263Z         assert env.model.nbody == 8
2024-05-24T15:13:04.5159099Z         assert env.model.nbvh == 10
2024-05-24T15:13:04.5159792Z         assert env.model.njnt == 9
2024-05-24T15:13:04.5160452Z         assert env.model.ngeom == 9
2024-05-24T15:13:04.5161070Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5161715Z     
2024-05-24T15:13:04.5162576Z         env = gym.make(f"Hopper-{version}").unwrapped
2024-05-24T15:13:04.5163347Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5164035Z         assert env.model.nq == 6
2024-05-24T15:13:04.5164705Z         assert env.model.nv == 6
2024-05-24T15:13:04.5165372Z         assert env.model.nu == 3
2024-05-24T15:13:04.5165963Z         assert env.model.nbody == 5
2024-05-24T15:13:04.5166634Z         assert env.model.nbvh == 5
2024-05-24T15:13:04.5167287Z         assert env.model.njnt == 6
2024-05-24T15:13:04.5167977Z         assert env.model.ngeom == 5
2024-05-24T15:13:04.5168643Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5169225Z     
2024-05-24T15:13:04.5170124Z         env = gym.make(f"Humanoid-{version}").unwrapped
2024-05-24T15:13:04.5170807Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5171524Z         assert env.model.nq == 24
2024-05-24T15:13:04.5172195Z         assert env.model.nv == 23
2024-05-24T15:13:04.5172855Z         assert env.model.nu == 17
2024-05-24T15:13:04.5173536Z         assert env.model.nbody == 14
2024-05-24T15:13:04.5174139Z         assert env.model.nbvh == 22
2024-05-24T15:13:04.5174815Z         assert env.model.njnt == 18
2024-05-24T15:13:04.5175671Z         assert env.model.ngeom == 18
2024-05-24T15:13:04.5176286Z         assert env.model.ntendon == 2
2024-05-24T15:13:04.5176928Z     
2024-05-24T15:13:04.5177694Z         env = gym.make(f"HumanoidStandup-{version}").unwrapped
2024-05-24T15:13:04.5178449Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5179140Z         assert env.model.nq == 24
2024-05-24T15:13:04.5179747Z         assert env.model.nv == 23
2024-05-24T15:13:04.5180405Z         assert env.model.nu == 17
2024-05-24T15:13:04.5181005Z         assert env.model.nbody == 14
2024-05-24T15:13:04.5181675Z         assert env.model.nbvh == 22
2024-05-24T15:13:04.5182266Z         assert env.model.njnt == 18
2024-05-24T15:13:04.5183002Z         assert env.model.ngeom == 18
2024-05-24T15:13:04.5183679Z         assert env.model.ntendon == 2
2024-05-24T15:13:04.5184257Z     
2024-05-24T15:13:04.5185088Z         env = gym.make(f"InvertedDoublePendulum-{version}").unwrapped
2024-05-24T15:13:04.5185774Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5186481Z         assert env.model.nq == 3
2024-05-24T15:13:04.5187137Z         assert env.model.nv == 3
2024-05-24T15:13:04.5187826Z         assert env.model.nu == 1
2024-05-24T15:13:04.5188513Z         assert env.model.nbody == 4
2024-05-24T15:13:04.5189107Z         assert env.model.nbvh == 6
2024-05-24T15:13:04.5189783Z         assert env.model.njnt == 3
2024-05-24T15:13:04.5196312Z         assert env.model.ngeom == 5
2024-05-24T15:13:04.5197025Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5197701Z     
2024-05-24T15:13:04.5199196Z         env = gym.make(f"InvertedPendulum-{version}").unwrapped
2024-05-24T15:13:04.5199995Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5200687Z         assert env.model.nq == 2
2024-05-24T15:13:04.5201292Z         assert env.model.nv == 2
2024-05-24T15:13:04.5201956Z         assert env.model.nu == 1
2024-05-24T15:13:04.5202609Z         assert env.model.nbody == 3
2024-05-24T15:13:04.5203307Z         assert env.model.nbvh == 3
2024-05-24T15:13:04.5204022Z         assert env.model.njnt == 2
2024-05-24T15:13:04.5204625Z         assert env.model.ngeom == 3
2024-05-24T15:13:04.5205284Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5205865Z     
2024-05-24T15:13:04.5206527Z         if not (version == "v4" and mujoco.__version__ >= "3.0.0"):
2024-05-24T15:13:04.5207500Z             env = gym.make(f"Pusher-{version}").unwrapped
2024-05-24T15:13:04.5208269Z             assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5208970Z             assert env.model.nq == 11
2024-05-24T15:13:04.5209572Z             assert env.model.nv == 11
2024-05-24T15:13:04.5210240Z             assert env.model.nu == 7
2024-05-24T15:13:04.5210825Z             assert env.model.nbody == 13
2024-05-24T15:13:04.5211597Z             if mujoco.__version__ >= "3.1.4":
2024-05-24T15:13:04.5212278Z                 assert env.model.nbvh == 7
2024-05-24T15:13:04.5212955Z             elif mujoco.__version__ >= "3.1.2":
2024-05-24T15:13:04.5213720Z >               assert env.model.nbvh == 8
2024-05-24T15:13:04.5214326Z E               assert 7 == 8
2024-05-24T15:13:04.5215037Z E                +  where 7 = <mujoco._structs.MjModel object at 0x000002533F372A70>.nbvh
2024-05-24T15:13:04.5215846Z E                +    where <mujoco._structs.MjModel object at 0x000002533F372A70> = <gymnasium.envs.mujoco.pusher_v5.PusherEnv object at 0x000002533F4B7490>.model
2024-05-24T15:13:04.5216443Z 
2024-05-24T15:13:04.5217142Z tests\envs\mujoco\test_mujoco_v5.py:599: AssertionError

That is strange, it selects the mujoco==3.1.2/3.1.3 path even if mujoco 3.1.5 is installed.

@traversaro
Copy link
Contributor Author

Last (detected) Windows failure win-64 :

2024-05-24T10:37:11.9886576Z ______________________________ test_update_info _______________________________
2024-05-24T10:37:11.9887055Z 
2024-05-24T10:37:11.9887541Z     def test_update_info():
2024-05-24T10:37:11.9888015Z         env = DictInfoToList(ResetOptionAsInfo())
2024-05-24T10:37:11.9888826Z     
2024-05-24T10:37:11.9889498Z         # Test num-envs==1 then expand_dims(sub-env-info) == vector-infos
2024-05-24T10:37:11.9890003Z         env.unwrapped.num_envs = 1
2024-05-24T10:37:11.9890471Z     
2024-05-24T10:37:11.9890874Z         vector_infos = {
2024-05-24T10:37:11.9891351Z             "a": np.array([0]),
2024-05-24T10:37:11.9891781Z             "b": np.array([0.0]),
2024-05-24T10:37:11.9892271Z             "c": np.array([None], dtype=object),
2024-05-24T10:37:11.9892760Z             "d": np.zeros(
2024-05-24T10:37:11.9893173Z                 (
2024-05-24T10:37:11.9893618Z                     1,
2024-05-24T10:37:11.9894025Z                     2,
2024-05-24T10:37:11.9894467Z                 )
2024-05-24T10:37:11.9895039Z             ),
2024-05-24T10:37:11.9895482Z             "e": np.array([Discrete(1)], dtype=object),
2024-05-24T10:37:11.9895989Z             "_a": np.array([True]),
2024-05-24T10:37:11.9896424Z             "_b": np.array([True]),
2024-05-24T10:37:11.9896913Z             "_c": np.array([True]),
2024-05-24T10:37:11.9897449Z             "_d": np.array([True]),
2024-05-24T10:37:11.9897935Z             "_e": np.array([True]),
2024-05-24T10:37:11.9898390Z         }
2024-05-24T10:37:11.9898834Z         _, list_info = env.reset(options=vector_infos)
2024-05-24T10:37:11.9899346Z         expected_list_info = [
2024-05-24T10:37:11.9899784Z             {
2024-05-24T10:37:11.9900246Z                 "a": np.int64(0),
2024-05-24T10:37:11.9900724Z                 "b": np.float64(0.0),
2024-05-24T10:37:11.9901150Z                 "c": None,
2024-05-24T10:37:11.9901621Z                 "d": np.zeros((2,)),
2024-05-24T10:37:11.9902052Z                 "e": Discrete(1),
2024-05-24T10:37:11.9902508Z             }
2024-05-24T10:37:11.9902948Z         ]
2024-05-24T10:37:11.9903334Z     
2024-05-24T10:37:11.9903828Z >       assert data_equivalence(list_info, expected_list_info)
2024-05-24T10:37:11.9904310Z E       AssertionError: assert False
2024-05-24T10:37:11.9905180Z E        +  where False = data_equivalence([{'a': 0, 'b': 0.0, 'c': None, 'd': array([0., 0.]), ...}], [{'a': 0, 'b': 0.0, 'c': None, 'd': array([0., 0.]), ...}])
2024-05-24T10:37:11.9905646Z 

Fix Farama-Foundation/Gymnasium#1066 .

@traversaro
Copy link
Contributor Author

Another win-64 failure:

2024-05-24T15:13:04.5127781Z _________________________ test_model_object_count[v5] _________________________
2024-05-24T15:13:04.5129274Z 
2024-05-24T15:13:04.5134918Z version = 'v5'
2024-05-24T15:13:04.5135453Z 
2024-05-24T15:13:04.5136296Z     @pytest.mark.parametrize("version", ["v5", "v4"])
2024-05-24T15:13:04.5137033Z     def test_model_object_count(version: str):
2024-05-24T15:13:04.5138022Z         """Verify that all the objects of the model are loaded, mostly useful for using non-mujoco simulator."""
2024-05-24T15:13:04.5139433Z         env = gym.make(f"Ant-{version}").unwrapped
2024-05-24T15:13:04.5140231Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5140944Z         assert env.model.nq == 15
2024-05-24T15:13:04.5141557Z         assert env.model.nv == 14
2024-05-24T15:13:04.5142820Z         assert env.model.nu == 8
2024-05-24T15:13:04.5144407Z         assert env.model.nbody == 14
2024-05-24T15:13:04.5145123Z         assert env.model.nbvh == 14
2024-05-24T15:13:04.5146309Z         assert env.model.njnt == 9
2024-05-24T15:13:04.5146727Z         assert env.model.ngeom == 14
2024-05-24T15:13:04.5147051Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5147309Z     
2024-05-24T15:13:04.5147807Z         env = gym.make(f"HalfCheetah-{version}").unwrapped
2024-05-24T15:13:04.5148160Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5148823Z         assert env.model.nq == 9
2024-05-24T15:13:04.5156831Z         assert env.model.nv == 9
2024-05-24T15:13:04.5157566Z         assert env.model.nu == 6
2024-05-24T15:13:04.5158263Z         assert env.model.nbody == 8
2024-05-24T15:13:04.5159099Z         assert env.model.nbvh == 10
2024-05-24T15:13:04.5159792Z         assert env.model.njnt == 9
2024-05-24T15:13:04.5160452Z         assert env.model.ngeom == 9
2024-05-24T15:13:04.5161070Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5161715Z     
2024-05-24T15:13:04.5162576Z         env = gym.make(f"Hopper-{version}").unwrapped
2024-05-24T15:13:04.5163347Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5164035Z         assert env.model.nq == 6
2024-05-24T15:13:04.5164705Z         assert env.model.nv == 6
2024-05-24T15:13:04.5165372Z         assert env.model.nu == 3
2024-05-24T15:13:04.5165963Z         assert env.model.nbody == 5
2024-05-24T15:13:04.5166634Z         assert env.model.nbvh == 5
2024-05-24T15:13:04.5167287Z         assert env.model.njnt == 6
2024-05-24T15:13:04.5167977Z         assert env.model.ngeom == 5
2024-05-24T15:13:04.5168643Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5169225Z     
2024-05-24T15:13:04.5170124Z         env = gym.make(f"Humanoid-{version}").unwrapped
2024-05-24T15:13:04.5170807Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5171524Z         assert env.model.nq == 24
2024-05-24T15:13:04.5172195Z         assert env.model.nv == 23
2024-05-24T15:13:04.5172855Z         assert env.model.nu == 17
2024-05-24T15:13:04.5173536Z         assert env.model.nbody == 14
2024-05-24T15:13:04.5174139Z         assert env.model.nbvh == 22
2024-05-24T15:13:04.5174815Z         assert env.model.njnt == 18
2024-05-24T15:13:04.5175671Z         assert env.model.ngeom == 18
2024-05-24T15:13:04.5176286Z         assert env.model.ntendon == 2
2024-05-24T15:13:04.5176928Z     
2024-05-24T15:13:04.5177694Z         env = gym.make(f"HumanoidStandup-{version}").unwrapped
2024-05-24T15:13:04.5178449Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5179140Z         assert env.model.nq == 24
2024-05-24T15:13:04.5179747Z         assert env.model.nv == 23
2024-05-24T15:13:04.5180405Z         assert env.model.nu == 17
2024-05-24T15:13:04.5181005Z         assert env.model.nbody == 14
2024-05-24T15:13:04.5181675Z         assert env.model.nbvh == 22
2024-05-24T15:13:04.5182266Z         assert env.model.njnt == 18
2024-05-24T15:13:04.5183002Z         assert env.model.ngeom == 18
2024-05-24T15:13:04.5183679Z         assert env.model.ntendon == 2
2024-05-24T15:13:04.5184257Z     
2024-05-24T15:13:04.5185088Z         env = gym.make(f"InvertedDoublePendulum-{version}").unwrapped
2024-05-24T15:13:04.5185774Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5186481Z         assert env.model.nq == 3
2024-05-24T15:13:04.5187137Z         assert env.model.nv == 3
2024-05-24T15:13:04.5187826Z         assert env.model.nu == 1
2024-05-24T15:13:04.5188513Z         assert env.model.nbody == 4
2024-05-24T15:13:04.5189107Z         assert env.model.nbvh == 6
2024-05-24T15:13:04.5189783Z         assert env.model.njnt == 3
2024-05-24T15:13:04.5196312Z         assert env.model.ngeom == 5
2024-05-24T15:13:04.5197025Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5197701Z     
2024-05-24T15:13:04.5199196Z         env = gym.make(f"InvertedPendulum-{version}").unwrapped
2024-05-24T15:13:04.5199995Z         assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5200687Z         assert env.model.nq == 2
2024-05-24T15:13:04.5201292Z         assert env.model.nv == 2
2024-05-24T15:13:04.5201956Z         assert env.model.nu == 1
2024-05-24T15:13:04.5202609Z         assert env.model.nbody == 3
2024-05-24T15:13:04.5203307Z         assert env.model.nbvh == 3
2024-05-24T15:13:04.5204022Z         assert env.model.njnt == 2
2024-05-24T15:13:04.5204625Z         assert env.model.ngeom == 3
2024-05-24T15:13:04.5205284Z         assert env.model.ntendon == 0
2024-05-24T15:13:04.5205865Z     
2024-05-24T15:13:04.5206527Z         if not (version == "v4" and mujoco.__version__ >= "3.0.0"):
2024-05-24T15:13:04.5207500Z             env = gym.make(f"Pusher-{version}").unwrapped
2024-05-24T15:13:04.5208269Z             assert isinstance(env, (BaseMujocoEnv, BaseMujocoPyEnv))
2024-05-24T15:13:04.5208970Z             assert env.model.nq == 11
2024-05-24T15:13:04.5209572Z             assert env.model.nv == 11
2024-05-24T15:13:04.5210240Z             assert env.model.nu == 7
2024-05-24T15:13:04.5210825Z             assert env.model.nbody == 13
2024-05-24T15:13:04.5211597Z             if mujoco.__version__ >= "3.1.4":
2024-05-24T15:13:04.5212278Z                 assert env.model.nbvh == 7
2024-05-24T15:13:04.5212955Z             elif mujoco.__version__ >= "3.1.2":
2024-05-24T15:13:04.5213720Z >               assert env.model.nbvh == 8
2024-05-24T15:13:04.5214326Z E               assert 7 == 8
2024-05-24T15:13:04.5215037Z E                +  where 7 = <mujoco._structs.MjModel object at 0x000002533F372A70>.nbvh
2024-05-24T15:13:04.5215846Z E                +    where <mujoco._structs.MjModel object at 0x000002533F372A70> = <gymnasium.envs.mujoco.pusher_v5.PusherEnv object at 0x000002533F4B7490>.model
2024-05-24T15:13:04.5216443Z 
2024-05-24T15:13:04.5217142Z tests\envs\mujoco\test_mujoco_v5.py:599: AssertionError

That is strange, it selects the mujoco==3.1.2/3.1.3 path even if mujoco 3.1.5 is installed.

This happened on Python 3.8, as jax does not support anymore python 3.8 so an old jax that forced the use of an old mujoco was installed. I think we can skip jax tests on Python 3.8 .

@traversaro
Copy link
Contributor Author

It is a bit of a long story, but a lot of strange dependency resolution are due to:

C:\Users\straversaro>conda create -n test "pygame>=2.5.2" "ffmpeg>=6.1.1"
Channels:
 - robostack-staging
 - conda-forge
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: failed

LibMambaUnsatisfiableError: Encountered problems while solving:
  - package pygame-2.5.2-py310hc90abf7_1 requires sdl2_image >=2.6.3,<3.0a0, but none of the providers can be installed

Could not solve for environment specs
The following packages are incompatible
├─ ffmpeg >=6.1.1  is installable with the potential options
│  ├─ ffmpeg 6.1.1 would require
│  │  ├─ aom >=3.7.1,<3.8.0a0 , which can be installed;
│  │  └─ svt-av1 >=1.8.0,<1.8.1.0a0 , which can be installed;
│  ├─ ffmpeg 6.1.1 would require
│  │  └─ aom >=3.8.1,<3.9.0a0 , which conflicts with any installable versions previously reported;
│  ├─ ffmpeg [6.1.1|7.0.0] would require
│  │  └─ aom >=3.9.0,<3.10.0a0 , which conflicts with any installable versions previously reported;
│  └─ ffmpeg 6.1.1 would require
│     └─ aom >=3.8.2,<3.9.0a0 , which conflicts with any installable versions previously reported;
└─ pygame >=2.5.2  is not installable because it requires
   └─ sdl2_image >=2.6.3,<3.0a0  but there are no viable options
      ├─ sdl2_image 2.6.3 would require
      │  └─ libavif >=0.11.1,<0.11.2.0a0 , which requires
      │     └─ aom >=3.5.0,<3.6.0a0 , which conflicts with any installable versions previously reported;
      └─ sdl2_image [2.6.3|2.8.0|2.8.2] would require
         └─ libavif >=1.0.1,<1.0.2.0a0  but there are no viable options
            ├─ libavif [0.11.1|1.0.1], which cannot be installed (as previously explained);
            ├─ libavif 1.0.1 would require
            │  ├─ aom >=3.7.0,<3.8.0a0 , which can be installed;
            │  └─ svt-av1 >=1.7.0,<1.7.1.0a0 , which conflicts with any installable versions previously reported;
            └─ libavif 1.0.1 would require
               └─ aom >=3.6.1,<3.7.0a0 , which conflicts with any installable versions previously reported.

@traversaro
Copy link
Contributor Author

Still a failure on python==3.8 on linux-64 :

2024-05-26T19:14:06.5113604Z =================================== FAILURES ===================================
2024-05-26T19:14:06.5114152Z __________________________ test_cartpole_vector_equiv __________________________
2024-05-26T19:14:06.5114357Z 
2024-05-26T19:14:06.5114517Z     def test_cartpole_vector_equiv():
2024-05-26T19:14:06.5114887Z         env = gym.make("CartPole-v1")
2024-05-26T19:14:06.5115320Z         envs = gym.make_vec("CartPole-v1", num_envs=1)
2024-05-26T19:14:06.5115517Z     
2024-05-26T19:14:06.5115710Z         assert env.action_space == envs.single_action_space
2024-05-26T19:14:06.5115969Z         assert env.observation_space == envs.single_observation_space
2024-05-26T19:14:06.5116448Z     
2024-05-26T19:14:06.5116593Z         # reset
2024-05-26T19:14:06.5116785Z         seed = np.random.randint(0, 1000)
2024-05-26T19:14:06.5117028Z         obs, info = env.reset(seed=seed)
2024-05-26T19:14:06.5117249Z         vec_obs, vec_info = envs.reset(seed=seed)
2024-05-26T19:14:06.5117422Z     
2024-05-26T19:14:06.5117611Z         assert obs in env.observation_space
2024-05-26T19:14:06.5117822Z         assert vec_obs in envs.observation_space
2024-05-26T19:14:06.5118041Z         assert np.all(obs == vec_obs[0])
2024-05-26T19:14:06.5118227Z         assert info == vec_info
2024-05-26T19:14:06.5118397Z     
2024-05-26T19:14:06.5118638Z         assert np.all(env.unwrapped.state == envs.unwrapped.state[:, 0])
2024-05-26T19:14:06.5118864Z     
2024-05-26T19:14:06.5119019Z         # step
2024-05-26T19:14:06.5119184Z         for i in range(100):
2024-05-26T19:14:06.5119390Z             action = env.action_space.sample()
2024-05-26T19:14:06.5119604Z             assert np.array([action]) in envs.action_space
2024-05-26T19:14:06.5119799Z     
2024-05-26T19:14:06.5119983Z             obs, reward, term, trunc, info = env.step(action)
2024-05-26T19:14:06.5120477Z             vec_obs, vec_reward, vec_term, vec_trunc, vec_info = envs.step(
2024-05-26T19:14:06.5120698Z                 np.array([action])
2024-05-26T19:14:06.5313075Z             )
2024-05-26T19:14:06.5321530Z     
2024-05-26T19:14:06.5322118Z             assert obs in env.observation_space
2024-05-26T19:14:06.5322393Z             assert vec_obs in envs.observation_space
2024-05-26T19:14:06.5322660Z             assert np.all(obs == vec_obs[0])
2024-05-26T19:14:06.5323114Z             assert reward == vec_reward
2024-05-26T19:14:06.5323375Z             assert term == vec_term
2024-05-26T19:14:06.5323620Z             assert trunc == vec_trunc
2024-05-26T19:14:06.5323849Z             assert info == vec_info
2024-05-26T19:14:06.5324073Z     
2024-05-26T19:14:06.5324355Z >           assert np.all(env.unwrapped.state == envs.unwrapped.state[:, 0])
2024-05-26T19:14:06.5324847Z E           assert False
2024-05-26T19:14:06.5325511Z E            +  where False = <function all at 0x7f03ed7a5e50>((-0.002705472...9017377164413) == array([-0.002...  0.26290174])
2024-05-26T19:14:06.5325927Z E            +    where <function all at 0x7f03ed7a5e50> = np.all
2024-05-26T19:14:06.5326225Z E               
2024-05-26T19:14:06.5326477Z E               Full diff:
2024-05-26T19:14:06.5326922Z E               - array([-0.00270547, -0.2008037 , -0.01874342,  0.26290174])
2024-05-26T19:14:06.5327223Z E               + (
2024-05-26T19:14:06.5327590Z E               +     -0.0027054723741413685,
2024-05-26T19:14:06.5327965Z E               +     -0.20080370211937526,
2024-05-26T19:14:06.5328355Z E               +     -0.018743416838483823,
2024-05-26T19:14:06.5328653Z E               +     0.2629017377164413,
2024-05-26T19:14:06.5328942Z E               + ))
2024-05-26T19:14:06.5329116Z 
2024-05-26T19:14:06.5329438Z tests/envs/test_env_implementation.py:296: AssertionError

Windows is still failing for conda-forge/libavif-feedstock#32, while aarch64 is failing now with the segfault when collecting tests, after I disabled jax due to conda-forge/jax-feedstock#144 .

@traversaro
Copy link
Contributor Author

I tried in a local build and indeed the aarch64 pytest collection was failing (even if not segfaulting) with:

ERROR tests/envs/mujoco/test_mujoco_v5.py - gymnasium.error.DependencyNotInstalled: ('Could not import mujoco_py, which is needed for MuJoCo environments older than V4', 'You could ei...
ERROR tests/wrappers/test_atari_preprocessing.py - gymnasium.error.DependencyNotInstalled: opencv-python package not installed, run `pip install "gymnasium[other]"` to get dependencies for a...

deleting these files before the pytest invocation solved the segfault in pytest collection.

@traversaro
Copy link
Contributor Author

I tried in a local build and indeed the aarch64 pytest collection was failing (even if not segfaulting) with:

ERROR tests/envs/mujoco/test_mujoco_v5.py - gymnasium.error.DependencyNotInstalled: ('Could not import mujoco_py, which is needed for MuJoCo environments older than V4', 'You could ei...
ERROR tests/wrappers/test_atari_preprocessing.py - gymnasium.error.DependencyNotInstalled: opencv-python package not installed, run `pip install "gymnasium[other]"` to get dependencies for a...

deleting these files before the pytest invocation solved the segfault in pytest collection.

The segfault were probably related to opencv requiring CDTs libraries, that however in a cross-compiling environment where tests are emulate are not available. Hopefully in the long term conda-forge/staged-recipes#25919 should mitigate these problems.

@pseudo-rnd-thoughts
Copy link
Contributor

Amazing, thanks for your hardwork @traversaro, really appreciate it (apologies about closing the PR accidently)

I've accepted all your Gymnasium PRs, is there anything super weird we don't understand yet or is it manageable problems?

@traversaro
Copy link
Contributor Author

I've accepted all your Gymnasium PRs, is there anything super weird we don't understand yet or is it manageable problems?

There are a bit of strange test failure on aarch64, but the more I look into them the more are either other packages problems or weird combinaiton of cross compilation + CDT. As the vast majority of tests on aarch64 are passing fine, I think we can just suppress the failing errors on aarch64.

Copy link
Member

@h-vetinari h-vetinari left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work! Only a few small comments. The aarch segfaults are a bit scary, but I don't think it's the fault of this recipe. We might want to try updating to latest QEMU (though that's a cf-infra task), and see if that changes anything.

Also, if python 3.8 is becoming an outsized burden, I wouldn't hesitate too much to just drop it. It's EOL in less than half a year.

recipe/meta.yaml Outdated Show resolved Hide resolved
Comment on lines +11 to +12
# https://github.com/Farama-Foundation/Gymnasium/pull/1060
- 1060.patch
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be good to be consistent and also move this into the patches folder

Co-authored-by: h-vetinari <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants