[build-system]
requires = ["maturin>=1.0,<2.0"]
build-backend = "maturin"
[tool.maturin]
python-source = "python"
module-name = "qslib._qslib"
bindings = "pyo3"
features = ["python"]
exclude = ["tiff-collection.eds"]
[project]
name = "qslib"
requires-python = ">=3.10"
description = "Library for communicating with and using the QuantStudio qPCR machine, intended for non-qPCR uses."
license = { text = "EUPL-1.2" }
readme = "README.md"
authors = [{ name = "Constantine Evans", email = "const@costi.net" }]
classifiers = [
"Development Status :: 4 - Beta",
"Programming Language :: Python",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)",
"Natural Language :: English",
"Topic :: Scientific/Engineering",
"Topic :: Scientific/Engineering :: Chemistry",
"Topic :: Scientific/Engineering :: Physics",
"Typing :: Typed",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Framework :: Matplotlib",
"Framework :: Jupyter",
]
dynamic = ["version"]
dependencies = [
"pandas >= 2",
"numpy >= 1",
"tabulate >= 0.9",
"typeguard >= 2, < 5",
"nest_asyncio >= 1.5",
"click >=8.0,<9.0",
"click-aliases",
"typing-extensions >= 4",
"toml",
"pint",
"attrs",
"matplotlib",
"markdown",
"dacite",
"polars ~= 1.20",
"pyarrow"
]
[project.optional-dependencies]
monitor = [
"aiohttp~=3.9.0b0; python_version >= '3.12'",
"matrix-nio",
"influxdb_client",
"lxml"]
altair = [
"vegafusion",
"altair",
"vl-convert-python",
]
[project.urls]
homepage = "https://github.com/cgevans/qslib/"
documentation = "https://qslib.readthedocs.org/"
source = "https://github.com/cgevans/qslib/"
changelog = "https://github.com/cgevans/qslib/blob/main/CHANGELOG.md"
tracker = "https://github.com/cgevans/qslib/issues"
download = "https://github.com/cgevans/qslib/releases"
[project.scripts]
qs-monitor = "qslib.monitor_cli:run"
qslib = "qslib.cli:cli"
[dependency-groups]
dev = [
"pytest>=8.4.2",
"pytest-cov>=6.2.1",
"setuptools",
"pytest-asyncio",
"hypothesis",
"qslib[monitor]",
"altair>=6.0.0",
"maturin>=1.12.6",
"mypy>=1.19.1",
]
docs = [
"myst_parser",
"influxdb_client",
"lxml",
"sphinx-click",
"sphinx-autodoc-typehints",
"sphinx >= 2.4",
"qslib[monitor]"
]
[tool.pytest.ini_options]
addopts = "--verbose"
norecursedirs = ["dist", "build", ".tox"]
testpaths = ["tests"]
[tool.mypy]
python_version = "3.10"
warn_unused_configs = true
ignore_missing_imports = true
[tool.ruff]
line-length = 120
[tool.hatch.envs.hatch-test]
skip-install = false
dependencies = [
"pytest>=8.4.2",
"pytest-cov>=6.2.1",
"setuptools",
"pytest-asyncio",
"hypothesis",
]
pre-install-commands=["maturin develop --uv"]
[[tool.hatch.envs.hatch-test.matrix]]
python = ["3.12", "3.13"]