def sub(self, a, b): if isinstance(a, float): if isinstance(b, float): return a - b elif isinstance(b, Complex): return Complex.sub(Complex(a), b) elif isinstance(b, Matrix): raise ComputorException('Illegal operation: Rational - Matrix') elif isinstance(a, Complex): if isinstance(b, float): return Complex.sub(a, Complex(b)) elif isinstance(b, Complex): return Complex.sub(a, b) elif isinstance(b, Matrix): raise ComputorException('Illegal operation: Complex - Matrix') elif isinstance(a, Matrix): if isinstance(b, float): raise ComputorException('Illegal operation: Matrix - Rational') elif isinstance(b, Complex): raise ComputorException('Illegal operation: Matrix - Complex') elif isinstance(b, Matrix): return Matrix.sub(a, b) raise ComputorException('Computor.sub(): something bad happened 🤷')