I noticed that there are methods of * and dot for the AbstractZero types that work like
Base.:*(::NoTangent, ::NoTangent) = NoTangent()
LinearAlgebra.dot(::NoTangent, ::ZeroTangent) = ZeroTangent()
However, if both arguments are tangents,
* should not be defined.
dot should return a real number, not another tangent.
In my understanding, code that relies on such nonlinear tangent to tangent operations cannot be correct, so it may be worthwhile to remove such methods.
I noticed that there are methods of
*anddotfor theAbstractZerotypes that work likeHowever, if both arguments are tangents,
*should not be defined.dotshould return a real number, not another tangent.In my understanding, code that relies on such nonlinear tangent to tangent operations cannot be correct, so it may be worthwhile to remove such methods.