+
+ def _element_constructor_(self, elt):
+ if elt in self:
+ return self
+ else:
+ return self.from_list(elt)
+
+
+class HurwitzMatrixAlgebraElement(MatrixAlgebraElement):
+ def is_hermitian(self):
+ r"""
+
+ SETUP::
+
+ sage: from mjo.matrix_algebra import HurwitzMatrixAlgebra
+
+ EXAMPLES::
+
+ sage: A = HurwitzMatrixAlgebra(QQbar, ZZ, 2)
+ sage: M = A([ [ 0,I],
+ ....: [-I,0] ])
+ sage: M.is_hermitian()
+ True
+
+ """
+ return all( self[i,j] == self[j,i].conjugate()
+ for i in range(self.nrows())
+ for j in range(self.ncols()) )
+
+
+class HurwitzMatrixAlgebra(MatrixAlgebra):
+ Element = HurwitzMatrixAlgebraElement
+
+ def one(self):
+ r"""
+ SETUP::
+
+ sage: from mjo.matrix_algebra import HurwitzMatrixAlgebra
+
+ """
+ return sum( (self.monomial((i,i,self.entry_algebra().one()))
+ for i in range(self.nrows()) ),
+ self.zero() )
+
+