[build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.poetry] name = "tianshou" version = "0.5.1" description = "A Library for Deep Reinforcement Learning" authors = ["TSAIL "] license = "MIT" readme = "README.md" homepage = "https://github.com/thu-ml/tianshou" classifiers = [ # 3 - Alpha # 4 - Beta # 5 - Production/Stable "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", ] exclude = ["test/*", "examples/*", "docs/*"] [tool.poetry.dependencies] python = "^3.11" gymnasium = "^0.28.0" h5py = "^3.9.0" numba = "^0.57.1" numpy = "^1" overrides = "^7.4.0" packaging = "*" pettingzoo = "^1.22" tensorboard = "^2.5.0" # Torch 2.0.1 causes problems, see https://github.com/pytorch/pytorch/issues/100974 torch = "^2.0.0, !=2.0.1, !=2.1.0" tqdm = "*" virtualenv = [ # special sauce b/c of a flaky bug in poetry on windows # see https://github.com/python-poetry/poetry/issues/7611#issuecomment-1466478926 { version = "^20.4.3,!=20.4.5,!=20.4.6" }, { version = "<20.16.4", markers = "sys_platform == 'win32'" }, ] # TODO: add versions atari_py = {version = "*", optional = true} envpool = {version = "^0.8.2", optional = true} mujoco_py = {version = "*", optional = true} opencv_python = {version = "*", optional = true} pybullet = {version = "*", optional = true} [tool.poetry.extras] atari = ["atari_py", "opencv-python"] mujoco = ["mujoco_py"] pybullet = ["pybullet"] envpool = ["envpool"] [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] black = "^23.7.0" docstring-parser = "^0.15" jinja2 = "*" jsonargparse = "^4.24.1" jupyter = "^1.0.0" mypy = "^1.4.1" # networkx is used in a test networkx = "*" poethepoet = "^0.20.0" pre-commit = "^3.3.3" pygame = "^2.1.0" pymunk = "^6.2.1" pytest = "*" pytest-cov = "*" # Ray currently causes issues when installed on windows server 2022 in CI # If users want to use ray, they should install it manually. ray = {version = "^2", markers = "sys_platform != 'win32'"} ruff = "^0.0.285" scipy = "*" sphinx = "<7" sphinx_rtd_theme = "*" sphinxcontrib-bibtex = "*" sphinxcontrib-spelling = "^8.0.0" wandb = "^0.12.0" [tool.mypy] allow_redefinition = true check_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_defs = true ignore_missing_imports = true no_implicit_optional = true pretty = true show_error_codes = true show_error_context = true show_traceback = true strict_equality = true strict_optional = true warn_no_return = true warn_redundant_casts = true warn_unreachable = true warn_unused_configs = true warn_unused_ignores = true exclude = "^build/|^docs/|^tianshou/utils/(string|logging).py|^temp*.py" [tool.doc8] max-line-length = 1000 [tool.black] line-length = 100 target-version = ["py311"] [tool.ruff] select = [ "ASYNC", "B", "C4", "C90", "COM", "D", "DTZ", "E", "F", "FLY", "G", "I", "ISC", "PIE", "PLC", "PLE", "PLW", "RET", "RUF", "RSE", "SIM", "TID", "UP", "W", "YTT", ] ignore = [ "SIM118", # Needed b/c iter(batch) != iter(batch.keys()). See https://github.com/thu-ml/tianshou/issues/922 "E501", # line too long. black does a good enough job "E741", # variable names like "l". this isn't a huge problem "B008", # do not perform function calls in argument defaults. we do this sometimes "B011", # assert false. we don't use python -O "B028", # we don't need explicit stacklevel for warnings "D100", "D101", "D102", "D104", "D105", "D107", "D203", "D213", "D401", "D402", "D106", "D205", # docstring stuff "G004", # logging (no f-strings) "RUF012", # disallows mutable class variables unless annotated "DTZ005", # we don't need that "RET505", # sacrifices visual discernability of control flow paths for brevity (regarding return statements) # remaining rules from https://github.com/psf/black/blob/main/.flake8 (except W503) # this is a simplified version of config, making vscode plugin happy "E402", "E501", "E701", "E731", "C408", "E203" ] unfixable = [ "F841", # unused variable. ruff keeps the call, but mostly we want to get rid of it all "F601", # automatic fix might obscure issue "F602", # automatic fix might obscure issue "B018", # automatic fix might obscure issue ] extend-fixable = [ "F401", # unused import "B905" , # bugbear ] ignore-init-module-imports = true # without this, "unused" imports in __init__ will be auto-removed, breaking imports target-version = "py311" [tool.ruff.mccabe] max-complexity = 20 [tool.ruff.per-file-ignores] "test/**" = ["D103"] "docs/**" = ["D103"] "examples/**" = ["D103"] [tool.poetry_bumpversion.file."tianshou/__init__.py"] [tool.poetry-sort] move-optionals-to-bottom = true # keep relevant parts in sync with pre-commit [tool.poe.tasks] # https://github.com/nat-n/poethepoet test = "pytest test --cov=tianshou --cov-report=xml --cov-report=term-missing --durations=0 -v --color=yes" test-reduced = "pytest test/base test/continuous --cov=tianshou --durations=0 -v --color=yes" _black_check = "black --check ." _ruff_check = "ruff check ." _black_format = "black ." _ruff_format = "ruff --fix ." lint = ["_black_check", "_ruff_check"] _poetry_install_sort_plugin = "poetry self add poetry-plugin-sort" _poery_sort = "poetry sort" format = ["_black_format", "_ruff_format", "_poetry_install_sort_plugin", "_poery_sort"] _autogen_rst = "python docs/autogen_rst.py" _spellcheck = "sphinx-build -W -b spelling docs docs/_build" _doc_build = "sphinx-build -W -b html docs docs/_build" doc-clean = "rm -rf docs/_build" doc-build = ["_autogen_rst", "_spellcheck", "_doc_build"] type-check = "mypy tianshou"