def mul(self, a, b): if isinstance(a, float): if isinstance(b, float): return a * b elif isinstance(b, Complex): return Complex.mul(Complex(a), b) elif isinstance(b, Matrix): return Matrix.scalar_mul(a, b) elif isinstance(a, Complex): if isinstance(b, float): return Complex.mul(a, Complex(b)) elif isinstance(b, Complex): return Complex.mul(a, b) elif isinstance(b, Matrix): raise ComputorException('Illegal operation: Complex * Matrix') elif isinstance(a, Matrix): if isinstance(b, float): return Matrix.scalar_mul(b, a) elif isinstance(b, Complex): raise ComputorException('Illegal operation: Matrix * Complex') elif isinstance(b, Matrix): return Matrix.element_mul(a, b) raise ComputorException('Computor.mul(): something bad happened 🤷')