aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/utils.py4
-rw-r--r--python/dates.py13
-rw-r--r--sql/dawn.sql10
3 files changed, 22 insertions, 5 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py
index 64337949..c75a0018 100644
--- a/python/analytics/utils.py
+++ b/python/analytics/utils.py
@@ -2,7 +2,7 @@ import datetime
import numpy as np
import pandas as pd
from scipy.special import h_roots
-from dateutil.relativedelta import relativedelta, FR
+from dateutil.relativedelta import relativedelta, WE
from functools import partial, wraps
from pyisda.date import pydate_to_TDate
from pandas.api.types import CategoricalDtype
@@ -32,7 +32,7 @@ def next_twentieth(d):
def third_wednesday(d):
if isinstance(d, datetime.date):
- return d + relativedelta(day=1, weekday=FR(3))
+ return d + relativedelta(day=1, weekday=WE(3))
elif isinstance(d, Date):
return nth_weekday(3, Wednesday, d.month, d.year)
diff --git a/python/dates.py b/python/dates.py
index 025949b6..348c2b48 100644
--- a/python/dates.py
+++ b/python/dates.py
@@ -2,7 +2,12 @@ import datetime
import pandas as pd
import unittest
-from dateutil.relativedelta import relativedelta
+from dateutil.relativedelta import relativedelta, WE, MO
+try:
+ from dateutil.parser import isoparse
+except ImportError:
+ from dateutil.parser import parse as isoparse
+
from pandas.tseries.offsets import CustomBusinessDay, Day, QuarterBegin
from pandas.tseries.holiday import get_calendar, HolidayCalendarFactory, GoodFriday
@@ -27,6 +32,12 @@ def previous_twentieth(d):
r -= relativedelta(months = mod)
return r
+def imm_date(d):
+ if isinstance(d, str):
+ d = isoparse(d)
+ r = d + relativedelta(day=1, weekday=WE(3))
+ return r + relativedelta(weekday=MO(-1))
+
def days_accrued(tradedate):
tradedate = pd.Timestamp(tradedate)
start_protection = tradedate + Day()
diff --git a/sql/dawn.sql b/sql/dawn.sql
index da6dd7b4..c19c77fb 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -967,10 +967,16 @@ FROM temp;
END
$$ LANGUAGE plpgsql;
+CREATE OR REPLACE function imm_date(p_date date)
+RETURNS date AS $$
+from dates import imm_date
+return imm_date(p_date)
+$$ LANGUAGE plpython2u;
+
CREATE OR REPLACE function days_accrued(p_date date)
RETURNS integer AS $$
-FROM dates import days_accrued
-RETURN days_accrued(p_date)
+from dates import days_accrued
+return days_accrued(p_date)
$$ LANGUAGE plpython2u;
CREATE MATERIALIZED VIEW factors_history AS