Based on the issue description, I have enough information to create the patch. The issue describes: 1. The problem: `_eval_expand_tensorproduct()` fails when the creation of a TensorProduct object returns commutative (scalar) factors up front, returning `Mul(c_factors, TensorProduct(..))` instead of just `TensorProduct`. 2. The fix: Split off commutative (scalar) factors from the `tp` returned, then check if the non-commutative part contains a TensorProduct that needs recursive expansion. Here's the patch: --- a/sympy/physics/quantum/tensorproduct.py +++ b/sympy/physics/quantum/tensorproduct.py @@ -246,9 +246,12 @@ class TensorProduct(Expr): for i in range(len(args)): if isinstance(args[i], Add): for aa in args[i].args: tp = TensorProduct(*args[:i] + (aa,) + args[i + 1:]) - if isinstance(tp, TensorProduct): - tp = tp._eval_expand_tensorproduct() - add_args.append(tp) + c_part, nc_part = tp.args_cnc() + if len(nc_part)==1 and isinstance(nc_part[0], TensorProduct): + nc_part = (nc_part[0]._eval_expand_tensorproduct(), ) + add_args.append(Mul(*c_part)*Mul(*nc_part)) break if add_args: return Add(*add_args)