[build-system] build-backend = "hatchling.build" requires = [ "hatchling" ] [project] name = "serena" version = "0.1.0" description = "" authors = [ {name = "Oraios AI", email = "michael.panchenko@oraios-ai.de"} ] readme = "README.md" requires-python = ">=3.11, <3.12" classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11" ] dependencies = [ "pandas>=2.2.1", "plotly>=5.19.0", "requests>=2.32.3,<3", "pyright>=1.1.396,<2", "overrides>=7.7.0,<8", "python-dotenv>=1.0.0, <2", "mcp>=1.5.0", "fastmcp>=0.4.1", "sensai-utils>=1.4.0", "pydantic>=2.10.6", "types-pyyaml>=6.0.12.20241230", ] [project.license] text = "MIT" [project.optional-dependencies] dev = [ "black[jupyter]>=23.7.0", "docutils>=0.20.1", "jinja2", "jupyter>=1.0.0", # In version 1.0.4 we get a NoneType error related to some config conversion (yml_analytics is None and should be a list) "jupyter-book==1.0.0", "mypy>=1.4.1", "nbqa>=1.7.1", "nbstripout>=0.6.1", "poethepoet>=0.20.0", "pre-commit>=3.3.3", "pytest>=8.0.2", "pytest-cov", "ruff>=0.0.285", "sphinx>=7", "sphinx-book-theme>=1.0.1", "sphinx-comments>=0.0.3", "sphinx-copybutton>=0.5.2", "sphinx-jupyterbook-latex>=1.0.0", "toml-sort>=0.24.2", "sphinx-togglebutton>=0.3.2", "sphinx-toolbox>=3.5.0", "sphinxcontrib-bibtex", "sphinxcontrib-spelling>=8.0.0", "types-pyyaml>=6.0.12.20241230", ] [project.urls] Homepage = "https://github.com/oraios/serena" [tool.black] line-length = 140 target-version = [ "py311" ] [tool.doc8] max-line-length = 1000 [tool.mypy] allow_redefinition = true check_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_defs = true ignore_missing_imports = true no_implicit_optional = true pretty = true show_error_codes = true show_error_context = true show_traceback = true strict_equality = true strict_optional = true warn_no_return = true warn_redundant_casts = true warn_unreachable = true warn_unused_configs = true warn_unused_ignores = true exclude = "^build/|^docs/" [tool.nbqa.exclude] ruff = "\\.jupyter_cache|jupyter_execute" mypy = "\\.jupyter_cache|jupyter_execute" [tool.poe.env] PYDEVD_DISABLE_FILE_VALIDATION = "1" [tool.poe.tasks] test = "pytest test --cov=serena --cov-report=xml --cov-report=term-missing --durations=0 -v --color=yes" _black_check = "black --check --exclude src/multilspy/ src scripts test" _ruff_check = "ruff check --exclude .venv/ --exclude src/multilspy/ src scripts test" _ruff_check_nb = "nbqa ruff check docs" _black_format = "black --exclude .venv/|src/multilspy/ src scripts test" _ruff_format = "ruff check --exclude src/multilspy/ --fix src scripts test" _ruff_format_nb = "nbqa ruff --fix docs" lint = [ "_black_check", "_ruff_check", #"_ruff_check_nb" ] clean-nbs = "python docs/nbstripout.py" format = [ "_ruff_format", "_ruff_format_nb", "_black_format" ] _autogen_rst = "python docs/autogen_rst.py" _sphinx_build = "sphinx-build -W -b html docs docs/_build" _jb_generate_toc = "python docs/create_toc.py" _jb_generate_config = "jupyter-book config sphinx docs/" doc-clean = "rm -rf docs/_build" doc-generate-files = [ "_autogen_rst", "_jb_generate_toc", "_jb_generate_config" ] doc-spellcheck = "sphinx-build -W -b spelling docs docs/_build" doc-build = [ "doc-generate-files", "doc-spellcheck", "_sphinx_build" ] _mypy = "mypy src/serena" _mypy_nb = "nbqa mypy docs" type-check = [ "_mypy", "_mypy_nb" ] [tool.ruff] target-version = "py311" line-length = 140 [tool.ruff.format] quote-style = "double" indent-style = "space" line-ending = "auto" skip-magic-trailing-comma = false docstring-code-format = true [tool.ruff.lint] select = [ "ASYNC", "B", "C4", "C90", "COM", "D", "DTZ", "E", "F", "FLY", "G", "I", "ISC", "PIE", "PLC", "PLE", "PLW", "RET", "RUF", "RSE", "SIM", "TID", "UP", "W", "YTT" ] ignore = [ "RUF002", "RUF005", "SIM118", "SIM108", "E501", "E741", "B008", "B011", "B028", "D100", "D101", "D102", "D103", "D104", "D105", "D107", "D200", "D203", "D213", "D401", "D402", "DTZ005", "E402", "E501", "E701", "E731", "C408", "E203", "G004", "RET505", "D106", "D205", "D212", "PLW2901", "B027", "D404", "D407", "D408", "D409", "D400", "D415", "COM812", "RET503", "RET504", "UP038", "F403", "F405", "C401", "C901", "ASYNC230", "ISC003", "B024", "B007", "SIM102", ] unfixable = [ "F841", "F601", "F602", "B018" ] extend-fixable = [ "F401", "B905", "W291" ] [tool.ruff.lint.mccabe] max-complexity = 20 [tool.ruff.lint.per-file-ignores] "tests/**" = [ "D103" ] "docs/**" = [ "D103" ] "examples/**" = [ "D103" ] "scripts/**" = [ "D103" ]