Purists of object-oriented programming note that we chose a functional rather than object-oriented style for most operations. The functional style makes it easier to compose operations, e.g., B = shift(B,1) + B + shift(B,-1), than if shift() modified B. Recommended by the ARM [ES90, page 249], the functional syntax shift(B,1) makes it clear that the operand B is not modified, while in B.shift(1) it is not as clear. Similarly, we believe that x = sum(A*B+C) is clearer than x = (A*B+C).sum().