[project] name = "refiners" version = "0.4.0" description = "The simplest way to train and run adapters on top of foundation models" authors = [{ name = "The Finegrain Team", email = "bonjour@lagon.tech" }] license = "MIT" dependencies = [ "torch>=2.1.1", "safetensors>=0.4.0", "pillow>=10.1.0", "jaxtyping>=0.2.23", "packaging>=23.2", "numpy>=1.26.4", ] readme = "README.md" requires-python = ">= 3.10" classifiers = [ "Typing :: Typed", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Scientific/Engineering :: Artificial Intelligence", "License :: OSI Approved :: MIT License", ] [project.optional-dependencies] training = [ "bitsandbytes>=0.41.2.post2", "pydantic>=2.5.2", "prodigyopt>=1.0", "torchvision>=0.16.1", "loguru>=0.7.2", "wandb>=0.16.0", "neptune>=1.10.4", "datasets>=2.15.0", "tomli>=2.0.1", "gitpython>=3.1.43", ] test = [ "diffusers>=0.26.1", "transformers>=4.35.2", "piq>=0.8.0", "torchvision>=0.16.1", # An unofficial Python package for Meta AI's Segment Anything Model: # https://github.com/opengeos/segment-anything "segment-anything-py>=1.0", # Official Python package for HQ-SAM "segment-anything-hq>=0.3", # HQ-SAM missing dependency: # https://github.com/SysCV/sam-hq/pull/59 "timm>=0.5.0", ] conversion = [ "diffusers>=0.26.1", "transformers>=4.35.2", "segment-anything-py>=1.0", "requests>=2.26.0", "tqdm>=4.62.3", ] doc = [ # required by mkdocs to format the signatures "black>=24.1.1", "mkdocs-material>=9.5.6", "mkdocstrings[python]>=0.24.0", "mkdocs-literate-nav>=0.6.1", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.rye] managed = true dev-dependencies = [ "pyright==1.1.356", "docformatter>=1.7.5", "pytest>=8.0.0", "coverage>=7.4.1", "typos>=1.18.2", ] [tool.hatch.metadata] allow-direct-references = true [tool.rye.scripts] serve-docs = "mkdocs serve" test-cov = "coverage run -m pytest" # Work around for "Couldn't parse" errors due to e.g. opencv-python: # https://github.com/nedbat/coveragepy/issues/1653 build-html-cov = { cmd = "coverage html", env = { PYTHONWARNINGS = "ignore:Couldn't parse::coverage.report_core" } } serve-cov-report = { chain = [ "build-html-cov", "python -m http.server 8080 -b 127.0.0.1 -d htmlcov", ] } [tool.black] line-length = 120 [tool.ruff] src = ["src"] # see https://docs.astral.sh/ruff/settings/#src line-length = 120 [tool.ruff.lint] select = [ "I", # isort ] ignore = [ "F722", # forward-annotation-syntax-error, because of Jaxtyping "E731", # do-not-assign-lambda ] [tool.ruff.lint.isort] # Allow this kind of import on a single line: # # from torch import device as Device, dtype as DType # combine-as-imports = true [tool.docformatter] black = true [tool.pyright] include = ["src/refiners", "tests", "scripts"] strict = ["*"] exclude = ["**/__pycache__", "tests/weights"] reportMissingTypeStubs = "warning" [tool.coverage.run] branch = true source = ["src/refiners"] # Also apply to HTML output, where appropriate [tool.coverage.report] ignore_errors = true # see `build-html-cov` for details exclude_also = [ "def __repr__", "raise NotImplementedError", "if TYPE_CHECKING:", "class .*\\bProtocol\\):", "@(abc\\.)?abstractmethod", ] [tool.typos.default] extend-ignore-identifiers-re = ["NDArray*", "interm", "af000ded"] [tool.typos.default.extend-words] adaptee = "adaptee" # Common name for an adapter's target [tool.pytest.ini_options] filterwarnings = [ "ignore::UserWarning:segment_anything_hq.modeling.tiny_vit_sam.*", "ignore::DeprecationWarning:timm.models.layers.*", "ignore::DeprecationWarning:timm.models.registry.*" ]