Source code for yieldcurves.operators

# -*- coding: utf-8 -*-

# yieldcurves
# -----------
# A Python library for financial yield curves.
#
# Author:   sonntagsgesicht
# Version:  0.2.6.1, copyright Monday, 14 October 2024
# Website:  https://github.com/sonntagsgesicht/yieldcurves
# License:  Apache License 2.0 (see LICENSE file)


from .yieldcurves import YieldCurve
from .tools import snake_case


[docs] class YieldCurveOperator: def __init__(self, curve: YieldCurve): r"""Operator turning |YieldCurve| into simple callable >>> from curves.interpolation import linear >>> from yieldcurves import YieldCurve >>> yc = YieldCurve(linear([0, 10], [0.01, 0.02]), spot_price=10) Turn yield curve into general finanical curve like ... ... a price curve >>> from yieldcurves import Price >>> p = Price(yc) >>> p(1.234) 10.139592895598932 >>> yc.price(1.234) == p(1.234) True ... a spot rate curve >>> from yieldcurves import Spot >>> s = Spot(yc) >>> s(1.234) 0.011233999999999886 >>> yc.spot(1.234) == s(1.234) True ... a short rate curve >>> from yieldcurves import Short >>> sh = Short(yc) >>> sh(1.234) 0.012468004483236131 >>> yc.short(1.234) == sh(1.234) True ... or into interest rate related curve like ... ... a discount factor curve >>> from yieldcurves import Df >>> df = Df(yc) >>> df(1.234) 0.9862328895216768 >>> yc.df(1.234) == df(1.234) True ... a zero rate curve >>> from yieldcurves import Zero >>> z = Zero(yc) >>> z(1.234) 0.011233999999999886 >>> yc.zero(1.234) == z(1.234) True ... a cash rate curve >>> from yieldcurves import Cash >>> ch = Cash(yc) >>> ch(1.234) 0.012738239885720759 >>> yc.cash(1.234) == ch(1.234) True ... a swap annuity curve >>> from yieldcurves import Annuity >>> an = Annuity(yc) >>> an(1.234) 1.2198387749234412 >>> yc.annuity(1.234) == an(1.234) True ... a swap par rate curve >>> from yieldcurves import Swap >>> sw = Swap(yc) >>> sw(1.234) 0.01128600825071107 >>> yc.swap(1.234) == sw(1.234) True ... or into credit related curve like ... ... a survival probability curve >>> from yieldcurves import Prob >>> pb = Prob(yc) >>> pb(1.234) 0.9862328895216768 >>> yc.prob(1.234) == pb(1.234) True ... a intensity curve >>> from yieldcurves import Intensity >>> it = Intensity(yc) >>> it(1.234) 0.011233999999999886 >>> yc.intensity(1.234) == it(1.234) True ... a hazard rate curve >>> from yieldcurves import Hz >>> hz = Hz(yc) >>> hz(1.234) 0.012468004483236131 >>> yc.hz(1.234) == hz(1.234) True ... a probalility of default curve >>> from yieldcurves import Pd >>> pd = Pd(yc) >>> pd(1.234) 0.013767110478323241 >>> yc.pd(1.234) == pd(1.234) True ... a marginal/annual survival probalility curve >>> from yieldcurves import Marginal >>> mg = Marginal(yc) >>> mg(1.234) 0.9866222877257945 >>> yc.marginal(1.234) == mg(1.234) True ... a marginal/annual probalility of default curve >>> from yieldcurves import MarginalPd >>> md = MarginalPd(yc) >>> md(1.234) 0.013377712274205478 >>> yc.marginal_pd(1.234) == md(1.234) True """ self.curve = ( curve) if isinstance(curve, YieldCurve) else YieldCurve(curve) def __call__(self, x, y=None): name = snake_case(self.__class__.__name__) if hasattr(self.curve, name): if y is None: return getattr(self.curve, name)(x) return getattr(self.curve, name)(x, y) msg = f"curve attribute of type {self.__class__.__name__!r} " \ f"object has no attribute {name!r} that can be called" raise AttributeError(msg) def __str__(self): return f"{self.__class__.__qualname__}({self.curve!s})" def __repr__(self): return f"{self.__class__.__qualname__}({self.curve!r})"
class Price(YieldCurveOperator): """price curve from |YieldCurve| (for docs see |YieldCurveOperator|)""" pass class Spot(YieldCurveOperator): """spot rate curve from |YieldCurve|""" pass class Short(YieldCurveOperator): """spot rate curve from |YieldCurve|""" pass # --- interest rate operators --- class Df(YieldCurveOperator): """discount factor curve from |YieldCurve|""" pass class Zero(YieldCurveOperator): """zero coupon bond rate curve from |YieldCurve|""" pass class Cash(YieldCurveOperator): """cash rate curve from |YieldCurve|""" pass class Annuity(YieldCurveOperator): """swap annuity curve from |YieldCurve|""" pass class Swap(YieldCurveOperator): """swap par rate curve from |YieldCurve|""" pass # --- credit prob operators --- class Prob(YieldCurveOperator): """survival probability curve from |YieldCurve|""" pass class Intensity(YieldCurveOperator): """intensity curve from |YieldCurve|""" pass class Hz(YieldCurveOperator): """hazard rate curve from |YieldCurve|""" pass class Pd(YieldCurveOperator): """probability of default curve from |YieldCurve|""" pass class Marginal(YieldCurveOperator): """annual survival probability curve from |YieldCurve|""" pass class MarginalPd(YieldCurveOperator): """annual probability of default curve from |YieldCurve|""" pass