impedance_agent.core package
Submodules
impedance_agent.core.config module
- class Variable(*, name: str, initialValue: float, lowerBound: float, upperBound: float)[source]
Bases:
BaseModel
- model_config: ClassVar[ConfigDict] = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class WeightingConfig(*, type: str = 'modulus', data: ~typing.Dict[str, ~typing.Any] = <factory>)[source]
Bases:
BaseModel
- model_config: ClassVar[ConfigDict] = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class FitterConfig(*, model_code: str, variables: ~typing.List[~impedance_agent.core.config.Variable], weighting: ~impedance_agent.core.config.WeightingConfig = <factory>)[source]
Bases:
BaseModel
- weighting: WeightingConfig
- model_config: ClassVar[ConfigDict] = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
impedance_agent.core.env module
- class Environment(config_dict: dict | None = None, validate: bool = True)[source]
Bases:
object
- __init__(config_dict: dict | None = None, validate: bool = True)[source]
Initialize environment with optional config override for testing
- Parameters:
config_dict – Optional configuration dictionary for testing
validate – Whether to validate the configuration (disable for testing)
- get_provider_config(provider: str) APIConfig | None [source]
Get the configuration for a specific provider.
- Parameters:
provider – The name of the provider (‘deepseek’ or ‘openai’)
- Returns:
The APIConfig for the specified provider or None if not found
- Raises:
ValueError – If the provider is not supported
impedance_agent.core.exceptions module
impedance_agent.core.exporters module
- class ResultExporter[source]
Bases:
object
Handles exporting analysis results to various formats with async I/O
- logger = <Logger impedance_agent.core.exporters (WARNING)>
impedance_agent.core.loaders module
impedance_agent.core.logging module
impedance_agent.core.models module
- class ImpedanceData(*, frequency: ndarray, real: ndarray, imaginary: ndarray, measurement_id: str | None = None, timestamp: datetime | None = None)[source]
Bases:
BaseModel
Container for electrochemical impedance spectroscopy data.
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class FitQualityMetrics(*, vector_difference: float, vector_quality: str, path_deviation: float, path_quality: str, overall_quality: str)[source]
Bases:
BaseModel
Quality metrics for assessing impedance fits.
References
- [1] Boukamp, B.A. “A Linear Kronig-Kramers Transform Test for Immittance Data Validation.”
Electrochem. Soc. 142 (1995)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class FitResult(*, parameters: List[float], errors: List[float], param_info: List[Dict], correlation_matrix: ndarray | None = None, chi_square: float, aic: float, wrms: float, dof: int, measurement_id: str | None = None, timestamp: datetime | None = None, Z_fit: ndarray | None = None, fit_quality: FitQualityMetrics | None = None)[source]
Bases:
BaseModel
Results from equivalent circuit model fitting.
Notes
The fitting process uses weighted complex nonlinear least squares with:
Parameter estimation minimizing: χ² = Σᵢ wᵢ|Z_{exp,i} - Z_{fit,i}|²
Akaike Information Criterion: AIC = -2ln(L) + 2k where L is likelihood and k is number of parameters
Parameter uncertainties via QR decomposition of weighted Jacobian
Correlation matrix from Hessian of objective function
References
- [1] Sadkowski, A. “CNLS fits and Kramers-Kronig validation of resonant EIS data.”
Journal of Electroanalytical Chemistry (2004)
- [2] Ingdal, M., Johnsen, R., & Harrington, D. A. “The Akaike information criterion
in weighted regression of immittance data.” Electrochimica Acta (2019)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- fit_quality: FitQualityMetrics | None
- class DRTResult(*, tau: ndarray, gamma: ndarray, peak_frequencies: List[float], peak_polarizations: List[float], regularization_param: float, residual: float, Z_fit: ndarray | None = None, residuals_real: ndarray | None = None, residuals_imag: ndarray | None = None, fit_quality: FitQualityMetrics | None = None)[source]
Bases:
BaseModel
Results from Distribution of Relaxation Times (DRT) analysis.
Notes
The DRT analysis solves the integral equation: Z(ω) - R_∞ = R_pol ∫₀^∞ γ(τ)/(1 + iωτ)dτ
Uses Tikhonov Regularization + Projected Gradient (TRPG) method.
References
- [1] Kulikovsky, A. “PEM fuel cell distribution of relaxation times: a method for the
calculation and behavior of an oxygen transport peak.” (2021)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- fit_quality: FitQualityMetrics | None
- class LinKKResult(*, M: int, mu: float, Z_fit: ndarray, residuals_real: ndarray, residuals_imag: ndarray, max_residual: float, mean_residual: float, fit_quality: FitQualityMetrics | None = None)[source]
Bases:
BaseModel
Results from Lin-KK (Linear Kramers-Kronig) validation analysis.
References
- [1] Boukamp, B.A. “A Linear Kronig‐Kramers Transform Test for Immittance Data Validation.”
Electrochem. Soc. 142 (1995)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- fit_quality: FitQualityMetrics | None
- class AnalysisResult(*, ecm_fit: ~impedance_agent.core.models.FitResult | None = None, drt_fit: ~impedance_agent.core.models.DRTResult | None = None, linkk_fit: ~impedance_agent.core.models.LinKKResult | None = None, summary: str = '', recommendations: ~typing.List[str] = <factory>, overall_assessment: ~typing.Dict[str, ~typing.Any] = <factory>)[source]
Bases:
BaseModel
Comprehensive impedance analysis results combining multiple methods.
References
- [1] Barsoukov, E., Macdonald, J.R. “Impedance Spectroscopy: Theory, Experiment, and Applications.”
Wiley (2018)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- linkk_fit: LinKKResult | None
impedance_agent.core.plotting module
- class PlotManager[source]
Bases:
object
Manages creation and export of publication-quality electrochemical analysis plots
- logger = <Logger impedance_agent.core.plotting (WARNING)>
- static create_plots(result: AnalysisResult, output_dir: str | Path, file_format: str = 'png', dpi: int = 600, show: bool = False) None [source]
Generate and save publication-quality electrochemical analysis plots
- Parameters:
result (AnalysisResult) – Analysis results containing impedance, DRT, and fitting data
output_dir (Union[str, Path]) – Directory where plots will be saved
file_format (str, optional) – Output file format (default: ‘png’)
dpi (int, optional) – Resolution of saved plots (default: 600)
show (bool, optional) – Whether to display plots (default: False)