from cdsone cimport (JpmcdsCdsoneUpfrontCharge, JpmcdsCdsoneSpread, JpmcdsStringToStubMethod) from curve cimport ZeroCurve from date cimport JpmcdsStringToDateInterval, pydate_to_TDate, dcc cdef int SUCCESS = 0 def upfront_charge(date, value_date, benchmark_start_date, stepin_date, start_date, end_date, double coupon_rate, ZeroCurve zc, double spread, double recovery_rate, TBoolean pay_accrued_at_start = True, TBoolean pay_accrued_on_default = True): cdef: TDate today = pydate_to_TDate(date) TDate value_date_c = pydate_to_TDate(value_date) TDate benchmark_start_date_c = pydate_to_TDate(benchmark_start_date) TDate stepin_date_c = pydate_to_TDate(stepin_date) TDate start_date_c = pydate_to_TDate(start_date) TDate end_date_c = pydate_to_TDate(end_date) double result TStubMethod stub TDateInterval ivl char* routine = "upfront_charge" if JpmcdsStringToStubMethod(b"f/s", &stub) != SUCCESS: raise ValueError("can't convert stub") if JpmcdsStringToDateInterval(b"3M", routine, &ivl) != SUCCESS: raise ValueError("can't convert to date interval") if JpmcdsCdsoneUpfrontCharge(today, value_date_c, benchmark_start_date_c, stepin_date_c, start_date_c, end_date_c, coupon_rate, pay_accrued_on_default, &ivl, &stub, dcc("ACT/360"), b'F', b"None", zc._thisptr, spread, recovery_rate, pay_accrued_at_start, &result) == SUCCESS: return result else: raise ValueError("computation failed") def spread_from_upfront(date, value_date, benchmark_start_date, stepin_date, start_date, end_date, double coupon_rate, ZeroCurve zc, double upfront, double recovery_rate, TBoolean pay_accrued_at_start = True, TBoolean pay_accrued_on_default = True): cdef: TDate today = pydate_to_TDate(date) TDate value_date_c = pydate_to_TDate(value_date) TDate benchmark_start_date_c = pydate_to_TDate(benchmark_start_date) TDate stepin_date_c = pydate_to_TDate(stepin_date) TDate start_date_c = pydate_to_TDate(start_date) TDate end_date_c = pydate_to_TDate(end_date) double result TStubMethod stub TDateInterval ivl char* routine = "upfront_charge" if JpmcdsStringToStubMethod(b"f/s", &stub) != SUCCESS: raise ValueError("can't convert stub") if JpmcdsStringToDateInterval(b"3M", routine, &ivl) != SUCCESS: raise ValueError("can't convert to date interval") if JpmcdsCdsoneSpread(today, value_date_c, benchmark_start_date_c, stepin_date_c, start_date_c, end_date_c, coupon_rate, pay_accrued_on_default, &ivl, &stub, dcc("ACT/360"), b'F', b"None", zc._thisptr, upfront, recovery_rate, pay_accrued_at_start, &result) == SUCCESS: return result else: raise ValueError("computation failed")