[project]
name = "natcap.invest"
description = "InVEST Ecosystem Service models"
readme = "README_PYTHON.rst"
requires-python = ">=3.8"
license = {file = "LICENSE.txt"}
maintainers = [
    {name = "Natural Capital Project Software Team"}
]
keywords = ["gis", "invest", "ecosystem services"]
classifiers = [
    "Intended Audience :: Developers",
    "Development Status :: 5 - Production/Stable",
    "Intended Audience :: Science/Research",
    "Natural Language :: English",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: Microsoft",
    "Operating System :: POSIX",
    "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 :: Cython",
    "License :: OSI Approved :: BSD License",
    "Topic :: Scientific/Engineering :: GIS"
]
# the version is provided dynamically by setuptools_scm
# `dependencies` and `optional-dependencies` are provided by setuptools
# using the corresponding setup args `install_requires` and `extras_require`
dynamic = ["version", "dependencies", "optional-dependencies"]

[project.urls]
homepage = "http://github.com/natcap/invest"

[project.scripts]
invest = "natcap.invest.cli:main"

[build-system]
# these are the minimum packages needed in order to execute the natcap.invest
# build.
# NOTE: GDAL is *not* required here because the compiled cython module
# will dynamically import GDAL via python's import system.  This behavior means
# that we can provide a much easier build experience so long as GDAL is
# available at runtime.
requires = [
    'setuptools>=61', 'wheel', 'setuptools_scm>=8.0', 'cython>=3.0.0', 'babel',
    'oldest-supported-numpy; python_version<="3.8"',
    'numpy>=2; python_version>="3.9"',  # numpy 2 only available for 3.9+
]
build-backend = "setuptools.build_meta"

[tool.setuptools_scm]
version_scheme = "post-release"
local_scheme = "node-and-date"

[tool.isort]
# isort can be installed from conda-forge
# flake8-isort can also be used for flake8 linting integration
#
# To test isort configuration, run:
#     isort . --show-config
# A warning will present if config can't be loaded.
#
# Each section of imports will be sorted alphabetically
force_alphabetical_sort_within_sections = true

# "from osgeo import gdal" and "from osgeo import osr" are on separate lines
force_single_line = true

# This defines the sections used, and clarifies that we don't want to have
# lines between the FIRSTPARTY (absolute natcap.invest imports) and the
# LOCALFOLDER (relative imports, e.g. "from . import validation) section.
sections = 'FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER'
no_lines_before = 'LOCALFOLDER'

[tool.setuptools.packages.find]
where = ["src"]

[tool.pytest.ini_options]
# raise warnings to errors, except for deprecation warnings
filterwarnings = [
    "error",
    "default::DeprecationWarning",
    "default::FutureWarning",
    # don't error on a specific runtime warning coming from a shapely
    # issue on M1: https://github.com/natcap/invest/issues/1562
    "default:invalid value encountered in intersection:RuntimeWarning",
]
