62 lines
1.5 KiB
TOML
62 lines
1.5 KiB
TOML
[tool.poetry]
|
||
name = "fire-planner"
|
||
version = "0.1.0"
|
||
description = "Risk-adjusted, tax-minimised FIRE retirement planner — Monte Carlo simulator over jurisdictions, withdrawal strategies, and UK-departure years."
|
||
authors = ["Viktor Barzin <viktorbarzin@meta.com>"]
|
||
readme = "README.md"
|
||
packages = [{ include = "fire_planner" }]
|
||
|
||
[tool.poetry.dependencies]
|
||
python = ">=3.12,<3.13"
|
||
fastapi = "^0.115"
|
||
uvicorn = "^0.32"
|
||
httpx = "^0.27"
|
||
pydantic = "^2.9"
|
||
sqlalchemy = { extras = ["asyncio"], version = "^2.0" }
|
||
asyncpg = "^0.29"
|
||
alembic = "^1.13"
|
||
click = "^8.1"
|
||
numpy = "^2.1"
|
||
pandas = "^2.2"
|
||
prometheus-fastapi-instrumentator = "^7.0"
|
||
|
||
[tool.poetry.group.dev.dependencies]
|
||
pytest = "^8.3"
|
||
pytest-asyncio = "^0.23"
|
||
hypothesis = "^6.115"
|
||
mypy = "^1.11"
|
||
ruff = "^0.6"
|
||
yapf = "^0.43"
|
||
respx = "^0.21"
|
||
aiosqlite = "^0.20"
|
||
|
||
[build-system]
|
||
requires = ["poetry-core"]
|
||
build-backend = "poetry.core.masonry.api"
|
||
|
||
[tool.pytest.ini_options]
|
||
asyncio_mode = "auto"
|
||
testpaths = ["tests"]
|
||
|
||
[tool.mypy]
|
||
python_version = "3.12"
|
||
strict = true
|
||
files = ["fire_planner", "tests"]
|
||
|
||
[[tool.mypy.overrides]]
|
||
module = ["respx.*", "pandas.*"]
|
||
ignore_missing_imports = true
|
||
|
||
[tool.ruff]
|
||
line-length = 100
|
||
target-version = "py312"
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "W", "I", "UP", "B", "SIM", "RUF"]
|
||
# RUF002 / RUF003 flag ambiguous unicode characters (×, —, etc.) in
|
||
# docstrings and comments — we use them intentionally for readability.
|
||
ignore = ["RUF002", "RUF003"]
|
||
|
||
[tool.yapf]
|
||
based_on_style = "pep8"
|
||
column_limit = 100
|