I don't understand the computation here. Shoudn't there be some kind of relationship between the value of `trans_a` and the ordering of A? (same for B). 

Suppose you have A and B in C order, and both `trans_a` and `trans_b` False. `_check_forder` will transpose both arrays, so you'll end up computing something like `np.dot(A.T, B.T)` instead of `np.dot(A,B)`. The right way would be to compute `np.dot(B.T, A.T).T`. Or did I miss something?