-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
134 lines (123 loc) · 3.91 KB
/
Copy pathpyproject.toml
File metadata and controls
134 lines (123 loc) · 3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
[project]
name = "pvlearn"
dynamic = ["version"]
description = "Self-learning PV production forecast library and service — teach your home to predict its own solar production."
readme = { file = "README.md", content-type = "text/markdown" }
requires-python = ">=3.12,<4"
license = "MIT"
authors = [
{ name = "Johannes Ott", email = "info@johannes-ott.net" }
]
keywords = ["photovoltaic", "solar", "forecast", "machine learning", "home automation"]
classifiers = [
"Development Status :: 2 - Pre-Alpha",
"Topic :: Home Automation",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Natural Language :: English",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
# Runtime and optional dependencies are pinned exactly, matching solaredge2mqtt
# and learninghouse. Updates arrive as individual dependabot pull requests that
# run the full test suite, rather than silently on whatever day a transitive
# resolve changes. The build-system requirements below stay on lower bounds:
# they shape how the wheel is built, not how the installed package behaves, and
# pinning them breaks builds on newer setuptools for no reproducibility gain.
#
# scikit-learn is the one pin that is load-bearing rather than merely tidy: the
# frozen Phase 0 baseline is only reproducible against 1.9.0. Verified that the
# baseline reproduces bit-identically across numpy 2.4.6/2.5.1, pandas
# 3.0.3/3.0.5 and scipy 1.17.1/1.18.0 as long as scikit-learn does not move, so
# a scikit-learn bump must regenerate the baseline and say so in its changelog.
#
# numpy 2.5 and scipy 1.18 require Python 3.12, which is why 3.11 is not
# supported.
dependencies = [
"numpy==2.5.1",
"pandas==3.0.5",
"scikit-learn==1.9.0",
"scipy==1.18.0",
"pydantic==2.13.4",
"astral==3.2",
"joblib==1.5.3",
# Season feature in TimeEncoder. Phase 1b drops this in favor of astral
# alone (see chapter 3.2/6 of the Umsetzungsplan); kept for Phase 1a's
# bit-identical extraction.
"ephem==4.2.1",
]
[project.urls]
Homepage = "https://github.com/LearningHouseService/pvlearn"
Documentation = "https://github.com/LearningHouseService/pvlearn/blob/main/README.md"
Repository = "https://github.com/LearningHouseService/pvlearn"
Issues = "https://github.com/LearningHouseService/pvlearn/issues"
[project.optional-dependencies]
dev = [
"setuptools-scm[toml]==10.2.1",
"ruff==0.16.1",
"tomli==2.4.1",
"pyright==1.1.411",
"pytest==9.1.1",
"pytest-asyncio==1.4.0",
"pytest-cov==7.1.0",
"pytest-xdist==3.8.0",
# Reading the Parquet reference fixture. The library itself takes DataFrames
# from its caller and never touches Parquet, so this stays a test dependency.
"pyarrow==25.0.0",
]
service = [
"fastapi==0.141.1",
"uvicorn[standard]==0.52.1",
"httpx==0.28.1",
"pyjwt==2.13.0",
]
[build-system]
requires = [
"setuptools>=64",
"wheel",
"setuptools-scm[toml]>=8"
]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["."]
include = ["pvlearn*"]
exclude = ["tests*"]
[tool.setuptools_scm]
version_scheme = "post-release"
local_scheme = "node-and-date"
fallback_version = "0.0.0"
[tool.ruff]
line-length = 88
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I"]
ignore = []
fixable = ["ALL"]
unfixable = []
[tool.ruff.format]
quote-style = "double"
skip-magic-trailing-comma = false
indent-style = "space"
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
addopts = "-v --tb=short -n auto --dist=worksteal"
markers = [
"slow"
]
[tool.coverage.run]
source = ["pvlearn"]
branch = true
omit = [
"*/tests/*",
"*/__pycache__/*",
]
[tool.coverage.report]
fail_under = 90
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise NotImplementedError",
"if TYPE_CHECKING:",
]