diff --git a/pkgs/development/python-modules/gym/default.nix b/pkgs/development/python-modules/gym/default.nix index a2951074a122..d93d392314fb 100644 --- a/pkgs/development/python-modules/gym/default.nix +++ b/pkgs/development/python-modules/gym/default.nix @@ -1,41 +1,129 @@ { lib, + stdenv, buildPythonPackage, fetchFromGitHub, - numpy, + + # build-system + setuptools, + + # dependencies cloudpickle, + numpy, gym-notices, importlib-metadata, pythonOlder, + + # tests + moviepy, + pybox2d, + pygame, + pytestCheckHook, + opencv-python, }: buildPythonPackage rec { pname = "gym"; version = "0.26.2"; - format = "setuptools"; + pyproject = true; src = fetchFromGitHub { owner = "openai"; - repo = pname; + repo = "gym"; tag = version; hash = "sha256-uJgm8l1SxIRC5PV6BIH/ht/1ucGT5UaUhkFMdusejgA="; }; - propagatedBuildInputs = [ + # Fix numpy2 compatibility + postPatch = '' + substituteInPlace gym/envs/classic_control/acrobot.py \ + --replace-fail "np.float_" "np.float64" + + substituteInPlace gym/utils/passive_env_checker.py \ + --replace-fail "np.bool8" "np.bool" + + substituteInPlace tests/envs/test_action_dim_check.py \ + --replace-fail "np.cast[dtype](OOB_VALUE)" "np.asarray(OOB_VALUE, dtype=dtype)" \ + --replace-fail "np.alltrue" "np.all" + + substituteInPlace tests/spaces/test_box.py \ + --replace-fail "np.bool8" "np.bool" \ + --replace-fail "np.complex_" "np.complex128" + + substituteInPlace tests/wrappers/test_record_episode_statistics.py \ + --replace-fail "np.alltrue" "np.all" + ''; + + build-system = [ + setuptools + ]; + + dependencies = [ cloudpickle numpy gym-notices ] ++ lib.optionals (pythonOlder "3.10") [ importlib-metadata ]; - # The test needs MuJoCo that is not free library. - doCheck = false; - pythonImportsCheck = [ "gym" ]; - meta = with lib; { + nativeCheckInputs = [ + moviepy + opencv-python + pybox2d + pygame + pytestCheckHook + ]; + + disabledTests = + [ + # TypeError: Converting from sequence to b2Vec2, expected int/float arguments index 0 + "test_box_actions_out_of_bound" + "test_env_determinism_rollout" + "test_envs_pass_env_checker" + "test_frame_stack" + "test_make_autoreset_true" + "test_passive_checker_wrapper_warnings" + "test_pickle_env" + "test_render_modes" + + # TypeError: in method 'b2RevoluteJoint___SetMotorSpeed', argument 2 of type 'float32' + "test_box_actions_out_of_bound" + + # TypeError: exceptions must be derived from Warning, not + "test_dict_init" + + # ValueError: setting an array element with a sequence. + # The requested array has an inhomogeneous shape after 1 dimensions. + # The detected shape was (2,) + inhomogeneous part + "test_sample_contains" + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + # Fatal Python error: Aborted + # gym/envs/classic_control/cartpole.py", line 227 in render + "test_autoclose" + "test_call_async_vector_env" + "test_call_sync_vector_env" + "test_human_rendering" + "test_make_render_mode" + "test_order_enforcing" + "test_record_simple" + "test_record_video_reset" + "test_record_video_step_trigger" + "test_record_video_using_default_trigger" + "test_record_video_within_vecto" + "test_text_envs" + ]; + + disabledTestPaths = lib.optionals stdenv.hostPlatform.isDarwin [ + # Fatal Python error: Aborted + # gym/utils/play.py", line 62 in __init__ + "tests/utils/test_play.py" + ]; + + meta = { description = "Toolkit for developing and comparing your reinforcement learning agents"; homepage = "https://www.gymlibrary.dev/"; - license = licenses.mit; - maintainers = with maintainers; [ hyphon81 ]; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ GaetanLepage ]; }; }