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

1"""Day-count conventions for year-fraction computation.""" 

2 

3from __future__ import annotations 

4 

5from enum import Enum 

6 

7import pandas as pd 

8 

9 

10class DayCount(Enum): 

11 """Day-count convention for computing year fractions. 

12 

13 Parameters 

14 ---------- 

15 value : str 

16 Human-readable convention name. 

17 """ 

18 

19 ACT365 = "ACT/365" 

20 ACT360 = "ACT/360" 

21 

22 def year_fraction(self, start: pd.Timestamp, end: pd.Timestamp) -> float: 

23 """Compute the year fraction between two dates. 

24 

25 Parameters 

26 ---------- 

27 start : pd.Timestamp 

28 Start date (valuation date). 

29 end : pd.Timestamp 

30 End date (expiry date). 

31 

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