[build-system] requires = ["setuptools>=42", "wheel"] build-backend = "setuptools.build_meta" [project] name = "bp-monitoring-pipeline" version = "1.0.0" description = "Blood Pressure Monitoring Pipeline — PPG signal ingestion, processing, and AI-based ABP prediction" authors = [{ name = "Data Engineering Team" }] requires-python = ">=3.11" readme = "README.md" license = { text = "MIT" } dependencies = [ # ── Web Framework ───────────────────────────────────────────────────────── "fastapi>=0.110.0", "uvicorn[standard]>=0.29.0", # ── Database — Supabase / PostgreSQL / SQLite ───────────────────────────── "sqlalchemy>=2.0.0", "asyncpg>=0.29.0", # Async PostgreSQL driver (Supabase production) "alembic>=1.13.0", # Schema migrations (production deploys) "aiosqlite>=0.20.0", # SQLite async driver (local dev fallback) # ── Message Broker ──────────────────────────────────────────────────────── "aio-pika>=9.4.0", # Async RabbitMQ / CloudAMQP (AMQP + AMQPS) # ── Validation & Settings ───────────────────────────────────────────────── "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "python-dotenv>=1.0.0", # ── Signal Processing ───────────────────────────────────────────────────── "scipy>=1.12.0", # Butterworth filter, interpolation, segmentation "numpy>=1.26.0", # Numerical arrays throughout the pipeline # ── Image Processing (VG adjacency matrix → PIL → torchvision tensor) ──── "Pillow>=10.0.0", # PIL.Image used in numba_vgtlnet_preprocessor.py # ── HTTP Client (scripts/mock_iot_sender.py) ────────────────────────────── "httpx>=0.27.0", ] [project.optional-dependencies] # ── GPU / AI Model dependencies ─────────────────────────────────────────────── # Install with: pip install -e ".[gpu]" # Required for GANVGTLNetService (production inference). # NOT needed for the FastAPI / ETL #1 container — only the Colab consumer. gpu = [ "torch>=2.0.0", "torchvision>=0.15.0", # torchvision.transforms used in vgtlnet preprocessor "timm>=0.9.0", # timm.create_model("convnextv2_tiny...") in vgtlnet.py "numba>=0.59.0", # @njit JIT compiler for visibility graph (optional speedup) ] # ── Development & Testing dependencies ─────────────────────────────────────── # Install with: pip install -e ".[dev]" dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=5.0.0", "httpx>=0.27.0", # Async HTTP client for API integration tests "anyio>=4.0.0", # Async test backend "ruff>=0.4.0", # Linter + formatter "mypy>=1.10.0", # Static type checker ] # ── All extras combined (convenience) ──────────────────────────────────────── # Install with: pip install -e ".[all]" all = [ "torch>=2.0.0", "torchvision>=0.15.0", "timm>=0.9.0", "numba>=0.59.0", "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=5.0.0", "httpx>=0.27.0", "anyio>=4.0.0", "ruff>=0.4.0", "mypy>=1.10.0", ] [tool.setuptools.packages.find] where = ["."] include = ["src*", "scripts*"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] [tool.ruff] line-length = 100 target-version = "py311" select = ["E", "F", "I", "UP", "B"] [tool.mypy] python_version = "3.11" strict = true ignore_missing_imports = true