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

[project]
name = "VegZ"
version = "1.2.0"
authors = [
  {name="Mohamed Z. Hatim", email="mhatim4040@gmail.com"},
]
description = "A comprehensive Python package for vegetation data analysis and environmental modeling"
readme = "README.md"
requires-python = ">=3.8"
license = {text = "MIT"}
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Intended Audience :: Science/Research",
    "Topic :: Scientific/Engineering :: Bio-Informatics",
    "Topic :: Scientific/Engineering :: Information Analysis",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Operating System :: OS Independent",
]
keywords = [
    "vegetation", "ecology", "biodiversity", "clustering", "ordination",
    "diversity", "multivariate", "environmental", "TWINSPAN", "elbow-analysis",
    "machine learning", "modelling", "species-validation", "taxonomic-names",
    "data-quality", "error-detection"
]

# Core dependencies
dependencies = [
    "numpy>=1.21.0",
    "pandas>=1.3.0",
    "scipy>=1.7.0",
    "matplotlib>=3.4.0",
    "scikit-learn>=1.0.0",
    "seaborn>=0.11.0",
]

# Optional dependencies
[project.optional-dependencies]
spatial = [
    "geopandas>=0.10.0",
    "pyproj>=3.2.0",
    "rasterio>=1.2.0",
    "shapely>=1.8.0",
]
remote-sensing = [
    "earthengine-api>=0.1.300",
    "geemap>=0.13.0",
    "xarray>=0.20.0",
    "netcdf4>=1.5.0",
]
fuzzy = [
    "fuzzywuzzy>=0.18.0",
    "python-levenshtein>=0.12.0",
]
interactive = [
    "plotly>=5.0.0",
    "bokeh>=2.4.0",
    "ipywidgets>=7.6.0",
]
dev = [
    "pytest>=6.2.0",
    "pytest-cov>=2.12.0",
    "black>=21.0.0",
    "flake8>=3.9.0",
    "sphinx>=4.0.0",
    "sphinx-rtd-theme>=0.5.0",
]

[project.urls]
Homepage = "https://github.com/mhatim99/VegZ"
Documentation = "https://mhatim99.github.io/VegZ/"
Repository = "https://github.com/mhatim99/VegZ.git"
"Bug Reports" = "https://github.com/mhatim99/VegZ/issues"
Changelog = "https://github.com/mhatim99/VegZ/blob/main/CHANGELOG.md"

# Temporarily disable demo script until examples module is properly structured
# [project.scripts]
# VegZ-demo = "VegZ.examples.demo:main"

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

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

[tool.hatch.metadata]
allow-direct-references = true

# Black code formatting
[tool.black]
line-length = 88
target-version = ['py38', 'py39', 'py310', 'py311']
include = '\.pyi?$'
extend-exclude = '''
/(
  # directories
  \.eggs
  | \.git
  | \.hg
  | \.mypy_cache
  | \.tox
  | \.venv
  | build
  | dist
)/
'''

# pytest configuration
[tool.pytest.ini_options]
minversion = "6.0"
addopts = "-ra -q --strict-markers"
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]

# Coverage configuration
[tool.coverage.run]
source = ["src"]
omit = [
    "*/tests/*",
    "*/examples/*",
    "*/__pycache__/*",
]

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "def __repr__",
    "if self.debug:",
    "if settings.DEBUG",
    "raise AssertionError",
    "raise NotImplementedError",
    "if 0:",
    "if __name__ == .__main__.:",
    "class .*\\(Protocol\\):",
    "@(abc\\.)?abstractmethod",
]