content: [build-system]
  requires = [
      "poetry-core>=1.0.0",
      "cython>3",
      "numpy>=2.0.0",
      "setuptools>=70.1.0",
      "setuptools-rust",
  ]
  build-backend = "poetry.core.masonry.api"
  
  [tool.poetry]
  name = "river"
  version = "0.23.0"
  description = "Online machine learning in Python"
  readme = "README.md"
  homepage = "https://riverml.xyz/"
  repository = "https://github.com/online-ml/river/"
  authors = ["Max Halford <maxhalford25@gmail.com>"]
  license = "BSD-3-Clause"
  
  include = [
      "**/*.cpp",
      "**/*.pyx",
      "**/*.pxd",
      "river/datasets/*.csv",
      "river/datasets/*.gz",
      "river/datasets/*.zip",
      "river/stream/*.zip",
      "Cargo.toml",
      "rust_src/**/*",
  ]
  
  [tool.poetry.build]
  generate-setup-file = true
  script = "build.py"
  
  [tool.poetry.dependencies]
  python = "^3.10"
  numpy = ">=1.23.0"
  scipy = "^1.14.1"
  pandas = "^2.2.3"
  
  [tool.poetry.group.dev.dependencies]
  graphviz = "^0.20.1"
  gymnasium = "^0.29.0"
  matplotlib = "^3.8.4"
  mypy = "^1.11.1"
  pre-commit = "^3.5.0"
  pytest = "^7.4.2"
  ruff = "^0.4.10"
  scikit-learn = "^1.5.1"
  sqlalchemy = "^2.0.22"
  sympy = "^1.12.1"
  pytest-xdist = { extras = ["psutil"], version = "^3.3.1" }
  ipykernel = "^6.26.0"
  ipython = "^8.17.2"
  rich = "^13.6.0"
  jupyter = "^1.0.0"
  mike = "^2.0.0"
  polars = "^1.1.0"
  
  [tool.poetry.group.compat]
  optional = true
  
  [tool.poetry.group.compat.dependencies]
  scikit-learn = "^1.5.1"
  sqlalchemy = "^2.0.0"
  
  [tool.poetry.group.docs]
  optional = true
  
  [tool.poetry.group.docs.dependencies]
  "dominate" = "*"
  "flask" = "*"
  "ipykernel" = "*"
  "jupyter-client" = "*"
  "mike" = "*"
  "mkdocs" = "*"
  "mkdocs-awesome-pages-plugin" = "*"
  "mkdocs-charts-plugin" = "*"
  "mkdocs-material" = "*"
  "nbconvert" = "*"
  "numpydoc" = "*"
  "python-slugify" = "*"
  "spacy" = "*"
  "tabulate" = "*"
  "watermark" = "*"
  
  [tool.poetry.group.benchmark]
  optional = true
  
  [tool.poetry.group.benchmark.dependencies]
  "dominate" = "2.8.0"
  "scikit-learn" = "1.5.1"
  "tabulate" = "0.9.0"
  "vowpalwabbit" = "9.9.0"
  "watermark" = "2.4.3"
  
  [tool.pytest.ini_options]
  addopts = [
      "--doctest-modules",
      "--doctest-glob=README.md",
      "--ignore=build.py",
      "--ignore=benchmarks",
      "--ignore=docs/scripts",
      "--verbose",
      "-ra",
      "-m not datasets and not slow",
      "--color=yes",
  ]
  doctest_optionflags = "NORMALIZE_WHITESPACE NUMBER ELLIPSIS"
  norecursedirs = [
      "build",
      "docs",
      "node_modules",
      ".eggs",
      "scikit-multiflow",
      "site",
      "benchmarks",
  ]
  markers = [
      "datasets: tests that pertain to the datasets module",
      "slow: tests that take a long time to run",
  ]
  
  [tool.ruff]
  line-length = 100
  target-version = 'py310'
  extend-include = ["*.ipynb"]
  
  [tool.ruff.lint]
  select = [
      # pycodestyle
      "E",
      # Pyflakes
      "F",
      # pyupgrade
      "UP",
      # isort
      "I",
  ]
  ignore = ["E501"]
  fixable = ["ALL"]
  
  [tool.ruff.lint.isort]
  required-imports = ["from __future__ import annotations"]
  
  [tool.ruff.format]
  quote-style = "double"
  indent-style = "space"
  
  [tool.mypy]
  files = "river"
  strict = true
  
  [[tool.mypy.overrides]]
  module = [
      "mmh3.*",
      "numpy.*",
      "sklearn.*",
      "pytest.*",
      "pandas.*",
      "scipy.*",
      "graphviz.*",
      "vaex.*",
      "torch.*",
      "sqlalchemy.*",
      "requests.*",
      "gymnasium.*",
      "sympy.*",
      "polars.*",
  ]
  ignore_missing_imports = true
  
  [[tool.mypy.overrides]]
  # Disable strict mode for all non fully-typed modules
  module = [
      "river.metrics.*",
      "river.utils.*",
      "river.stats.*",
      "river.optim.*",
      "river.datasets.*",
      "river.tree.*",
      "river.preprocessing.*",
      "river.stream.*",
      "river.linear_model.*",
      "river.evaluate.*",
      "river.drift.*",
      "river.compose.*",
      "river.bandit.*",
      "river.cluster.*",
      "river.anomaly.*",
      "river.time_series.*",
      "river.feature_extraction.*",
      "river.ensemble.*",
      "river.proba.*",
      "river.multioutput.*",
      "river.naive_bayes.*",
      "river.checks.*",
      "river.rules.*",
      "river.model_selection.*",
      "river.forest.*",
      "river.neighbors.*",
      "river.sketch.*",
      "river.facto.*",
      "river.covariance.*",
      "river.compat.*",
      "river.multiclass.*",
      "river.reco.*",
      "river.imblearn.*",
      "river.feature_selection.*",
      "river.active.*",
      "river.conf.*",
      "river.neural_net.*",
      "river.test_estimators",
      "river.dummy",
  ]
  # The strict option is global, the checks must be disabled one by one
  warn_unused_ignores = false
  check_untyped_defs = false
  allow_subclassing_any = true
  allow_any_generics = true
  allow_untyped_calls = true
  allow_incomplete_defs = true
  allow_untyped_defs = true
  implicit_reexport = true
  warn_return_any = false
  