Ishi convention with the components (i,j) being ordered
lexicographically and then within each component the basis
elements (i,j,k) ordered arbitrarily.
+
+ SETUP::
+
+ sage: from mjo.clan.random import random_clan
+
+ TESTS:
+
+ In my "Automorphisms of hyperbolic polynomials" paper, I claim
+ that the following inner product is zero if and only if the clan
+ product itself is zero::
+
+ sage: C = random_clan(nontrivial=True)
+ sage: while C.rank() < 2:
+ ....: # need rank >= 2 for the off-diagonal to exist
+ ....: C = random_clan(nontrivial=True)
+ sage: r = C.rank() - 1
+ sage: j = ZZ.random_element(r)
+ sage: xs = ( C.random_element().elt(r,j) for _ in range(10) )
+ sage: ys = ( C.random_element().elt(r,j) for _ in range(10) )
+ sage: all( x.inner_product(y).is_zero() == (x*y).is_zero()
+ ....: for x in xs
+ ....: for y in ys )
+ True
+
"""
def tr(self):