content: [tool.poetry]
  name = "revisit-bpr"
  version = "0.0.1"
  description = "Repository for the paper: \"Revisiting BPR: A Replicability Study of a Common Recommender System Baseline\""
  readme = "README.md"
  package-mode = true
  authors = [
      "Aleksandr Milogradskii <alex.milogradsky@gmail.com>",
  ]
  repository = "https://github.com/nemexur/revisit-bpr"
  
  [tool.poetry.dependencies]
  python = ">=3.10,<3.13"
  torch = "^2.2.1"
  numpy = "^1.25.2"
  einops = "^0.6.1"
  scikit-learn = "^1.3.0"
  accelerate = "^0.28.0"
  safetensors = "^0.4.2"
  
  [tool.poetry.group.s3.dependencies]
  boto3 = "^1.28.76"
  
  [tool.poetry.group.exp.dependencies]
  loguru = "^0.7.2"
  click = "^8.1.7"
  tqdm = "^4.66.1"
  scipy = "^1.11.1"
  pyyaml = "^6.0.1"
  wandb = "^0.15.9"
  clearml = "^1.16.0"
  rich = "^13.5.2"
  jinja2 = "^3.1.2"
  optuna = "^3.3.0"
  hydra-core = "^1.3.2"
  psycopg2-binary = "^2.9.8"
  pytorch-ignite = "^0.4.12"
  referencing = "0.34.0"
  jsonschema = "4.21.1"
  polars = {extras = ["pandas"], version = "^0.19.3"}
  
  [tool.poetry.group.otherlibs.dependencies]
  implicit = "^0.7.2"
  cython = "^3.0.6"
  wheel = "^0.42.0"
  recbole = "^1.2.0"
  hyperopt = "^0.2.7"
  ray = "^2.9.3"
  kmeans-pytorch = "^0.3"
  lightfm = {git = "https://github.com/lyst/lightfm.git"}
  
  [tool.poetry.group.dev.dependencies]
  ipython = "^8.14.0"
  ruff = "^0.0.283"
  pytest = "^7.4.0"
  pytest-cov = "^4.1.0"
  seaborn = "^0.13.2"
  matplotlib = "^3.8.0"
  plotly = "^5.18.0"
  jupyter-dash = "^0.4.2"
  jupyterlab = "^4.1.0"
  python-json-logger = "^2.0.7"
  
  [tool.pyright]
  reportGeneralTypeIssues = false
  
  [tool.black]
  line-length = 100
  
  [tool.isort]
  py_version = 310
  profile = "black"
  line_length = 100
  force_to_top = ["typing"]
  order_by_type = true
  combine_as_imports = true
  force_sort_within_sections = true
  skip_glob = ["**/__init__.py"]
  
  [tool.ruff]
  lint.select = [
      "E",    # pycodestyle errors
      "W",    # pycodestyle warnings
      "F",    # pyflakes
      "C",    # flake8-comprehensions
      "B",    # flake8-bugbear
      "S",    # flake8-bandit
      "PT",   # flake8-pytest-style
      "SLF",  # flake8-self
      "SIM",  # flake8-simplify
      "NPY",  # NumPy-specific rules
  ]
  lint.ignore = [
      "E501",  # line too long, handled by black
      "S105",  # ignore hardcoded password
      "S101",  # ignore use of assert
      "E741",  # allow l and o variable names
  ]
  exclude = ["experiments/datasets/revisit-ials/generate_data.py"]
  line-length = 100
  target-version = "py310"
  
  [tool.ruff.lint.mccabe]
  # Flag errors (`C901`) whenever the complexity level exceeds 5.
  max-complexity = 50
  
  [tool.ruff.lint.extend-per-file-ignores]
  "__init__.py" = ["F401"]
  
  [build-system]
  requires = ["poetry-core"]
  build-backend = "poetry.core.masonry.api"
  