aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/option.py15
-rw-r--r--python/analytics/utils.py17
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