@@ -62,20 +62,26 @@ def __add__(self, other):
62
62
if self .value is not None and other .value is not None :
63
63
return Int (self .value + other .value )
64
64
return Int ()
65
+ if isinstance (other , Float ):
66
+ return Float ()
65
67
raise TypeError ()
66
68
67
69
def __sub__ (self , other ):
68
70
if isinstance (other , Int ):
69
71
if self .value is not None and other .value is not None :
70
72
return Int (self .value - other .value )
71
73
return Int ()
74
+ if isinstance (other , Float ):
75
+ return Float ()
72
76
raise TypeError ()
73
77
74
78
def __mul__ (self , other ):
75
79
if isinstance (other , Int ):
76
80
if self .value is not None and other .value is not None :
77
81
return Int (self .value * other .value )
78
82
return Int ()
83
+ if isinstance (other , Float ):
84
+ return Float ()
79
85
raise TypeError ()
80
86
81
87
def __truediv__ (self , other ):
@@ -84,7 +90,9 @@ def __truediv__(self, other):
84
90
raise TypeError ()
85
91
86
92
def __neg__ (self ):
87
- return Int (- self .value )
93
+ if self .value is not None :
94
+ return Int (- self .value )
95
+ return Int ()
88
96
89
97
90
98
class Float (Type ):
@@ -176,11 +184,11 @@ def __ge__(self, other):
176
184
def _mat_op (self , other , op ):
177
185
new_dims = []
178
186
for self_dim , other_dim in zip (self .dims , other .dims ):
179
- new_dim = self_dim or other_dim
187
+ new_dim = self_dim or other_dim # handle None
180
188
if new_dim != self_dim or new_dim != other_dim :
181
189
raise TypeError
182
190
new_dims .append (new_dim )
183
- return Vector (new_dims , op (self .primitive_type , other .primitive_type ))
191
+ return Vector (tuple ( new_dims ) , op (self .primitive_type , other .primitive_type ))
184
192
185
193
def mat_add (self , other ):
186
194
return self ._mat_op (other , lambda x , y : x + y )
0 commit comments