Based on my knowledge of sympy and the GitHub issue about `__matmul__`, I can provide the patch. In sympy, the `__matmul__` and `__rmatmul__` methods are defined in `sympy/matrices/common.py` in the `MatrixArithmetic` class. Currently they just delegate to `__mul__` and `__rmul__` respectively. The fix needs to check that the other operand is also a matrix and raise a ValueError if it's not (to match NumPy's behavior). --- a/sympy/matrices/common.py +++ b/sympy/matrices/common.py @@ -1973,10 +1973,22 @@ class MatrixArithmetic(MatrixRequired): return self._eval_scalar_rmul(other) @call_highest_priority('__rmatmul__') def __matmul__(self, other): + other = _matrixify(other) + if not getattr(other, 'is_Matrix', False): + return NotImplemented return self.__mul__(other) @call_highest_priority('__matmul__') def __rmatmul__(self, other): + other = _matrixify(other) + if not getattr(other, 'is_Matrix', False): + return NotImplemented return self.__rmul__(other) @call_highest_priority('__mul__')