v0.3.0 — Accuracy, Performance & Architecture Audit
What's Changed
Critical Accuracy Fixes
- Operating Margin now correctly reflects D&A-in-COGS adjustments (was using pre-adjustment value)
adjust_for_dep_in_cogsproperly handles negative depreciation values viaabs()sign-flip- Debt-to-Equity, ROE, Interest Coverage return
NaNfor degenerate denominators (zero/negative equity, zero interest expense) instead of misleading0.0 - Net Debt/EBITDA returns
NaNwhen EBITDA ≤ 0, with an alert explaining the undefined ratio - Tangible Equity no longer clamped to 0 — negative values now surface as insolvency signals
- Duplicate index handling:
df.loc[]returning a DataFrame (instead of Series) for duplicate index entries is now handled correctly across all synonym matching functions
New Alerts
- Negative shareholders' equity (potential insolvency)
- Negative tangible equity (intangibles exceed equity)
- Net Debt positive but EBITDA non-positive (leverage ratio undefined)
Forecasting Improvements
MIN_DATA_POINTSraised from 4 → 6 for ARIMA reliability- SARIMAX requires 12+ data points (was 6) to avoid overfitting
- Fixed SARIMAX over-differencing:
seasonal_orderchanged from(1,1,1,4)to(1,0,1,4) - Enabled
enforce_stationarity=Truefor numerically stable fits
Data Parsing
- Quarter-format labels (
Q1-2023,Q2 2023,Q4_2021) now parse correctly for chronological sorting custom_float_formatdisplaysN/Afor NaN/Inf values instead of rawnan
Architecture & Performance
- Eliminated duplicated synonym-matching code via shared
find_best_synonym_row NormalizedIndexcaching eliminates redundant DataFrame index normalizationRotatingFileHandler(10MB, 3 backups) withatexitcleanup prevents unbounded log growth- Removed raw DataFrames from multi-period return values (memory optimization)
- Consolidated alert display methods in reporting module
Compatibility
- edgartools API migration: Transparently handles both old method-based (
get_balance_sheet()) and new property-based (balance_sheet) APIs — fixes #2
Tests
- 127 tests (11 new), all passing across Python 3.10, 3.11, 3.12
- New coverage: negative equity, duplicate indices, quarter parsing, D&A-adjusted margins, degenerate denominators, NaN formatting
Install / Upgrade
pip install --upgrade edgar-analyticsBreaking change: Metrics that previously returned 0.0 for undefined ratios (e.g., Debt-to-Equity with zero equity) now return NaN. Code that checks == 0.0 should use pd.isna() instead.