Well that's no different to any other non-square matrix, right? The diagonal blocks are the ones where block_i == block_j . If your block structure is non-diagonal, you probably don't want to setDiagonal, but I guess it's legal to do so. That said, I suspect the use cases are rare, so if it's inconvenient we could also just not support it.