diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/option.py | 15 | ||||
| -rw-r--r-- | python/analytics/utils.py | 17 |
2 files changed, 17 insertions, 15 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py index a714ae17..e4b08364 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -10,10 +10,10 @@ from .sabr import sabr from .utils import GHquad, build_table from .index import g, ForwardIndex, CreditIndex from .db import _engine +from .utils import memoize from yieldcurve import roll_yc from pandas.tseries.offsets import BDay -from functools import wraps from pyisda.flat_hazard import pv_vec from scipy.optimize import brentq from scipy.integrate import simps @@ -36,19 +36,6 @@ def calib(S0, fp, exercise_date, exercise_date_settle, index.fixed_rate * 1e-4) return np.inner(pv, w) - fp -def memoize(f): - @wraps(f) - def cached_f(*args, **kwargs): - obj = args[0] - key = (f.__name__, hash(obj)) - if key in obj._cache: - return obj._cache[key] - else: - v = f(*args, **kwargs) - obj._cache[key] = v - return v - return cached_f - def ATMstrike(index, exercise_date): """computes the at-the-money strike. diff --git a/python/analytics/utils.py b/python/analytics/utils.py index 51061e79..fab94397 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -1,8 +1,9 @@ +import datetime import numpy as np import pandas as pd from scipy.special import h_roots from dateutil.relativedelta import relativedelta, FR -import datetime +from functools import wraps from pyisda.date import pydate_to_TDate from pandas.api.types import CategoricalDtype from quantlib.time.date import nth_weekday, Wednesday, Date @@ -99,3 +100,17 @@ def build_table(rows, format_strings, row_format): row = [f.format(r) if f else r for r, f in zip(row, format_string)] r.append(row_format.format(*row)) return r + + +def memoize(f): + @wraps(f) + def cached_f(*args, **kwargs): + obj = args[0] + key = (f.__name__, hash(args)) + if key in obj._cache: + return obj._cache[key] + else: + v = f(*args, **kwargs) + obj._cache[key] = v + return v + return cached_f |
