Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
121 lines (111 loc) · 3.85 KB
/
Copy pathpyproject.toml
File metadata and controls
121 lines (111 loc) · 3.85 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
[build-system]
requires = ["setuptools>=77", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "hmm-studio"
version = "1.1.0"
description = "Constrained Baum-Welch HMM engine with a visual topology editor and web UI."
readme = "README.md"
requires-python = ">=3.11"
authors = [{name = "Robin Denis", email = "robin.denis1207@gmail.com"}]
license = "MIT"
keywords = [
"hmm", "hidden-markov-model", "baum-welch", "viterbi",
"constrained-em", "topology", "nhmm", "sequence-modeling",
"bayesian", "dirichlet-prior", "fastapi", "react",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Environment :: Web Environment",
"Intended Audience :: Science/Research",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Scientific/Engineering :: Information Analysis",
"Topic :: Scientific/Engineering :: Mathematics",
"Typing :: Typed",
]
dependencies = [
"numpy>=1.26",
"pandas>=2.0",
"hmmlearn>=0.3,<0.4",
"scikit-learn>=1.3",
"pyyaml>=6.0",
"typer[all]>=0.12",
"pyarrow>=15.0",
]
[project.optional-dependencies]
web = [
"fastapi>=0.115",
"uvicorn[standard]>=0.30",
"sqlmodel>=0.0.16",
"python-multipart>=0.0.9",
"httpx>=0.27",
"openpyxl>=3.1", # required for pd.read_excel on .xlsx files (warehouse formats)
]
dcor = ["dcor>=0.6"]
dev = [
"pytest>=8.0",
"pytest-cov>=5.0",
"pytest-timeout>=2.3", # per-test timeout; turns CI hangs into clean fails
"hypothesis>=6.100",
"ruff>=0.5",
"black>=24.0",
]
docs = [
"mkdocs>=1.6",
"mkdocs-material>=9.5",
]
bayesian = [
# Phase A.6 — BayesianHMMBackend via NUTS sampling.
# Heavy ~150 MB install ; opt-in. Required only if you import
# hmm_core.backends.bayesian_backend.BayesianHMMBackend.
"pymc>=6.0",
"arviz>=1.0",
]
[project.urls]
Homepage = "https://github.com/RoJLD/HMMstudio"
Repository = "https://github.com/RoJLD/HMMstudio"
Issues = "https://github.com/RoJLD/HMMstudio/issues"
Documentation = "https://rojld.github.io/HMMstudio/"
Changelog = "https://github.com/RoJLD/HMMstudio/blob/main/CHANGELOG.md"
[project.scripts]
hmm-fit = "hmm_core.cli:app"
hmm-studio = "hmm_studio.cli:app"
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
hmm_studio = ["server/static/**/*"]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
# `--timeout=180` is a defensive ceiling: the slowest legitimate test is the
# Bayesian NUTS suite at ~30-60s. Setting 180s turns CI hangs (e.g. fork-on-Linux
# coverage deadlocks with ProcessPoolExecutor) into clean test failures instead
# of 25-min runner waste. Tests can override with @pytest.mark.timeout(N).
addopts = "-ra --strict-markers --timeout=180"
markers = [
"slow: tests that take >10s (Bayesian NUTS sampling, recovery tests, etc.). Skip with -m 'not slow'.",
]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint.per-file-ignores]
# `with pm.Model() as model:` is the canonical PyMC idiom — the variable
# is bound for the `with` block and downstream `pm.*` calls read it
# implicitly via the model-stack, even though no name appears in the inner
# scope. F841 (assigned-but-never-used) is a false positive here.
"src/hmm_core/backends/bayesian_backend.py" = ["F841"]
# Local imports colocated with their single consumer (auto_grid + test
# helpers). Hoisting them to the top would obscure the pairing.
"src/hmm_core/selection.py" = ["E402"]
"tests/test_selection.py" = ["E402"]
[tool.black]
line-length = 100
target-version = ["py311"]