Skip to content

Commit 676297b

Browse files
committed
fixed new cython version
1 parent e8d776d commit 676297b

File tree

3 files changed

+113
-1
lines changed

3 files changed

+113
-1
lines changed

PyFin/Analysis/SecurityValueHolders.pyx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,18 +138,34 @@ cdef class SecurityValueHolder(object):
138138
def __add__(self, right):
139139
return SecurityAddedValueHolder(self, right)
140140

141+
def __radd__(self, left):
142+
return SecurityAddedValueHolder(left, self)
143+
141144
def __sub__(self, right):
142145
return SecuritySubbedValueHolder(self, right)
143146

147+
def __rsub__(self, left):
148+
return SecuritySubbedValueHolder(left, self)
149+
144150
def __mul__(self, right):
145151
return SecurityMultipliedValueHolder(self, right)
146152

153+
def __rmul__(self, left):
154+
return SecurityMultipliedValueHolder(left, self)
155+
156+
147157
def __div__(self, right):
148158
return SecurityDividedValueHolder(self, right)
149159

160+
def __rdiv__(self, left):
161+
return SecurityDividedValueHolder(left, self)
162+
150163
def __truediv__(self, right):
151164
return SecurityDividedValueHolder(self, right)
152165

166+
def __rtruediv__(self, left):
167+
return SecurityDividedValueHolder(left, self)
168+
153169
def __richcmp__(self, right, int op):
154170

155171
if op == 0:

PyFin/Analysis/SeriesValues.pyx

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ cdef class SeriesValues(object):
9292
else:
9393
return SeriesValues(self.values + right, self.name_mapping)
9494

95+
def __radd__(self, left):
96+
if isinstance(left, SeriesValues):
97+
if isinstance(self, SeriesValues):
98+
return SeriesValues(left.values + self.values, self.name_mapping)
99+
else:
100+
return SeriesValues(left.values + self, left.name_mapping)
101+
else:
102+
return SeriesValues(left + self.values, self.name_mapping)
103+
95104
def __sub__(self, right):
96105
if isinstance(right, SeriesValues):
97106
if isinstance(self, SeriesValues):
@@ -101,6 +110,15 @@ cdef class SeriesValues(object):
101110
else:
102111
return SeriesValues(self.values - right, self.name_mapping)
103112

113+
def __rsub__(self, left):
114+
if isinstance(left, SeriesValues):
115+
if isinstance(self, SeriesValues):
116+
return SeriesValues(left.values - self.values, self.name_mapping)
117+
else:
118+
return SeriesValues(left.values - self, left.name_mapping)
119+
else:
120+
return SeriesValues(left - self.values, self.name_mapping)
121+
104122
def __mul__(self, right):
105123
if isinstance(right, SeriesValues):
106124
if isinstance(self, SeriesValues):
@@ -110,6 +128,15 @@ cdef class SeriesValues(object):
110128
else:
111129
return SeriesValues(self.values * right, self.name_mapping)
112130

131+
def __rmul__(self, left):
132+
if isinstance(left, SeriesValues):
133+
if isinstance(self, SeriesValues):
134+
return SeriesValues(left.values * self.values, self.name_mapping)
135+
else:
136+
return SeriesValues(left.values * self, left.name_mapping)
137+
else:
138+
return SeriesValues(left * self.values, self.name_mapping)
139+
113140
@cython.cdivision(True)
114141
def __truediv__(self, right):
115142
cdef np.ndarray[double, ndim=1] values
@@ -128,6 +155,24 @@ cdef class SeriesValues(object):
128155
values[~np.isfinite(values)] = NAN
129156
return SeriesValues(values, name_mapping)
130157

158+
@cython.cdivision(True)
159+
def __rtruediv__(self, left):
160+
cdef np.ndarray[double, ndim=1] values
161+
cdef dict name_mapping
162+
if isinstance(left, SeriesValues):
163+
if isinstance(self, SeriesValues):
164+
values = left.values / self.values
165+
name_mapping = self.name_mapping
166+
else:
167+
values = left.values / self
168+
name_mapping = left.name_mapping
169+
else:
170+
values = left / self.values
171+
name_mapping = self.name_mapping
172+
173+
values[~np.isfinite(values)] = NAN
174+
return SeriesValues(values, name_mapping)
175+
131176
@cython.cdivision(True)
132177
def __div__(self, right):
133178
cdef np.ndarray[double, ndim=1] values
@@ -146,6 +191,24 @@ cdef class SeriesValues(object):
146191
values[~np.isfinite(values)] = NAN
147192
return SeriesValues(values, name_mapping)
148193

194+
@cython.cdivision(True)
195+
def __rdiv__(self, left):
196+
cdef np.ndarray[double, ndim=1] values
197+
cdef dict name_mapping
198+
if isinstance(left, SeriesValues):
199+
if isinstance(self, SeriesValues):
200+
values = left.values / self.values
201+
name_mapping = self.name_mapping
202+
else:
203+
values = left.values / self
204+
name_mapping = left.name_mapping
205+
else:
206+
values = left / self.values
207+
name_mapping = self.name_mapping
208+
209+
values[~np.isfinite(values)] = NAN
210+
return SeriesValues(values, name_mapping)
211+
149212
def __and__(self, right):
150213
if isinstance(right, SeriesValues):
151214
if isinstance(self, SeriesValues):
@@ -155,6 +218,15 @@ cdef class SeriesValues(object):
155218
else:
156219
return SeriesValues(self.values.astype(bool) & right, self.name_mapping)
157220

221+
def __rand__(self, left):
222+
if isinstance(left, SeriesValues):
223+
if isinstance(self, SeriesValues):
224+
return SeriesValues(left.values.astype(bool) & self.values.astype(bool), self.name_mapping)
225+
else:
226+
return SeriesValues(left.values.astype(bool) & self, left.name_mapping)
227+
else:
228+
return SeriesValues(left & self.values.astype(bool), self.name_mapping)
229+
158230
def __or__(self, right):
159231
if isinstance(right, SeriesValues):
160232
if isinstance(self, SeriesValues):
@@ -164,6 +236,15 @@ cdef class SeriesValues(object):
164236
else:
165237
return SeriesValues(self.values.astype(bool) | right, self.name_mapping)
166238

239+
def __ror__(self, left):
240+
if isinstance(left, SeriesValues):
241+
if isinstance(self, SeriesValues):
242+
return SeriesValues(left.values.astype(bool) | self.values.astype(bool), self.name_mapping)
243+
else:
244+
return SeriesValues(left.values.astype(bool) | self, left.name_mapping)
245+
else:
246+
return SeriesValues(left | self.values.astype(bool), self.name_mapping)
247+
167248
def __xor__(self, right):
168249
if isinstance(right, SeriesValues):
169250
if isinstance(self, SeriesValues):
@@ -231,7 +312,7 @@ cdef class SeriesValues(object):
231312
start = diff_loc + 1
232313
data[isnan(self.values)] = NAN
233314
else:
234-
data = rankdata(self.values).astype(float)
315+
data = rankdata(self.values, nan_policy="omit").astype(float)
235316
data[isnan(self.values)] = NAN
236317
return SeriesValues(data, self.name_mapping)
237318

PyFin/Math/Accumulators/IAccumulators.pyx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,34 @@ cdef class IAccumulator(object):
3636
def __add__(self, right):
3737
return AddedValueHolder(self, right)
3838

39+
def __radd__(self, left):
40+
return AddedValueHolder(left, self)
41+
3942
def __sub__(self, right):
4043
return MinusedValueHolder(self, right)
4144

45+
def __rsub__(self, left):
46+
return MinusedValueHolder(left, self)
47+
4248
def __mul__(self, right):
4349
return MultipliedValueHolder(self, right)
4450

51+
def __rmul__(self, left):
52+
return MultipliedValueHolder(left, self)
53+
4554
def __div__(self, right):
4655
return DividedValueHolder(self, right)
4756

57+
def __rdiv__(self, left):
58+
return DividedValueHolder(left, self)
59+
4860
# only work for python 3
4961
def __truediv__(self, right):
5062
return DividedValueHolder(self, right)
5163

64+
def __rtruediv__(self, left):
65+
return DividedValueHolder(left, self)
66+
5267
def __richcmp__(self, right, int op):
5368
if op == 0:
5469
return LtOperatorValueHolder(self, right)

0 commit comments

Comments
 (0)