| 27 | return Dual(self.real, cur) |
| 28 | |
| 29 | def __add__(self, other): |
| 30 | if not isinstance(other, Dual): |
| 31 | return Dual(self.real + other, self.duals) |
| 32 | s_dual = self.duals.copy() |
| 33 | o_dual = other.duals.copy() |
| 34 | if len(s_dual) > len(o_dual): |
| 35 | o_dual.extend([1] * (len(s_dual) - len(o_dual))) |
| 36 | elif len(s_dual) < len(o_dual): |
| 37 | s_dual.extend([1] * (len(o_dual) - len(s_dual))) |
| 38 | new_duals = [] |
| 39 | for i in range(len(s_dual)): |
| 40 | new_duals.append(s_dual[i] + o_dual[i]) |
| 41 | return Dual(self.real + other.real, new_duals) |
| 42 | |
| 43 | __radd__ = __add__ |
| 44 | |