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

[project]
name = "sebeni"
version = "0.1.2"
description = "Self-aware morphotactic pattern generation toolkit for extremely low-resource languages"
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.10"
authors = [{ name = "s7d11" }]
keywords = ["nlp", "morphology", "grpo", "elrl", "manding"]
classifiers = [
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
]
dependencies = [
    "typer>=0.9.0",
    "rich>=12.0.0",
    "pyyaml>=6.0",
    "jinja2>=3.1",
    "numpy>=1.23",
    "pydantic>=2.0",
    # Runtime dependencies of maslinych/daba's headless parser. Install Daba
    # itself from GitHub with --no-deps so its wxPython GUI dependency is skipped.
    # setuptools provides pkg_resources (mparser.py). Pin below 81: 82+
    # removed the module; 81 emits a deprecation warning but still imports.
    "setuptools>=65,<81",
    "funcparserlib",
    "intervaltree",
    "pytrie",
    "attrdict3",
    "regex",
    "torchao>=0.16.0",
    "bitsandbytes"
]

[project.optional-dependencies]
train = [
    "torch",
    "transformers",
    "trl>=0.14",
    "peft",
    "datasets",
    "accelerate",
    "trackio",
]
wandb = [
    "wandb",
]
distil = [
    "google-genai>=0.17.0",
    "openai",
    "groq",
    "together",
]
gguf = [
    "llama-cpp-python",
]
jax = [
    "jax",
    "flax",
    "optax",
    "orbax-checkpoint",
]
docs = [
    "mkdocs-material>=9.5",
    "mkdocstrings[python]>=0.25",
    "ruff>=0.6",
]
dev = [
    "pytest>=7.0",
    "pytest-mock>=3.10",
    "ruff>=0.6",
    "datasets",
]
gui = [
    "wxPython",
]

[project.urls]
Homepage = "https://seben.robotsmali.org"
Documentation = "https://seben.robotsmali.org/docs"
Repository = "https://github.com/mlsftwrs/sebeni"
"Hugging Face" = "https://huggingface.co/mlsftwrs"

[project.scripts]
sebeni = "beni.cli.main:app"

[tool.setuptools]
include-package-data = true
license-files = ["LICENSE"]

[tool.setuptools.packages.find]
include = ["beni*"]
exclude = ["tests*"]

[tool.setuptools.package-data]
beni = [
    "utils/res/*.json",
    "utils/prompts/*",
    "data/samples/*",
    "data/baselines/*/*",
    "data/raw/*",
    "data/test.json",
    "data/exp.yaml",
    "core/hub/templates/*",
]

[tool.setuptools.exclude-package-data]
beni = ["*.old", "*.backup", "*Zone.Identifier"]

[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["."]
addopts = "-v --strict-markers"

[tool.ruff]
target-version = "py310"
line-length = 100
src = ["beni", "tests"]

[tool.ruff.format]
quote-style = "double"
indent-style = "space"

[tool.ruff.lint]
select = ["E4", "E7", "E9", "F"]
