using ChainRulesCore changes type promotion logic
I'm using Julia 1.9 and ChainRulesCore v1.19.0
When I use the following code, the results change
a = ones(Complex,100,100)
a'
ela = eltype(a') # Complex
using ChainRulesCore
a = ones(Complex,100,100)
a'
ela1 = eltype(a') # Any
ela is Complex but ela1 is Any
Please tell me how to avoid this problem (constructing the Complex type is inevitable),Please tell me how to avoid this problem (constructing the Complex type is inevitable), or is this a bug?
Work around, is don't use Complex use ComplexF64, which will also make your code all round faster.
Since Complex is an nonconcrete type. See https://docs.julialang.org/en/v1/manual/performance-tips/#man-performance-abstract-container
If you do
ones(ComplexF64, 100, 100) then everything works fine.
I don't know exactly what is happening have no idea what is happening here.
ChainRulesCore doesn't monkey patch ' or really touch anything in the promotion machiner at all. (It doesn't monkey patch anything). so I don't think this is something we have done.
I think this is because the eltype of adjoint is determines using
Base.promote_op(adjoint, typeof(a)) which is documented as extremely fragile.
I will open an issue in julia itself