Core Concepts¶
Data Model¶
Most APIs operate on daily (or intraday) return series:
returns:pd.Seriesof simple (non-cumulative) returns withDatetimeIndexfactor_returns: optional benchmark returns aligned toreturnspositions: optionalpd.DataFramewith one column per asset pluscashtransactions: optionalpd.DataFramewithamount,price,symbolcolumns
Three API surfaces¶
fincore 0.3.0 exposes three clearly separated surfaces. Equal names do not imply equal semantics across them:
1. Enhanced semantics — flat API and AnalysisContext (Recommended)¶
The flat API is bound to enhanced fincore.metrics implementations with
documented divergences (e.g. week_year="iso", validation exceptions):
AnalysisContext is the recommended stateful, cached API:
2. Strict compatibility — fincore.empyrical¶
The frozen empyrical 0.6.0 surface (54/54 C0, 49/49 C1, core callables C3):
from fincore import empyrical
empyrical.sharpe_ratio(returns)
from fincore import Empyrical
Empyrical.sharpe_ratio(returns) # class-level, explicit returns
emp = Empyrical(returns=returns)
emp.sharpe_ratio() # instance-level, state-bound
3. pyfolio façade — fincore.pyfolio¶
The frozen pyfolio 0.9.6 profile of 11 tear-sheet workflows (all C1, main
chains C4). from fincore import Pyfolio requires the pyfolio extra.
See Compatibility for the C0–C4 matrix.
Lazy Loading Architecture¶
import fincore loads in ~0.04s. Heavy submodules (matplotlib, scipy) are deferred via __getattr__ until first access.
Period Constants¶
These control annualization factors across all metrics.