aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/portfolio.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/portfolio.py')
-rw-r--r--python/analytics/portfolio.py25
1 files changed, 19 insertions, 6 deletions
diff --git a/python/analytics/portfolio.py b/python/analytics/portfolio.py
index 62861922..d37c0e11 100644
--- a/python/analytics/portfolio.py
+++ b/python/analytics/portfolio.py
@@ -2,6 +2,7 @@ from __future__ import annotations
from .index import CreditIndex
from .option import BlackSwaption
from .tranche_basket import DualCorrTranche
+from functools import reduce
import pandas as pd
import numpy as np
@@ -136,12 +137,24 @@ class Portfolio:
@property
def jump_to_default(self):
- r = []
- for t in self.trades:
- print(t.index_type, t.series, t.attach, t.detach)
- r.append(t.jump_to_default())
- df = pd.concat(r, axis=1)
- return df.sum(axis=1)
+ return sum(t.jump_to_default for t in self.trades if isinstance(t, CreditIndex))
+
+ def jtd_single_names(self):
+ jtd = reduce(
+ lambda x, y: x.add(y, fill_value=0.0),
+ (
+ t.jtd_single_names()
+ for t in self.trades
+ if isinstance(t, (DualCorrTranche, CreditIndex))
+ ),
+ )
+ return (
+ jtd.unstack()
+ .sort_index(1, ascending=False)
+ .fillna(0.0)
+ .cumsum(axis=1)
+ .sort_index(1)
+ )
@value_date.setter
def value_date(self, d):