Coverage for src / qsmile / core / daycount.py: 100%
13 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-01 22:47 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-01 22:47 +0000
1"""Day-count conventions for year-fraction computation."""
3from __future__ import annotations
5from enum import Enum
7import pandas as pd
10class DayCount(Enum):
11 """Day-count convention for computing year fractions.
13 Parameters
14 ----------
15 value : str
16 Human-readable convention name.
17 """
19 ACT365 = "ACT/365"
20 ACT360 = "ACT/360"
22 def year_fraction(self, start: pd.Timestamp, end: pd.Timestamp) -> float:
23 """Compute the year fraction between two dates.
25 Parameters
26 ----------
27 start : pd.Timestamp
28 Start date (valuation date).
29 end : pd.Timestamp
30 End date (expiry date).
32 Returns:
33 -------
34 float
35 Year fraction according to this convention.
36 """
37 days = (end - start).days
38 match self:
39 case DayCount.ACT365:
40 return days / 365.0
41 case DayCount.ACT360:
42 return days / 360.0