]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/clan: add new random_clan() function
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 10 Apr 2026 00:06:23 +0000 (20:06 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 10 Apr 2026 00:06:23 +0000 (20:06 -0400)
mjo/clan/all.py
mjo/clan/random.py [new file with mode: 0644]

index b835018ab6f92b3a4a5b750323dcde8114f8876b..373e7448b5dbe80989e8f08e86c2d0b5b6c2afac 100644 (file)
@@ -3,6 +3,7 @@ All user-facing imports from mjo.clan.
 """
 from mjo.clan.clan import Clans
 from mjo.clan.jordan_spin_clan import JordanSpinClan
+from mjo.clan.random import random_clan
 from mjo.clan.t_algebra_clan import ( ComplexHermitianClan,
                                       RealSymmetricClan )
 from mjo.clan.trivial_clan import TrivialClan
diff --git a/mjo/clan/random.py b/mjo/clan/random.py
new file mode 100644 (file)
index 0000000..246d51e
--- /dev/null
@@ -0,0 +1,38 @@
+r"""
+Random test helpers.
+"""
+
+def random_clan():
+    r"""
+    Return a random clan from a pre-determined list.
+
+    At the moment, this is guaranteed to return a normal decomposition.
+
+    SETUP::
+
+        sage: from mjo.clan.clan import Clans
+        sage: from mjo.clan.random import random_clan
+
+    EXAMPLES::
+
+        sage: random_clan() in Clans
+        True
+
+    """
+    from sage.rings.rational_field import QQ
+    from random import choice
+
+    from mjo.clan.vinberg_clan import VinbergClan
+    from mjo.clan.jordan_spin_clan import JordanSpinClan
+    from mjo.clan.t_algebra_clan import (ComplexHermitianClan,
+                                         RealSymmetricClan)
+    from mjo.clan.trivial_clan import TrivialClan
+
+    choices = { TrivialClan: [QQ],
+                VinbergClan: [QQ],
+                JordanSpinClan: tuple(range(1,10)),
+                RealSymmetricClan: tuple(range(1,7)),
+                ComplexHermitianClan: tuple(range(1,6)) }
+    key = choice(list(choices.keys()))
+    arg = choice(choices[key])
+    return key(arg)