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.