[build-system]
requires = ["maturin>=1.7,<2.0"]
build-backend = "maturin"
[project]
name = "frequenz-resampling"
description = "Resampling a stream of samples to a given interval."
readme = "README.md"
license = { text = "MIT" }
keywords = ["frequenz", "python", "rust"]
classifiers = [
"Programming Language :: Rust",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
]
requires-python = ">= 3.11, < 4"
dynamic = ["version"]
[[project.authors]]
name = "Frequenz Energy-as-a-Service GmbH"
email = "floss@frequenz.com"
[tool.maturin]
features = ["python"]
module-name = "frequenz.resampling._rust_backend"
profile = "release"
bindings = "pyo3"
[project.optional-dependencies]
dev-flake8 = [
"flake8 == 7.3.0",
"flake8-docstrings == 1.7.0",
"flake8-pyproject == 1.2.3",
"pydoclint == 0.7.6",
"pydocstyle == 6.3.0",
]
dev-formatting = ["black == 25.9.0", "isort == 7.0.0"]
dev-mkdocs = [
"black == 25.9.0",
"Markdown==3.9",
"mike == 2.1.3",
"mkdocs-gen-files == 0.5.0",
"mkdocs-literate-nav == 0.6.2",
"mkdocs-macros-plugin == 1.4.0",
"mkdocs-material == 9.6.21",
"mkdocstrings[python] == 0.30.1",
"mkdocstrings-python == 1.18.2",
"frequenz-repo-config[lib] == 0.13.5",
]
dev-mypy = [
"mypy == 1.18.2",
"types-Markdown == 3.9.0.20250906",
"types-setuptools == 80.9.0.20250822",
"frequenz-resampling[dev-mkdocs,dev-noxfile,dev-pytest]",
]
dev-noxfile = ["nox == 2025.10.16", "frequenz-repo-config[lib] == 0.13.5"]
dev-pylint = [
"pylint == 4.0.2",
"frequenz-resampling[dev-mkdocs,dev-noxfile,dev-pytest]",
]
dev-pytest = [
"pandas == 2.3.3",
"pandas-stubs == 2.3.2.250926",
"pytest == 8.4.2",
"pytest-mock == 3.15.1",
"pytest-asyncio == 1.2.0",
"async-solipsism == 0.8",
"hypothesis == 6.142.5",
]
dev-rust-build = ["maturin>=1.7,<2.0"]
dev = [
"frequenz-resampling[dev-mkdocs,dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest,dev-rust-build]",
]
[tool.black]
line-length = 88
target-version = ['py311']
include = '\.pyi?$'
[tool.isort]
profile = "black"
line_length = 88
src_paths = ["benchmarks", "examples", "python", "tests"]
[tool.flake8]
max-line-length = 100
extend-ignore = [
"E203",
"W503",
]
style = "google"
check-return-types = false
check-yield-types = false
arg-type-hints-in-docstring = false
arg-type-hints-in-signature = true
allow-init-docstring = true
check-class-attributes = false
[tool.pylint.similarities]
ignore-comments = ['yes']
ignore-docstrings = ['yes']
ignore-imports = ['no']
min-similarity-lines = 40
[tool.pylint.messages_control]
disable = [
"too-few-public-methods",
"too-many-return-statements",
"wrong-import-order",
"ungrouped-imports",
"unsubscriptable-object",
"no-member",
"f-string-without-interpolation",
"redefined-outer-name",
"unused-import",
"line-too-long",
"missing-function-docstring",
"redefined-outer-name",
"unnecessary-lambda-assignment",
"unused-import",
"unused-variable",
]
[tool.pylint.design]
max-attributes = 12
[tool.pytest.ini_options]
addopts = "-W=all -Werror -Wdefault::DeprecationWarning -Wdefault::PendingDeprecationWarning -vv"
testpaths = ["tests"]
asyncio_mode = "auto"
required_plugins = ["pytest-asyncio", "pytest-mock"]
markers = [
"integration: integration tests (deselect with '-m \"not integration\"')",
]
[tool.mypy]
explicit_package_bases = true
namespace_packages = true
no_incremental = true
packages = ["frequenz.resampling"]
strict = true
[[tool.mypy.overrides]]
module = ["frequenz.resampling"]
ignore_missing_imports = true
[tool.setuptools_scm]
version_scheme = "post-release"