Why do `A_mul_Bc` and `A_mul_Bt` belong to `Base`, while `A_mul_B!` lives in Base.LinAlg?

question

#1

Searching A_mul_B in Julia Doc gives me the following results:

Base.A_mul_Bc(Function)
Base.A_mul_Bt(Function)
Base.LinAlg.A_mul_B!(Function)
...

So I wonder why A_mul_Bc and A_mul_Bt belong to Base, while A_mul_B! lives in Base.LinAlg? Thanks!


#2

I don’t know the reason for that. But there is a big change of these things in 0.7: https://github.com/JuliaLang/julia/pull/24969


#3

Thanks for the pointer. I also quickly read the rationale behind this PR, but how are these routines re-grouped and re-affiliated now? Do you by chance know?

A bit surprisingly, it took 3 years for this issue to be addressed. This must be a colossus!


#4

AFAICT the notation is shifted to wrappers, ie the type system. Eg wrapping a matrix in Transpose now indicates that it should be transposed, etc.

I think that this is a very elegant solution. See the discussion for #4774 for some more history.


#5

Thanks for the comment. It took me forever to read the almost-endless thread of #4774. :joy::joy:


#6

Here’s a summary: https://www.youtube.com/watch?v=C2RO34b_oPM


#7

Thanks buddy! Watching now. I wish you could have hinted me a hour ago so that I could have lived a slightly easier life in the last hour.:joy::joy:


#8

Btw, when will v0.7 be rolled out? I quickly checked the announcement section and saw none relevant.

Or no more releases before v1.0?


#9

Don’t know. Feature freeze should be tomorrow: 1.0 Feature Freeze Dec 15th