[project] name = "rc-foundry" dynamic = ["version"] description = "Shared utilities and training infrastructure for biomolecular structure prediction models." readme = "README.md" requires-python = ">=3.12" authors = [ { name = "Institute for Protein Design", email = "contact@ipd.uw.edu" }, ] license = { file = "LICENSE.md" } classifiers = [ "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering :: Bio-Informatics", "License :: OSI Approved :: BSD License", ] dependencies = [ # ... configuration & CLI "rootutils>=1.0.7,<1.1", "hydra-core>=1.3.0,<1.4", "environs>=11.0.0,<12", # ... logging "wandb>=0.15.10,<1", "rich>=13.9.4", # ... typing & documentation "jaxtyping>=0.2.17,<1", "beartype>=0.18.0,<1", "typer>=0.20.0,<1", # ... ml tools (core) "torch>=2.2.0,<3", "lightning>=2.5.0", "loralib>=0.1.1", "einops>=0.8.0,<1", "einx>=0.1.0,<1", "opt_einsum>=3.4.0,<4", "dm-tree>=0.1.6,<1", "zstandard", "pandas", # "biotite", "atomworks[ml]>=2.1.1", "ipykernel>=6.31.0", "assertpy", "toolz", ] [project.optional-dependencies] rfd3 = [ "pydantic>=2.8", ] rf3 = [ "cuequivariance_ops_cu12>=0.6.1; sys_platform == 'linux'", "cuequivariance_ops_torch_cu12>=0.6.1; sys_platform == 'linux'", "cuequivariance_torch>=0.6.1; sys_platform == 'linux'", ] all = [ "rc-foundry[rfd3]", "rc-foundry[rf3]", ] dev = [ # Linters & formatters "assertpy", "ruff==0.8.3", "ipdb", # Debugger/interactive "debugpy>=1.8.5,<2", "ipykernel>=6.29.4,<7", # Testing tools "pytest>=8.2.0,<9", # testing framework "pytest-testmon>=2.1.1,<3", # run only tests related to changed code "pytest-xdist>=3.6.1,<4", # run tests in parallel "pytest-dotenv>=0.5.2,<1", # load environment variables from .env file "pytest-cov>=4.1.0,<5", # generate coverage report "pytest-benchmark>=5.0.0,<6", # benchmark tests for speed "atomworks[ml,dev,openbabel]>=2.1.1", "pre-commit" ] [project.scripts] rf3 = "rf3.cli:app" rfd3 = "rfd3.cli:app" mpnn = "mpnn.inference:main" foundry = "foundry_cli.download_checkpoints:app" # Build settings ---------------------------------------------------------------------- [build-system] requires = [ "hatchling", "hatch-vcs == 0.4", ] build-backend = "hatchling.build" [tool.hatch.version] source = "vcs" fallback-version = "0.0.0" local-scheme = "no-local-version" [tool.hatch.build.hooks.vcs] version-file = "src/foundry/version.py" tag-pattern = "^v(?P.*)$" [tool.hatch.metadata] allow-direct-references = true [tool.hatch.build.targets.wheel] packages = [ "src/foundry", "src/foundry_cli", "models/rf3/src/rf3", "models/rfd3/src/rfd3", "models/mpnn/src/mpnn", ] [tool.hatch.build.targets.wheel.force-include] "models/rfd3/configs" = "rfd3/configs" "models/rf3/configs" = "rf3/configs" # Formatting & linting settings ------------------------------------------------------- [tool.ruff] line-length = 88 indent-width = 4 target-version = "py310" exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".git-rewrite", ".hg", ".ipynb_checkpoints", ".mypy_cache", ".nox", ".pants.d", ".pyenv", ".pytest_cache", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", ".vscode", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "site-packages", "env", ".venv", "venv", "*.ipynb", "dev.py", "archive", ] [tool.ruff.format] # Like Black, use double quotes for strings. quote-style = "double" # Like Black, indent with spaces, rather than tabs. indent-style = "space" # Like Black, respect magic trailing commas. skip-magic-trailing-comma = false # Like Black, automatically detect the appropriate line ending. line-ending = "auto" # Enable auto-formatting of code examples in docstrings. Markdown, # reStructuredText code/literal blocks and doctests are all supported. docstring-code-format = true docstring-code-line-length = 88 [tool.ruff.lint] # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" # Sort imports extend-select = ["I", "F401"] ignore = [ "F722", # for jaxtyping shape annotation "F821", # temporary to avoid jaxtyping warnings, see: https://github.com/astral-sh/ruff/issues/17386 "E741", # enable us to use variables like "L" ] [tool.pyright] typeCheckingMode = "off" [dependency-groups] dev = [ "build>=1.3.0", "hatchling>=1.28.0", ]