From 4e557e5a9fe8e702689f87a06906511ddafc816e Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Thu, 9 Apr 2026 20:06:23 -0400 Subject: [PATCH] mjo/clan: add new random_clan() function --- mjo/clan/all.py | 1 + mjo/clan/random.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 mjo/clan/random.py diff --git a/mjo/clan/all.py b/mjo/clan/all.py index b835018..373e744 100644 --- a/mjo/clan/all.py +++ b/mjo/clan/all.py @@ -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 index 0000000..246d51e --- /dev/null +++ b/mjo/clan/random.py @@ -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) -- 2.53.0