content: [project]
  name = "nanox81"
  version = "0.1.0"
  description = "This is a code base of examples for NANOx81 - Data Science in Materials Science at UCSD."
  readme = "README.md"
  requires-python = ">=3.10"
  dependencies = [
      "jupyter>=1.1.1",
      "nbmake>=1.5.5",
      "pandas>=2.2.3",
      "pymatgen>=2025.3.10",
      "pytest>=8.3.5",
      "ruff>=0.11.3",
      "scikit-learn>=1.6.1",
      "seaborn>=0.13.2",
      "statsmodels>=0.14.4",
      "tensorflow>=2.19.0",
      "torch>=2.6.0",
  ]
  
  [tool.ruff]
  line-length = 120
  output-format = "concise"
  
  [tool.ruff.lint]
  select = ["ALL"]
  ignore = [
      # Rule families
      "ANN", # flake8-annotations (not ready, require types for ALL args)
      "ARG", # Check for unused function arguments
      "BLE", # General catch of Exception
      "C90", # Check for functions with a high McCabe complexity
      "COM", # flake8-commas (conflict with line wrapper)
      "CPY", # Missing copyright notice at top of file (need preview mode)
      "EM",  # Format nice error messages
      "ERA", # Check for commented-out code
      "FIX", # Check for FIXME, TODO and other developer notes
      "G",   # Validate logging format strings
      "INP", # Ban PEP-420 implicit namespace packages
      "N",   # PEP8-naming (many var/arg names are intended)
      "PTH", # Prefer pathlib over os.path
      "SLF", # Access "private" class members
      "T20", # Check for print/pprint
      "TD",  # TODO tags related
      "E741", "PD901", "EXE", "D103", "E402", "NPY002",
  
      # Single rules
      "B023",    # Function definition does not bind loop variable
      "B904",    # Within an except clause, raise exceptions with ...
      "C408",    # unnecessary-collection-call
      "D105",    # Missing docstring in magic method
      "D205",    # One blank line required between summary line and description
      "D212",    # Multi-line docstring summary should start at the first line
      "FBT001",  # Boolean-typed positional argument in function definition
      "FBT002",  # Boolean default positional argument in function
      "PD011",   # (A lot of false positive on non-Pandas objects)
      "PERF203", # Use of try-except in for/while loop
      "PERF401", # Replace "for" loops with list comprehension
      "PLR0911", # Too many return statements
      "PLR0912", # Too many branches
      "PLR0913", # Too many arguments
      "PLR0915", # Too many statements
      "PLR1702", # Too many nested blocks
      "PLR2004", # Magic-value-comparison TODO: fix these
      "PLW2901", # Outer for loop variable overwritten by inner assignment target
      "PT013",   # Incorrect import of pytest
      "S110",    # Log for try-except-pass
      "S112",    # Log for try-except-continue
      "S311",    # Use random module for cryptographic purposes
      "S314",    # Replace xml with defusedxml to avoid XML attacks
      "S603",    # Check source for use of "subprocess" call
      "S607",    # Start process with relative path
      "SIM105",  # Use contextlib.suppress() instead of try-except-pass
      "SIM905",  # Split static strings
      "TRY003",  # Avoid specifying long messages outside the exception class
      "TRY300",  # Check for return statements in try blocks
      "TRY301",  # Check for raise statements within try blocks
  ]
  pydocstyle.convention = "google"
  isort.required-imports = ["from __future__ import annotations"]
  isort.split-on-trailing-comma = false
  isort.known-first-party = ["pymatgen"]
  
  [tool.ruff.format]
  docstring-code-format = true
  
  [tool.pytest.ini_options]
  addopts = "--durations=30 --quiet -r xXs --color=yes --import-mode=importlib"
  filterwarnings = [
      # NOTE: the LAST matching option would be used
      "ignore::UserWarning",                                              # Ignore UserWarning
      "error:We strongly encourage explicit `encoding`:EncodingWarning",  # Mark `zopen` EncodingWarning as error
      # TODO: remove the following filter once `monty.io` dropped custom EncodingWarning
      "error:We strongly encourage explicit `encoding`:monty.io.EncodingWarning",
      # TODO: pybtex (perhaps some others) emits the following warnings
      'ignore:pkg_resources is deprecated as an API:DeprecationWarning',
      'ignore:distutils Version classes are deprecated:DeprecationWarning',
      'ignore:Deprecated call to `pkg_resources.declare_namespace:DeprecationWarning',
  ]
  
  [tool.mypy]
  ignore_missing_imports = true
  explicit_package_bases = true
  no_implicit_optional = false
  
  [[tool.mypy.overrides]]
  module = ["requests.*", "tabulate.*"]
  ignore_missing_imports = true
  
  [tool.pyright]
  typeCheckingMode = "off"
  reportPossiblyUnboundVariable = true
  reportUnboundVariable = true
  reportMissingImports = false
  reportMissingModuleSource = false
  reportInvalidTypeForm = false
  exclude = ["**/tests"]
  