[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "masque"
description = "Lithography mask library"
readme = "README.md"
license = { file = "LICENSE.md" }
authors = [
    { name="Jan Petykiewicz", email="jan@mpxd.net" },
    ]
homepage = "https://mpxd.net/code/jan/masque"
repository = "https://mpxd.net/code/jan/masque"
keywords = [
    "layout",
    "CAD",
    "EDA",
    "mask",
    "pattern",
    "lithography",
    "oas",
    "gds",
    "dxf",
    "svg",
    "OASIS",
    "gdsii",
    "gds2",
    "stream",
    ]
classifiers = [
    "Programming Language :: Python :: 3",
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Intended Audience :: Information Technology",
    "Intended Audience :: Manufacturing",
    "Intended Audience :: Science/Research",
    "License :: OSI Approved :: GNU Affero General Public License v3",
    "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
    "Topic :: Scientific/Engineering :: Visualization",
    ]
requires-python = ">=3.11"
dynamic = ["version"]
dependencies = [
    "numpy>=1.26",
    "klamath~=1.4",
    ]


[tool.hatch.version]
path = "masque/__init__.py"

[project.optional-dependencies]
oasis = ["fatamorgana~=0.11"]
dxf = ["ezdxf~=1.0.2"]
svg = ["svgwrite"]
visualize = ["matplotlib"]
text = ["matplotlib", "freetype-py"]


[tool.ruff]
exclude = [
    ".git",
    "dist",
    ]
line-length = 145
indent-width = 4
lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
lint.select = [
    "NPY", "E", "F", "W", "B", "ANN", "UP", "SLOT", "SIM", "LOG",
    "C4", "ISC", "PIE", "PT", "RET", "TCH", "PTH", "INT",
    "ARG", "PL", "R", "TRY",
    "G010", "G101", "G201", "G202",
    "Q002", "Q003", "Q004",
    ]
lint.ignore = [
    #"ANN001",   # No annotation
    "ANN002",   # *args
    "ANN003",   # **kwargs
    "ANN401",   # Any
    "SIM108",   # single-line if / else assignment
    "RET504",   # x=y+z; return x
    "PIE790",   # unnecessary pass
    "ISC003",   # non-implicit string concatenation
    "C408",     # dict(x=y) instead of {'x': y}
    "PLR09",    # Too many xxx
    "PLR2004",  # magic number
    "PLC0414",  # import x as x
    "TRY003",   # Long exception message
    ]