content: [build-system]
  requires = ["hatchling>=1.8.0", "hatch-vcs"]
  build-backend = "hatchling.build"
  
  [project]
  name = "NetKet"
  description = "Netket : Machine Learning toolbox for many-body quantum systems."
  authors = [
      { name = "Giuseppe Carleo" },
      { name = "Filippo Vicentini" },
      { name = "The NetKet authors" },
  ]
  license = { text = "Apache 2.0" }
  readme = "README.md"
  keywords = [
      "Machine Learning",
      "Quantum",
      "Neural Networks",
      "Neural Quantum States",
      "Jax",
      "Monte Carlo",
  ]
  classifiers = [
      "Programming Language :: Python :: 3",
      "Development Status :: 5 - Production/Stable",
      "Intended Audience :: Science/Research",
      "Operating System :: MacOS :: MacOS X",
      "Operating System :: POSIX :: Linux",
      "Operating System :: Unix",
      "Topic :: Scientific/Engineering :: Physics",
  ]
  dynamic = ["version"]
  
  requires-python = ">=3.11"
  dependencies = [
      "numpy>=1.20,<3.0",
      "scipy>=1.5.3, <2",
      "tqdm>=4.60, <5",
      "rich>=12.0",
      "numba>=0.59",
      "igraph>=0.10.0",
      "jax>=0.7.0",
      "equinox>=0.11.3",
      "flax>=0.10.2",
      "orjson>=3.4, <4",
      "optax>=0.2.2, <0.3",
      "plum-dispatch>=2.4",
      "sparse>=0.12.0",
      "einops>=0.8.1",
  ]
  
  [project.optional-dependencies]
  cuda = ["jax[cuda12]; sys_platform == 'linux'"]
  pyscf = ["pyscf>=2.0"]
  extra = ["tensorboardx>=2.0.0", "openfermion>=1.0.0", "h5py>=3.7.0", "qutip>=4"]
  dev = [
      "networkx>=2.4",
      "matplotlib>=3",
      "pytest>=6",
      "pytest-xdist[psutil]>=2",
      "pytest-cov>=2.10.1",
      "pytest-json-report>=1.3",
      "coverage>=5",
      "pre-commit>=2.7",
      "black==25.1.0",
      "ruff==0.12.2",
      "qutip>=5",
      "wheel>=0.38.1",
      "build>=1",
  ]
  docs = [
      "Sphinx~=8.2.3",
      "sphinx-design>=0.4.0",
      "sphinx-autodoc-typehints>=1.22,<4.0",
      "sphinxcontrib-fulltoc~=1.2.0",
      "sphinxcontrib-jsmath~=1.0.1",
      "myst-parser>=2.0.0,<4.1.0",
      "myst-nb>=1.0,<1.4",
      "sphinx-book-theme~=1.1.0",
      "sphinx-copybutton>=0.5.2",
      "nbconvert>=7.16.6",
      "ipywidgets>=8.1.7",
  ]
  [dependency-groups]
  dev = [
      "netket[pyscf,extra,dev,docs]",
      "ipykernel>=6.20",
      "pyscf>=2.9.0",
  ]
  docs = [
      "netket[docs]"
  ]
  
  [project.scripts]
  djaxrun = "netket.tools.djaxrun:main"
  netket-cite = "netket.utils.citations.cli:cite_cli"
  
  
  [project.urls]
  homepage = "https://www.netket.org"
  documentation = "https://netket.readthedocs.io/en/latest/#"
  repository = "https://github.com/netket/netket"
  changelog = "https://netket.readthedocs.io/en/latest/docs/changelog.html"
  
  [tool.hatch.build]
  include = ["netket*"]
  
  [tool.hatch.version]
  source = "vcs"
  
  [tool.hatch.build.hooks.vcs]
  version-file = "netket/_version.py"
  
  
  # Development tools
  
  [tool.black]
  line-length = 88
  target-version = ['py311', 'py312', 'py313']
  include = '\.pyi?$'
  exclude = '''
  /(
      \.eggs
    | \.git
    | \.hg
    | \.mypy_cache
    | \.tox
    | \.venv
    | _build
    | buck-out
    | build
    | dist
  )/
  '''
  
  [tool.coverage.run]
  branch = true
  parallel = true
  concurrency = ["multiprocessing"]
  command_line = "-m pytest --verbose test"
  source = ["netket"]
  
  [tool.pytest.ini_options]
  addopts = "--color=yes --verbose --durations=50 -n auto --tb=short"
  doctest_optionflags = "NORMALIZE_WHITESPACE IGNORE_EXCEPTION_DETAIL NUMBER"
  markers = [
      "slow: marks tests as slow (deselected by default in CI)",
  ]
  filterwarnings = [
      "ignore::UserWarning",
      "ignore:No GPU/TPU found, falling back to CPU.:UserWarning",
      "ignore:the imp module is deprecated in favour of importlib.*:DeprecationWarning",
      "ignore:`np.long`",
      "ignore:`np.int` is a deprecated alias for the builtin `int`",
      "ignore::DeprecationWarning:tensorboardX",
      "ignore:jax.random.KeyArray is deprecated.",
      "ignore:Raw arrays as random keys to",
      "ignore:Defaulting to `holomorphic=False`,",
      "ignore::PendingDeprecationWarning: the matrix subclass",
      "ignore::netket.errors.HolomorphicUndeclaredWarning",
      "ignore::netket.errors.UnoptimalSRtWarning",
      "ignore::netket.errors.InitializePeriodicLatticeOnSmallLatticeWarning",
  ]
  testpaths = ["test"]
  
  [tool.ruff]
  target-version = "py311"
  line-length = 88
  exclude = ["Examples", "docs/conf.py", "*.ipynb"]
  
  [tool.ruff.lint]
  select = ["E", "F", "W", "D410", "UP", "TID252"]
  fixable = ["E", "F", "W", "D", "UP"]
  ignore = ["E501", "E731", "E721", "E701", "E741", "UP007", "UP035", "UP038"]
  #ignore = ["E266"]
  
  [tool.ruff.lint.per-file-ignores]
  "__init__.py" = ["E402", "F401"]
  "netket/nn/activation.py" = ["F401"]
  "Examples/" = ["F401"]
  "docs/sphinx_extensions/*" = ["UP", "D"]
  "!netket/utils/*.py" = ["TID252"]
  
  [tool.mypy]
  show_error_codes = true
  disable_error_code = "attr-defined, name-defined, annotation-unchecked, import-untyped"
  no_implicit_optional = true
  warn_redundant_casts = true
  warn_unused_ignores = false
  
  
  [[tool.mypy.overrides]]
  module = ["netket"]
  ignore_missing_imports = true
  