in the tensordot doc, they mention that it copies the default behaviour of numpy which is to have axes=2. Since we are iterating (scan) tensordot over the first axis, this makes axes=3 the equivalent default.