ChainRules.jl
ChainRules.jl copied to clipboard
Use CommutativeMulNumber everywhere it is needed (and no where it isn't)
Currently, rules for * are constrained to CommutativeMulNumber types. This is unnecessary, because only two numbers at a time are multiplied, so commutation is never needed. These constraints should be relaxed.
Conversely, the scalar rule for ^ requires commutativity but makes no such type constraint. It should be limited to CommutativeMulNumber.
There may be other cases.