From 8fe13b49d5a3270ef82dd0ac5abe15e94e6490f6 Mon Sep 17 00:00:00 2001 From: Joseph Edwards Date: Wed, 3 Jun 2026 19:09:33 +0100 Subject: [PATCH 1/3] etc: Add function to collect data based on alphabet order --- etc/alphabet_order.py | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 etc/alphabet_order.py diff --git a/etc/alphabet_order.py b/etc/alphabet_order.py new file mode 100644 index 00000000..1912dd6a --- /dev/null +++ b/etc/alphabet_order.py @@ -0,0 +1,46 @@ +from collections.abc import Callable +from datetime import timedelta +from itertools import permutations +from typing import Any + +from libsemigroups_pybind11 import Presentation, congruence_kind + + +def generate_alphabet_order_data( + RunnerType: type, p: Presentation, f: Callable[[Any], float], t: int | None = None +) -> tuple[list, list]: + """For each permutation of the alphabet of

, construct a runner of type + . On this runner instance, call the function both before and + after running, and record the difference between these two values. If + is not specified, the runner will be run using `run()`. Otherwise, the + runner will be run for seconds. + + Return the list of alphabets and the corresponding list of data. + """ + + alphabet = p.alphabet() + alphabets = [] + data = [] + + for new_alphabet in permutations(alphabet): + if isinstance(alphabet, list): + new_alphabet = list(new_alphabet) + else: + new_alphabet = "".join(new_alphabet) + + alphabets.append(new_alphabet) + p.alphabet(new_alphabet) + + runner = RunnerType(congruence_kind.twosided, p) + # We record an initial value so the that the time taken can be measured, + # if desired. + initial = f(runner) + if t is None: + runner.run() + else: + runner.run_for(timedelta(seconds=t)) + + final = f(runner) + data.append(final - initial) + + return alphabets, data From 8ce5701a3331d8993db56e5d17f46935a001706a Mon Sep 17 00:00:00 2001 From: Joseph Edwards Date: Fri, 5 Jun 2026 19:16:05 +0100 Subject: [PATCH 2/3] Add repeats --- etc/alphabet_order.py | 46 ------ examples/alphabet-order/M12-distribution.png | Bin 0 -> 29072 bytes examples/alphabet-order/M12.png | Bin 0 -> 21103 bytes examples/alphabet-order/M22-distribution.png | Bin 0 -> 21652 bytes examples/alphabet-order/PT5-distribution.png | Bin 0 -> 35749 bytes examples/alphabet-order/Sims-distribution.png | Bin 0 -> 32314 bytes .../todd_coxeter_alphabet_order.py | 156 ++++++++++++++++++ 7 files changed, 156 insertions(+), 46 deletions(-) delete mode 100644 etc/alphabet_order.py create mode 100644 examples/alphabet-order/M12-distribution.png create mode 100644 examples/alphabet-order/M12.png create mode 100644 examples/alphabet-order/M22-distribution.png create mode 100644 examples/alphabet-order/PT5-distribution.png create mode 100644 examples/alphabet-order/Sims-distribution.png create mode 100644 examples/alphabet-order/todd_coxeter_alphabet_order.py diff --git a/etc/alphabet_order.py b/etc/alphabet_order.py deleted file mode 100644 index 1912dd6a..00000000 --- a/etc/alphabet_order.py +++ /dev/null @@ -1,46 +0,0 @@ -from collections.abc import Callable -from datetime import timedelta -from itertools import permutations -from typing import Any - -from libsemigroups_pybind11 import Presentation, congruence_kind - - -def generate_alphabet_order_data( - RunnerType: type, p: Presentation, f: Callable[[Any], float], t: int | None = None -) -> tuple[list, list]: - """For each permutation of the alphabet of

, construct a runner of type - . On this runner instance, call the function both before and - after running, and record the difference between these two values. If - is not specified, the runner will be run using `run()`. Otherwise, the - runner will be run for seconds. - - Return the list of alphabets and the corresponding list of data. - """ - - alphabet = p.alphabet() - alphabets = [] - data = [] - - for new_alphabet in permutations(alphabet): - if isinstance(alphabet, list): - new_alphabet = list(new_alphabet) - else: - new_alphabet = "".join(new_alphabet) - - alphabets.append(new_alphabet) - p.alphabet(new_alphabet) - - runner = RunnerType(congruence_kind.twosided, p) - # We record an initial value so the that the time taken can be measured, - # if desired. - initial = f(runner) - if t is None: - runner.run() - else: - runner.run_for(timedelta(seconds=t)) - - final = f(runner) - data.append(final - initial) - - return alphabets, data diff --git a/examples/alphabet-order/M12-distribution.png b/examples/alphabet-order/M12-distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..cdaa5ffebcb5de79993305cbe227eb56591c77db GIT binary patch literal 29072 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 B?R)?L literal 0 HcmV?d00001 diff --git a/examples/alphabet-order/M12.png b/examples/alphabet-order/M12.png new file mode 100644 index 0000000000000000000000000000000000000000..e7165aaf738138b0eda7745ea56323923e2e24dd GIT binary patch literal 21103 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 literal 0 HcmV?d00001 diff --git a/examples/alphabet-order/M22-distribution.png b/examples/alphabet-order/M22-distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..52d4da70b67d070acb8ba046b6b67201efbefaf2 GIT binary patch literal 21652 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 R!opC>3hK8C{<;73e*x>N6^;M^ literal 0 HcmV?d00001 diff --git a/examples/alphabet-order/PT5-distribution.png b/examples/alphabet-order/PT5-distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..966e389271cd1616cf4c1d8196539ab363a582aa GIT binary patch literal 35749 zcmeFZXH-;M(=Lh$_C^r{D2jktKuJo51{47$Bi$ewL2{BD8&J21NH77CQ9?tLBqLcR zNR~_!8YK!eAkfgHhEuEe`t5>9o_y6I=X$lf6>EF()W6M!C#VY3isW#oh;ovAGlc1sXcIeWbfo=Z)0}W z!@|YY#>w#pzmOom__edvZf=iUB?SZ={`VdHPA*mgUku#aVU)ig-O+QUqho%6{I@4V z7H308_wwl7+c(i(@uZQz-zQjj%kKEDHC?|!pvZky|7-t|{d*3uXlC~1z3sd%Bp?Z zb;)?THRgs@;!35}W!LKA4l0_3@!2i-8ag?3-j&S;F#+OoRH^hh_3*@WW_){xo>f9|_hR+q@k;{UcZu@*lE0&;QFL_NS4KDcO2;x% z!b9eVN*kU0SK`)Ntz?di5xvZZJx8&6cdn!N^d@aLCDmOu*=SC1lwGPjKJHnwWpwTS zr?WvSj2SW;O&XR?%H8Z#v#7Nf8-=o4h2mqu7shb1R2$JwA>HOx29cYL9lxd;6ghzJ_p)ID@i6 zo9=Y4-YjEQ0iVv7K@&pV5*c}U0wK-s(I27@uXX%=C0-DZ%g)NO`xN4unmVddzgEEz zIA;EWi*CaDr`k|gno3~{n#r}92UnMR_ice34+cdYs-YU_%onDhg;olptFHNzQ@AXg zGPJqhREt(E4VSyy`AtiWo-$N^i;r0=x;V2o

p`zwE4UCHeAoqv{3sJoYmkJN)L` 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 tuple[NDArray, NDArray]: + """For each permutation of the alphabet of

, construct a ToddCoxeter. On + this instance, call the function both before and after running, and + record the difference between these two values. If is not specified, the + runner will be run using `run()`. Otherwise, the runner will be run for + seconds. + + Return the list of alphabets and the corresponding list of data. + """ + + alphabet = p.alphabet() + n = factorial(len(alphabet)) + alphabets = np.empty((n,), dtype=type(alphabet)) + data = np.empty((n, repeats), dtype=float) + + for i, new_alphabet in enumerate(permutations(alphabet)): + if isinstance(alphabet, list): + new_alphabet = list(new_alphabet) + else: + new_alphabet = "".join(new_alphabet) + + alphabets[i] = new_alphabet + p.alphabet(new_alphabet) + + print(f"alphabet: {new_alphabet}") + + for j in range(repeats): + tc = ToddCoxeter(congruence_kind.twosided, p) + # We record an initial value so the that the time taken can be measured, + # if desired. + initial = f(tc) + if t is None: + tc.run() + else: + tc.run_for(timedelta(seconds=t)) + + final = f(tc) + print(f"run {j + 1}: {final - initial}") + data[i, j] = final - initial + + return alphabets, data + + +ReportGuard(False) + +######################################################################### +# Mathieu Group 12 +######################################################################### + +p = Presentation("abAB") +p.contains_empty_word(True) +presentation.add_inverse_rules(p, "ABab") +presentation.add_rule(p, parse("a^2"), "") +presentation.add_rule(p, parse("b^3"), "") +presentation.add_rule(p, parse("(ab)^11"), "") +presentation.add_rule(p, parse("(a,b)^6"), "") +presentation.add_rule(p, parse("(ababaB)^6"), "") + +alphabets, times = generate_alphabet_order_data(p, lambda tc: perf_counter()) +times = times.mean(axis=1) + +# Plot the alphabet vs time +ax = sns.barplot(x=alphabets, y=times) +ax.set(xlabel="alphabet", ylabel="time", title="Mathieu 12") +plt.show() + +# Plot the time distribution +ax = sns.displot(x=times, kde=True) +ax.set(xlabel="time", title="Mathieu Group 12") +plt.show() + +######################################################################### +# Mathieu Group 22 +######################################################################### + +p = Presentation("abAB") +p.contains_empty_word(True) +presentation.add_inverse_rules(p, "ABab") +presentation.add_rule(p, parse("a^2"), "") +presentation.add_rule(p, parse("b^4"), "") +presentation.add_rule(p, parse("(ab)^11"), "") +presentation.add_rule(p, parse("(ab^2)^5"), "") +presentation.add_rule(p, parse("(a,bab)^3"), "") +presentation.add_rule(p, parse("(ababaB)^5"), "") + +alphabets, times = generate_alphabet_order_data(p, lambda tc: perf_counter()) +times = times.mean(axis=1) + +# Plot the time distribution +ax = sns.displot(x=times, kde=True) +ax.set(xlabel="time", title="Mathieu Group 22") +plt.show() + +######################################################################### +# Shutov's partial transformation monoid of degree 5 +######################################################################### + +p = presentation.examples.partial_transformation_monoid_Shu60(5) +alphabets, times = generate_alphabet_order_data(p, lambda tc: perf_counter()) +times = times.mean(axis=1) + +# Plot the time distribution +ax = sns.displot(x=times, kde=True) +ax.set(xlabel="time", title="Partial transformation monoid degree 5") +plt.show() + +######################################################################### +# Example 6.6 in Sims +######################################################################### + +p = Presentation("abcd") +presentation.add_rule(p, "aa", "a") +presentation.add_rule(p, "ba", "b") +presentation.add_rule(p, "ab", "b") +presentation.add_rule(p, "ca", "c") +presentation.add_rule(p, "ac", "c") +presentation.add_rule(p, "da", "d") +presentation.add_rule(p, "ad", "d") +presentation.add_rule(p, "bb", "a") +presentation.add_rule(p, "cd", "a") +presentation.add_rule(p, "ccc", "a") +presentation.add_rule(p, "bcbcbcbcbcbcbc", "a") +presentation.add_rule(p, "bcbdbcbdbcbdbcbdbcbdbcbdbcbdbcbd", "a") + +alphabets, times = generate_alphabet_order_data(p, lambda tc: perf_counter()) +times = times.mean(axis=1) + +# Plot the time distribution +ax = sns.displot(x=times, kde=True) +ax.set(xlabel="time", title="Example 6.6 in Sims") +plt.show() From 047128275f3c396d5495cf06b81e108bc8bc5342 Mon Sep 17 00:00:00 2001 From: Joseph Edwards Date: Fri, 5 Jun 2026 19:33:45 +0100 Subject: [PATCH 3/3] Disable some lints --- examples/alphabet-order/todd_coxeter_alphabet_order.py | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/alphabet-order/todd_coxeter_alphabet_order.py b/examples/alphabet-order/todd_coxeter_alphabet_order.py index 288e66c2..0b0a1d42 100644 --- a/examples/alphabet-order/todd_coxeter_alphabet_order.py +++ b/examples/alphabet-order/todd_coxeter_alphabet_order.py @@ -1,3 +1,4 @@ +# pylint: disable=redefined-outer-name, redefined-loop-name, import-error """In this file, we demonstrate the impact of changing the order of a ToddCoxeter alphabet""" from collections.abc import Callable