DiagonalOperator diagonal() function as property?
The DiagonalOperator class has a function diagonal() returning the respective Field.
IMHO this should be a property, since e.g.
diagonal_val = operator.diagonal().val
just looks stupid (from a purely designy pythonic point of view).
The main philosophy I propose in this case is that from a class point of view 'diagonal' to DiagonalOperator is the same as 'val' to Field.
Following this the getter of the proposed property 'diagonal' should not return a copy of the diagonal (in contrast to what the current function diagonal() returns) since the property 'val' of Field does not do this either.