[build-system]
requires = [
    "hatchling>=1.12.1"
]
backend-path = ["."]
build-backend = "packager.pep517"

[project]
name = "xgboost"
description = "XGBoost Python Package"
readme = { file = "README.rst", content-type = "text/x-rst" }
authors = [
    { name = "Hyunsu Cho", email = "chohyu01@cs.washington.edu" },
    { name = "Jiaming Yuan", email = "jm.yuan@outlook.com" }
]
version = "2.2.0-dev"
requires-python = ">=3.10"
license = { text = "Apache-2.0" }
classifiers = [
    "License :: OSI Approved :: Apache Software License",
    "Development Status :: 5 - Production/Stable",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
]
dependencies = [
    "numpy",
    "scipy",
    "nvidia-nccl-cu12 ; platform_system == 'Linux' and platform_machine != 'aarch64'"
]

[project.urls]
documentation = "https://xgboost.readthedocs.io/en/stable/"
repository = "https://github.com/dmlc/xgboost"

[project.optional-dependencies]
pandas = ["pandas>=1.2"]
scikit-learn = ["scikit-learn"]
dask = ["dask", "pandas", "distributed"]
datatable = ["datatable"]
plotting = ["graphviz", "matplotlib"]
pyspark = ["pyspark", "scikit-learn", "cloudpickle"]

[tool.hatch.build.targets.wheel.hooks.custom]

[tool.isort]
profile = "black"

[tool.mypy]
ignore_missing_imports = true
disallow_untyped_defs = true
follow_imports = "silent"

[tool.pylint.main]
ignore = ["tests"]
extension-pkg-whitelist = ["numpy"]
disable = [
    "attribute-defined-outside-init",
    "import-outside-toplevel",
    "too-many-nested-blocks",
    "unexpected-special-method-signature",
    "unsubscriptable-object",
    "useless-object-inheritance"
]
dummy-variables-rgx = "(unused|)_.*"
reports = false

[tool.pylint.basic]
# Enforce naming convention
const-naming-style = "UPPER_CASE"
class-naming-style = "PascalCase"
function-naming-style = "snake_case"
method-naming-style = "snake_case"
attr-naming-style = "snake_case"
argument-naming-style = "snake_case"
variable-naming-style = "snake_case"
class-attribute-naming-style = "snake_case"

# Allow single-letter variables
variable-rgx = "[a-zA-Z_][a-z0-9_]{0,30}$"
