-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
100 lines (91 loc) · 3.21 KB
/
Copy pathpyproject.toml
File metadata and controls
100 lines (91 loc) · 3.21 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
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "monochromizer"
version = "0.1.0"
description = "Convert images to printable monochrome compositions: contours, halftoning, stippling, and hatching, layered."
requires-python = ">=3.11"
authors = [{ name = "fjk", email = "f.j.knoeppel@gmail.com" }]
readme = "README.md"
license = { file = "LICENSE" }
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Science/Research",
"Intended Audience :: Other Audience",
"License :: Other/Proprietary License",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Multimedia :: Graphics",
"Topic :: Artistic Software",
]
dependencies = [
"numpy>=1.26",
"scipy>=1.11",
"scikit-image>=0.22",
"pillow>=10.0",
"svgwrite>=1.4",
"shapely>=2.0",
"PySide6>=6.6",
]
[project.optional-dependencies]
# Native acceleration / specialised solvers. The core catalog imports and
# runs without these; see src/monochromizer/_optional.py.
#
# ``fast``: numba JITs a few hot per-pixel loops (mask_trace SVG tracing,
# Pang structure-aware SA, the reaction-diffusion woodcut). Without it the
# same code runs as plain Python — correct, just slower (e.g. 512² SA ~15
# min instead of ~2).
fast = ["numba>=0.60"]
# ``ot``: CHOLMOD via scikit-sparse, required by the Nader / de Goes
# optimal-transport stipplers for SPD factorisation of the singular
# weighted Laplacian with nullspace deflation. SciPy's splu is *not* a
# faithful substitute (the 2-D-nullspace system stalls without CHOLMOD),
# so these two algorithms raise a clear error if ``ot`` is not installed.
ot = ["scikit-sparse>=0.4.13"]
# Everything, for full functionality.
all = ["numba>=0.60", "scikit-sparse>=0.4.13"]
dev = [
"pytest>=8.0",
"pytest-qt>=4.4",
"ruff>=0.5",
# the test suite exercises the JIT and CHOLMOD code paths
"numba>=0.60",
"scikit-sparse>=0.4.13",
]
[project.scripts]
monochromizer = "monochromizer.app:main"
[tool.hatch.build.targets.wheel]
packages = ["src/monochromizer"]
[tool.hatch.build.targets.sdist]
# Keep the distribution at code size: the reference papers (~237 MB,
# copyrighted PDFs), validation inputs/outputs (~160 MB), the README/paper
# figure binaries (docs/, ~15 MB) and the private engineering notes never
# belong in a published artifact.
exclude = [
"papers/",
"images/",
"validation/",
"docs/",
"NOTES.md",
"blog_post_draft.md",
]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "B", "UP", "W"]
[tool.ruff.lint.per-file-ignores]
# validate.py's per-algorithm sweep config is a deliberately column-aligned
# one-line-per-algorithm table; wrapping it to satisfy E501 would destroy
# the alignment that makes it readable.
"validation/validate.py" = ["E501"]
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-q --strict-markers"
# --strict-markers hard-errors on any unregistered @pytest.mark.* — register
# markers here before using them (placeholder keeps the suite from breaking
# the day the first custom marker is added).
markers = []