[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "fermilink"
version = "0.3.10"
description = "Write a goal.md, FermiLink takes care of autonomous scientific simulations and optimization at both laptops and HPCs"
readme = "README.md"
requires-python = ">=3.11"
authors = [{name = "FermiLink"}]
classifiers = [
  "Development Status :: 4 - Beta",
  "Intended Audience :: Science/Research",
  "License :: OSI Approved :: GNU Affero General Public License v3",
  "Operating System :: OS Independent",
  "Programming Language :: Python",
  "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 :: Physics",
  "Topic :: Scientific/Engineering :: Chemistry",
]
keywords = [
  "ai-agent",
  "autonomous-simulation",
  "scientific-computing",
  "hpc",
  "multi-domain",
  "computational-science",
  "workflow-automation",
]
dependencies = [
  "fastapi>=0.110",
  "uvicorn>=0.23",
  "chainlit>=2.0",
  "httpx>=0.27",
  "pytest>=8.0",
  "pyyaml>=6.0",
  "pydantic>=2.6",
  "py-spy>=0.3",
  "aiofiles>=23.0",
  "passlib>=1.7",
  "SQLAlchemy>=2.0",
  "aiosqlite>=0.19",
  "greenlet>=3.0",
]

[project.optional-dependencies]
dev = [
  "pytest>=8.0",
  "black>=24.3",
  "flake8>=7.0",
  "pre-commit>=3.6",
]

docs = [
  "sphinx>=7.2",
  "furo>=2024.1.29",                
  "sphinx-autodoc-typehints>=2.1",  
  "sphinxcontrib-napoleon>=0.7",    
  "myst-parser>=3.0",               
  "sphinx-copybutton>=0.5",         
  "sphinx-design>=0.6",             
  "nbsphinx>=0.9",
  "sphinxcontrib-youtube",
  "nbconvert", 
  "ipykernel",
  "pandoc"                 
]
 
[project.scripts]
fermilink = "fermilink.cli:main"
fermilink-init = "fermilink.cli.commands.workspace:fermilink_init_main"
fermilink-clean = "fermilink.cli.commands.workspace:fermilink_clean_main"

[tool.setuptools]
package-dir = {"" = "src"}
include-package-data = true
script-files = [
  "bin/fermilink-optimize-python",
  "bin/fermilink-optimize-cpp",
]

[tool.setuptools.packages.find]
where = ["src"]
include = ["fermilink*"]

[tool.setuptools.package-data]
fermilink = [
  "public/*",
  "software/*",
  "exploop/*",
  "data/**/*",
  "tools/**/*",
  "_workspace_payload/*",
  "_workspace_payload/**/*",
]

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-q"

[tool.black]
line-length = 88
target-version = ["py39", "py310", "py311", "py312", "py313"]
include = '\.pyi?$'
exclude = '''
(
  /(
      \.direnv
    | \.eggs
    | \.git
    | \.mypy_cache
    | \.pytest_cache
    | \.ruff_cache
    | \.venv
    | build
    | dist
    | .*\.egg-info
  )/
)
'''

[tool.flake8]
max-line-length = 88
extend-ignore = [
  "E203",  
  "W503",  
]
per-file-ignores = [
  "__init__.py:F401,F403,F405",
  "src/**/__init__.py:F401,F403,F405",
]
