r"""
The category of clans over the given base ring.
+ SETUP::
+
+ sage: from mjo.clan.clan import Clans
+
EXAMPLES::
sage: Clans(QQ)
r"""
Return the i'th idempotent in this clan.
+ SETUP::
+
+ sage: from mjo.clan.clan import SnClan
+
EXAMPLES::
sage: C = SnClan(3)
r"""
Return the unit element of this clan.
+ SETUP::
+
+ sage: from mjo.clan.clan import SnClan
+
EXAMPLES::
sage: C = SnClan(4)
we know the (number of) idempotents used for the
normal decomposition.
+ SETUP::
+
+ sage: from mjo.clan.clan import HnClan
+
EXAMPLES::
sage: C = HnClan(2)
r"""
Construct an element of this clan from a Hermitian matrix.
+ SETUP::
+
+ sage: from mjo.clan.clan import HnClan, SnClan
+ sage: from mjo.hurwitz import ComplexMatrixAlgebra
+
EXAMPLES::
sage: C = SnClan(2)
::
- sage: from mjo.hurwitz import ComplexMatrixAlgebra
sage: C = HnClan(2)
sage: A = ComplexMatrixAlgebra(2, QQbar, QQ)
sage: X = A([ [ 2, 1 + 2*I],
This is a shortcut for :meth:`from_matrix`, as the clan knows
what the ambient matrix space was.
+ SETUP::
+
+ sage: from mjo.clan.clan import HnClan, SnClan
+
EXAMPLES::
sage: C = HnClan(2)
ordering of Ishi, based on the up-hat and down-hat products of
Vinberg.
+ SETUP::
+
+ sage: from mjo.clan.clan import SnClan
+
EXAMPLES:
The rank of this clan is the size of the matrices::
r"""
The string representation of this clan.
+ SETUP::
+
+ sage: from mjo.clan.clan import SnClan
+
EXAMPLES::
sage: SnClan(5)
ordering of Ishi, based on the up-hat and down-hat products of
Vinberg.
+ SETUP::
+
+ sage: from mjo.clan.clan import HnClan
+
EXAMPLES:
The rank of this clan is the size of the matrices::
r"""
The string representation of this clan.
+ SETUP::
+
+ sage: from mjo.clan.clan import HnClan
+
EXAMPLES::
sage: HnClan(1)
e[(2,2,1)] = [0,0], [0,0]
[0,0] [0,1]
+ SETUP::
+
+ sage: from mjo.clan.clan import VinbergClan
+
+ EXAMPLES:
+
Check the unit element::
sage: C = VinbergClan()
r"""
The string representation of this clan.
+ SETUP::
+
+ sage: from mjo.clan.clan import VinbergClan
+
EXAMPLES::
sage: VinbergClan()
This is effectively a guess, based on the work done by Ishi
and Koufany for the **dual** Vinberg cone.
+ SETUP::
+
+ sage: from mjo.clan.clan import VinbergClan
+
TESTS:
Evidence for the conjecture that these preserve the two trace
inner products::
sage: C = VinbergClan()
- sage: isinstance(C, Clan)
- True
sage: A = C.random_isotropy_cone_automorphism()
sage: A(C.one()) == C.one()
True
Construct an element of this clan from a pair of
symmetric matrices.
+ SETUP::
+
+ sage: from mjo.clan.clan import VinbergClan
+
EXAMPLES::
sage: C = VinbergClan()
list of five numbers and returns a clan element. It is a
trivial wrapper around :meth:`from_vector`.
+ SETUP::
+
+ sage: from mjo.clan.clan import VinbergClan
+
EXAMPLES::
sage: C = VinbergClan()
This is a shortcut for :meth:`from_matrix`, as the clan knows
what the ambient matrix space was.
+ SETUP::
+
+ sage: from mjo.clan.clan import VinbergClan
+
EXAMPLES::
sage: C = VinbergClan()