from pydantic import BaseModel, Field from typing import List class CVInput(BaseModel): cathode_name: str V_start: float = Field(..., description="Starting voltage (V)") V_switch: float = Field(..., description="Switch voltage (V)") scan_rate: float = Field(..., description="Sweep rate (V/s)") dt: float = Field(..., description="Time step (s)") sigma: float = Field(..., description="Gaussian peak width (V)") E0: float = Field(..., description="Redox mid‑potential (V)") Ip: float = Field(..., description="Peak current magnitude (A)") # EIS inputs frequencies: List[float] = Field(..., description="Frequencies (Hz)") Rs: float = Field(..., description="Solution resistance (Ohm)") Rct: float = Field(..., description="Charge‐transfer resistance (Ohm)") Cdl: float = Field(..., description="Double‐layer capacitance (F)") sigma_w: float = Field(..., description="Warburg coefficient (Ω·s^(-1/2))") # Q–V derivative inputs V_qv: List[float] = Field(..., description="Voltage array for Q–V curve (monotonic)") Q_qv: List[float] = Field(..., description="Capacity array aligned with V_qv") window: int = Field(21, description="Savitzky–Golay window length (odd)") poly: int = Field(3, description="Savitzky–Golay polynomial order")