[build-system]
requires = [
    "hatchling==1.31.0",
    "hatch-vcs==0.5.0",
    "executorlib",
    "flowrep",
    "pint",
    "pyiron_snippets",
    "rdflib",
    "semantikon",
    "typeguard",
]
build-backend = "hatchling.build"

[project]
name = "pyiron_workflow"
description = "pyiron_workflow - Graph-and-node based workflow tools."
readme = "docs/README.md"
keywords = [ "pyiron",]
requires-python = ">=3.11, <3.14"
classifiers = [
    "Development Status :: 4 - Beta",
    "Topic :: Scientific/Engineering",
    "License :: OSI Approved :: BSD License",
    "Intended Audience :: Science/Research",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
]
dependencies = [
    "executorlib==1.10.1",
    "flowrep==0.6.2",
    "pint==0.25.3",
    "pyiron_snippets==1.4.0",
    "rdflib==7.6.0",
    "semantikon==1.4.0",
    "typeguard==4.5.2",
]
dynamic = [ "version",]
authors = [
    { name = "Liam Huber", email = "liamhuber@greyhavensolutions.com" },
]
license = "BSD-3-Clause"
license-files = ["LICENSE"]

[project.urls]
Homepage = "https://github.com/pyiron/pyiron_workflow"
Documentation = "https://pyiron-workflow.readthedocs.io"
Repository = "https://github.com/pyiron/pyiron_workflow"

[project.optional-dependencies]
cluster = [
    "pysqa==0.4.3",
    "h5py==3.16.0",
]
notebook = [
    "python-workflow-definition==0.1.5",
]
fleche = [
    "fleche==0.21.0",
]

[tool.hatch.build]
include = [
    "src/pyiron_workflow"
]

[tool.hatch.version]
source = "vcs"

[tool.hatch.build.hooks.vcs]
version-file = "src/pyiron_workflow/_version.py"

[tool.hatch.build.targets.sdist]
include = [
    "src/pyiron_workflow"
]

[tool.hatch.build.targets.wheel]
packages = [
    "src/pyiron_workflow"
]

[tool.ruff]
exclude = ["docs", "notebooks"]

[tool.ruff.lint]
select = [
    # pycodestyle
    "E",
    # Pyflakes
    "F",
    # pyupgrade
    "UP",
    # flake8-bugbear
    "B",
    # flake8-simplify
    "SIM",
    # isort
    "I",
    # flake8-comprehensions
    "C4",
    # eradicate
    "ERA",
    # pylint
    "PL",
]
ignore = [
    # ignore line-length violations
    "E501",
    # Too many arguments in function definition
    "PLR0913",
    # Magic value used in comparison
    "PLR2004",
    # Import alias does not rename original package
    "PLC0414",
    # Too many branches
    "PLR0912",
    # Too many statements
    "PLR0915",
    # Too many return statements
    "PLR0911",
    # Too many not-keyword-only arguments,
    "PLR0917"
]

[tool.black]
extend-exclude = '''
(
  ^/docs
)
'''

[tool.mypy]
exclude = [
    "^docs/conf\\.py$",
    "^tests/",
]
ignore_missing_imports = true
strict_equality = true
