diff options
| -rw-r--r-- | pyisda/credit_index.pyx | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx index 367000b..b4a5277 100644 --- a/pyisda/credit_index.pyx +++ b/pyisda/credit_index.pyx @@ -168,6 +168,60 @@ cdef class CurveList: j += 1 return out + def set_defaulted(self, list names): + cdef: + char[128] buf + CurveName cn + map[CurveName, size_t].iterator got + pair[CurveName, size_t] p + size_t i + DocClause doc_clause + Seniority sen + ticker + + for (ticker, sen, doc_clause) in names: + buf[0] = <char>sen + buf[1] = <char>doc_clause + strcpy(&buf[2], <char*>ticker) + cn = CurveName(buf) + got = self.names.find(cn) + if got == self.names.end(): + raise KeyError((ticker, sen, doc_clause)) + else: + p = deref(got) + cn, i = p.first, p.second + cn.defaulted()[0] = self.base_date + self.defaulted_weight += self._weights[i] + + def clear_defaulted(self, list names=None): + cdef: + char[128] buf + CurveName cn + map[CurveName, size_t].iterator got + pair[CurveName, size_t] p + size_t i + DocClause doc_clause + Seniority sen + + if names is None: + for p in self.names: + p.first.defaulted()[0] = -1 + self.defaulted_weight = 0.0 + else: + for (ticker, sen, doc_clause) in names: + buf[0] = <char>sen + buf[1] = <char>doc_clause + strcpy(&buf[2], <char*>ticker) + cn = CurveName(buf) + got = self.names.find(cn) + if got == self.names.end(): + raise KeyError((ticker, sen, doc_clause)) + else: + cn, i = deref(got).first, deref(got).second + if deref(cn.defaulted()) != -1: + cn.defaulted()[0] = -1 + self.defaulted_weight -= self._weights[i] + @weights.setter def weights(self, double[::1] val): if val.shape[0] != self._weights.size(): |
