passagemath-groups 10.5.6__cp311-cp311-macosx_13_0_x86_64.whl → 10.6.31rc3__cp311-cp311-macosx_13_0_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_groups-10.6.31rc3.dist-info/METADATA +113 -0
- passagemath_groups-10.6.31rc3.dist-info/RECORD +39 -0
- {passagemath_groups-10.5.6.dist-info → passagemath_groups-10.6.31rc3.dist-info}/WHEEL +2 -1
- passagemath_groups.dylibs/libgap.10.dylib +0 -0
- passagemath_groups.dylibs/libgmp.10.dylib +0 -0
- passagemath_groups.dylibs/libreadline.8.2.dylib +0 -0
- passagemath_groups.dylibs/libz.1.3.1.dylib +0 -0
- sage/all__sagemath_groups.py +2 -1
- sage/geometry/palp_normal_form.cpython-311-darwin.so +0 -0
- sage/geometry/palp_normal_form.pyx +1 -1
- sage/groups/all__sagemath_groups.py +0 -4
- sage/groups/artin.py +331 -20
- sage/groups/braid.py +110 -58
- sage/groups/cubic_braid.py +1 -9
- sage/groups/finitely_presented_named.py +1 -1
- sage/groups/free_group.py +6 -4
- sage/groups/group_exp.py +10 -7
- sage/groups/semimonomial_transformations/semimonomial_transformation.cpython-311-darwin.so +0 -0
- passagemath_groups-10.5.6.dist-info/METADATA +0 -80
- passagemath_groups-10.5.6.dist-info/RECORD +0 -42
- passagemath_groups.dylibs/libgap.9.dylib +0 -0
- sage/groups/class_function.py +0 -1459
- sage/groups/conjugacy_classes.py +0 -526
- sage/groups/misc_gps/argument_groups.py +0 -1890
- sage/groups/misc_gps/imaginary_groups.py +0 -479
- {passagemath_groups-10.5.6.dist-info → passagemath_groups-10.6.31rc3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: passagemath-groups
|
|
3
|
+
Version: 10.6.31rc3
|
|
4
|
+
Summary: passagemath: Groups and Invariant Theory
|
|
5
|
+
Author-email: The Sage Developers <sage-support@googlegroups.com>
|
|
6
|
+
Maintainer: Matthias Köppe, passagemath contributors
|
|
7
|
+
License-Expression: GPL-2.0-or-later
|
|
8
|
+
Project-URL: release notes, https://github.com/passagemath/passagemath/releases
|
|
9
|
+
Project-URL: repo (upstream), https://github.com/sagemath/sage
|
|
10
|
+
Project-URL: repo, https://github.com/passagemath/passagemath
|
|
11
|
+
Project-URL: documentation, https://passagemath.org/docs/latest
|
|
12
|
+
Project-URL: homepage (upstream), https://www.sagemath.org
|
|
13
|
+
Project-URL: discourse, https://passagemath.discourse.group
|
|
14
|
+
Project-URL: tracker (upstream), https://github.com/sagemath/sage/issues
|
|
15
|
+
Project-URL: tracker, https://github.com/passagemath/passagemath/issues
|
|
16
|
+
Classifier: Development Status :: 6 - Mature
|
|
17
|
+
Classifier: Intended Audience :: Education
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Operating System :: POSIX
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
22
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
28
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
30
|
+
Requires-Python: <3.15,>=3.10
|
|
31
|
+
Description-Content-Type: text/x-rst
|
|
32
|
+
Requires-Dist: passagemath-categories==10.6.31rc3
|
|
33
|
+
Requires-Dist: passagemath-gap==10.6.31rc3
|
|
34
|
+
Requires-Dist: passagemath-modules==10.6.31rc3
|
|
35
|
+
Provides-Extra: test
|
|
36
|
+
Requires-Dist: passagemath-repl; extra == "test"
|
|
37
|
+
Provides-Extra: coxeter3
|
|
38
|
+
Requires-Dist: passagemath-coxeter3; extra == "coxeter3"
|
|
39
|
+
Provides-Extra: gap
|
|
40
|
+
Provides-Extra: additive
|
|
41
|
+
Provides-Extra: affine
|
|
42
|
+
Provides-Extra: lie
|
|
43
|
+
Provides-Extra: matrix
|
|
44
|
+
Provides-Extra: permutation
|
|
45
|
+
Provides-Extra: presentation
|
|
46
|
+
Provides-Extra: representations
|
|
47
|
+
Requires-Dist: passagemath-combinat; extra == "representations"
|
|
48
|
+
Provides-Extra: semigroups
|
|
49
|
+
Requires-Dist: passagemath-combinat; extra == "semigroups"
|
|
50
|
+
Provides-Extra: standard
|
|
51
|
+
Requires-Dist: passagemath-groups[additive,matrix,representations,semigroups]; extra == "standard"
|
|
52
|
+
|
|
53
|
+
=====================================================================
|
|
54
|
+
passagemath: Groups and Invariant Theory
|
|
55
|
+
=====================================================================
|
|
56
|
+
|
|
57
|
+
`passagemath <https://github.com/passagemath/passagemath>`__ is open
|
|
58
|
+
source mathematical software in Python, released under the GNU General
|
|
59
|
+
Public Licence GPLv2+.
|
|
60
|
+
|
|
61
|
+
It is a fork of `SageMath <https://www.sagemath.org/>`__, which has been
|
|
62
|
+
developed 2005-2025 under the motto “Creating a Viable Open Source
|
|
63
|
+
Alternative to Magma, Maple, Mathematica, and MATLAB”.
|
|
64
|
+
|
|
65
|
+
The passagemath fork uses the motto "Creating a Free Passage Between the
|
|
66
|
+
Scientific Python Ecosystem and Mathematical Software Communities."
|
|
67
|
+
It was created in October 2024 with the following goals:
|
|
68
|
+
|
|
69
|
+
- providing modularized installation with pip,
|
|
70
|
+
- establishing first-class membership in the scientific Python
|
|
71
|
+
ecosystem,
|
|
72
|
+
- giving `clear attribution of upstream
|
|
73
|
+
projects <https://groups.google.com/g/sage-devel/c/6HO1HEtL1Fs/m/G002rPGpAAAJ>`__,
|
|
74
|
+
- providing independently usable Python interfaces to upstream
|
|
75
|
+
libraries,
|
|
76
|
+
- offering `platform portability and integration testing
|
|
77
|
+
services <https://github.com/passagemath/passagemath/issues/704>`__
|
|
78
|
+
to upstream projects,
|
|
79
|
+
- inviting collaborations with upstream projects,
|
|
80
|
+
- `building a professional, respectful, inclusive
|
|
81
|
+
community <https://groups.google.com/g/sage-devel/c/xBzaINHWwUQ>`__,
|
|
82
|
+
- `empowering Sage users to participate in the scientific Python ecosystem
|
|
83
|
+
<https://github.com/passagemath/passagemath/issues/248>`__ by publishing packages,
|
|
84
|
+
- developing a port to `Pyodide <https://pyodide.org/en/stable/>`__ for
|
|
85
|
+
serverless deployment with Javascript,
|
|
86
|
+
- developing a native Windows port.
|
|
87
|
+
|
|
88
|
+
`Full documentation <https://passagemath.org/docs/latest/html/en/index.html>`__ is
|
|
89
|
+
available online.
|
|
90
|
+
|
|
91
|
+
passagemath attempts to support and provides binary wheels suitable for
|
|
92
|
+
all major Linux distributions and recent versions of macOS.
|
|
93
|
+
|
|
94
|
+
Binary wheels for native Windows (x86_64) are are available for a subset of
|
|
95
|
+
the passagemath distributions. Use of the full functionality of passagemath
|
|
96
|
+
on Windows currently requires the use of Windows Subsystem for Linux (WSL)
|
|
97
|
+
or virtualization.
|
|
98
|
+
|
|
99
|
+
The supported Python versions in the passagemath 10.6.x series are 3.10.x-3.13.x.
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
About this pip-installable distribution package
|
|
103
|
+
-----------------------------------------------
|
|
104
|
+
|
|
105
|
+
This pip-installable package ``passagemath-groups`` a distribution of a part of the Sage Library. It provides a small subset of the modules of the Sage library ("sagelib", ``passagemath-standard``) for computations with groups.
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
What is included
|
|
109
|
+
----------------
|
|
110
|
+
|
|
111
|
+
* `Groups <https://passagemath.org/docs/latest/html/en/reference/groups/index.html>`_
|
|
112
|
+
|
|
113
|
+
* see https://github.com/passagemath/passagemath/blob/main/pkgs/sagemath-groups/MANIFEST.in
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
passagemath_groups.dylibs/libreadline.8.2.dylib,sha256=72suzcaXCcybK0QXegE7UE0RQBlgvEX4IdQPNglBzrQ,300032
|
|
2
|
+
passagemath_groups.dylibs/libz.1.3.1.dylib,sha256=9Hhgm_e9pvI1VtfNcMqL7YjAakyzlSuGRZcR-jAkNUA,128928
|
|
3
|
+
passagemath_groups.dylibs/libgap.10.dylib,sha256=MQSc4m9xKmpsJsFc0NHtvKdAudRuzEep1R2LNM6k4kM,2524976
|
|
4
|
+
passagemath_groups.dylibs/libgmp.10.dylib,sha256=fu542UCvo3ZacIgrGLQN4qezlyObM_Gyi6lasM72Ysk,510784
|
|
5
|
+
passagemath_groups-10.6.31rc3.dist-info/RECORD,,
|
|
6
|
+
passagemath_groups-10.6.31rc3.dist-info/WHEEL,sha256=RyxoEM-DdYra2rgZTpxdiJkmjbwgUQ_Obk5UCeDLiEQ,137
|
|
7
|
+
passagemath_groups-10.6.31rc3.dist-info/top_level.txt,sha256=Kmzulf9WsphADFQuqgvdy5mvTLDj_V2zkFHU2s3UXos,6
|
|
8
|
+
passagemath_groups-10.6.31rc3.dist-info/METADATA,sha256=wUlLpHzoPm_PIKLPS0jXnNzOWhh-_2HjvD92VXMscxQ,5183
|
|
9
|
+
sage/all__sagemath_groups.py,sha256=JOSY5oJmS67eaWpSs14SBcD7be6NMKH05esJQj8sNOI,525
|
|
10
|
+
sage/groups/finitely_presented.py,sha256=hLccjNjrj880fFeiLu9W7Z7Xz1HewuyJTVKNWrUsVMI,70042
|
|
11
|
+
sage/groups/fqf_orthogonal.py,sha256=8cx71JJorwsFoSPzVLBg1rI_dA9dfGeWDqA6GAuqRh8,20181
|
|
12
|
+
sage/groups/free_group.py,sha256=iMxfq5y8gA91i7XdpCmlL2N-5s2h_oYYohITmhMpVXo,29468
|
|
13
|
+
sage/groups/all__sagemath_groups.py,sha256=g4HxEDA-YDJcTYHqA5pGLBIy7gpzg-BEVb2Jn7mTJD8,1147
|
|
14
|
+
sage/groups/artin.py,sha256=CQHII1jKlBJZ_3GEyH-D22lS06prmIYcagTE7eg_RKc,41353
|
|
15
|
+
sage/groups/finitely_presented_named.py,sha256=dKB2M78fw5W7RTHCGy-VB_X9co9UbFcQQYSdBr945Rc,20597
|
|
16
|
+
sage/groups/all.py,sha256=ia6P1nJW_QxBEPMNKdT6ZE8v7J0z8qlMbX2uD3lBJU8,229
|
|
17
|
+
sage/groups/raag.py,sha256=WbkPRhwCopLc2PtJ_Zcy_QASzsHcsp84_fM1x_dUcWw,28842
|
|
18
|
+
sage/groups/cubic_braid.py,sha256=LEStrE9YiJAb5acsybhoQhth5fh-wbtn7uLjYyLoO1o,86974
|
|
19
|
+
sage/groups/group_semidirect_product.py,sha256=7XqgwRR8i-KAWQdRXE8uoNbYDG-mDTqFw2uyqhDGCwY,17910
|
|
20
|
+
sage/groups/cactus_group.py,sha256=O0FTBvGw8y3nRSR1aGPn5FdEv3jILG7QK_g_lZYdLPc,32895
|
|
21
|
+
sage/groups/braid.py,sha256=6LyEbj9KCOyR7v1HhHWYyd62XqGSHcIOQVQF_TuWCXk,140495
|
|
22
|
+
sage/groups/finitely_presented_catalog.py,sha256=Ylc_cx0Sv6eKH9J-n4xotqWK0Hc4pNrwZ3iRPe-gh1s,1251
|
|
23
|
+
sage/groups/group_exp.py,sha256=KjhnaTnqnNKvBmYZJEbUge2-RydGSkued1JFXSLzeoo,11190
|
|
24
|
+
sage/groups/kernel_subgroup.py,sha256=hZVsh5UYfq6MPxekXwlRuQyPuHq0Fk6SlNnN-5Yja6A,7706
|
|
25
|
+
sage/groups/lie_gps/catalog.py,sha256=O5ub0bmV3z8tvJEFjxhgjIz4Zff8rJksOe5VQp0py0o,363
|
|
26
|
+
sage/groups/lie_gps/all.py,sha256=-vXQHOTG46Zum7Q6k0kcJO43yJo09AIX-El8fzXA7eI,45
|
|
27
|
+
sage/groups/lie_gps/nilpotent_lie_group.py,sha256=6VEgyU0U4ERif179dC1JWBdxO1PM6ZJ4d7Rc7dLkZmY,32506
|
|
28
|
+
sage/groups/misc_gps/misc_groups.py,sha256=W2eH0XFqltL2-g7suj4vS8-klTYW4bTFmoWJ6ciR0-s,346
|
|
29
|
+
sage/groups/misc_gps/all.py,sha256=-vXQHOTG46Zum7Q6k0kcJO43yJo09AIX-El8fzXA7eI,45
|
|
30
|
+
sage/groups/misc_gps/misc_groups_catalog.py,sha256=TbpMPXGhwFpeOMlXdwdIGItBLV0XSvfN4oQRbKbMK9o,1627
|
|
31
|
+
sage/groups/abelian_gps/all.py,sha256=yQQEiBWy_vtucLyFb_q1OIqgiC_DIE9KUzNWpdGTa4A,906
|
|
32
|
+
sage/groups/semimonomial_transformations/semimonomial_transformation.cpython-311-darwin.so,sha256=FgGIWI8YCRssC-dQ_Uv_WPFRkHenjOeL1O3ls518hEQ,131976
|
|
33
|
+
sage/groups/semimonomial_transformations/semimonomial_transformation.pyx,sha256=9j9eS_uZYdCUQrTJDs4VhpO_7SeSzXdnzh0cACFNtkk,11298
|
|
34
|
+
sage/groups/semimonomial_transformations/all.py,sha256=-vXQHOTG46Zum7Q6k0kcJO43yJo09AIX-El8fzXA7eI,45
|
|
35
|
+
sage/groups/semimonomial_transformations/semimonomial_transformation_group.py,sha256=QflEYRK_oDUf8axx4kwcUR4aMOQNmE_faY1lzOdrAvQ,18312
|
|
36
|
+
sage/groups/semimonomial_transformations/semimonomial_transformation.pxd,sha256=wivg7LyXn_ZMrADRUmabPEYNitTRZCvs2htLN3E0v9g,297
|
|
37
|
+
sage/geometry/all__sagemath_groups.py,sha256=-vXQHOTG46Zum7Q6k0kcJO43yJo09AIX-El8fzXA7eI,45
|
|
38
|
+
sage/geometry/palp_normal_form.pyx,sha256=HfDpZHxffoxG2pxTrXO0ucRlEDZcrtzHBoZ0CoHm5lI,17498
|
|
39
|
+
sage/geometry/palp_normal_form.cpython-311-darwin.so,sha256=6GR7I1FSlnhEauQM7r6UOpJl8fr9WWKQRDNg1ZEyxK0,227760
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
sage/all__sagemath_groups.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# sage_setup: distribution = sagemath-groups
|
|
2
|
+
# delvewheel: patch
|
|
2
3
|
r"""
|
|
3
4
|
Top level of the distribution package sagemath-groups
|
|
4
5
|
|
|
@@ -9,8 +10,8 @@ This distribution makes the following feature available::
|
|
|
9
10
|
FeatureTestResult('sage.groups', True)
|
|
10
11
|
"""
|
|
11
12
|
|
|
12
|
-
from .all__sagemath_modules import *
|
|
13
13
|
from .all__sagemath_gap import *
|
|
14
|
+
from .all__sagemath_modules import *
|
|
14
15
|
|
|
15
16
|
try: # extra
|
|
16
17
|
from sage.all__sagemath_combinat import *
|
|
Binary file
|
|
@@ -198,7 +198,7 @@ def _palp_PM_max(Matrix_integer_dense PM, check=False):
|
|
|
198
198
|
else:
|
|
199
199
|
S[i] = i + 1
|
|
200
200
|
|
|
201
|
-
cdef int l,
|
|
201
|
+
cdef int l, cf, ccf, n_s_bar, d1, v0, vc, vj
|
|
202
202
|
cdef list l_r
|
|
203
203
|
|
|
204
204
|
# We determine the other rows of PM_max in turn by use of perms and
|
|
@@ -10,10 +10,6 @@ from sage.groups.all__sagemath_gap import *
|
|
|
10
10
|
|
|
11
11
|
from sage.misc.lazy_import import lazy_import
|
|
12
12
|
|
|
13
|
-
lazy_import('sage.groups.class_function', 'ClassFunction')
|
|
14
|
-
|
|
15
|
-
lazy_import('sage.groups.conjugacy_classes', ['ConjugacyClass', 'ConjugacyClassGAP'])
|
|
16
|
-
|
|
17
13
|
lazy_import('sage.groups.free_group', 'FreeGroup')
|
|
18
14
|
lazy_import('sage.groups.braid', 'BraidGroup')
|
|
19
15
|
lazy_import('sage.groups.cubic_braid', 'CubicBraidGroup')
|
sage/groups/artin.py
CHANGED
|
@@ -10,10 +10,17 @@ of the corresponding Coxeter group.
|
|
|
10
10
|
AUTHORS:
|
|
11
11
|
|
|
12
12
|
- Travis Scrimshaw (2018-02-05): Initial version
|
|
13
|
+
- Travis Scrimshaw (2025-01-30): Allowed general construction; implemented
|
|
14
|
+
general Burau representation
|
|
15
|
+
|
|
16
|
+
.. TODO::
|
|
17
|
+
|
|
18
|
+
Implement affine type Artin groups with their well-known embeddings into
|
|
19
|
+
the classical braid group.
|
|
13
20
|
"""
|
|
14
21
|
|
|
15
22
|
# ****************************************************************************
|
|
16
|
-
# Copyright (C) 2018 Travis Scrimshaw <tcscrims at gmail.com>
|
|
23
|
+
# Copyright (C) 2018-2025 Travis Scrimshaw <tcscrims at gmail.com>
|
|
17
24
|
#
|
|
18
25
|
# This program is free software: you can redistribute it and/or modify
|
|
19
26
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -27,6 +34,7 @@ from sage.combinat.root_system.coxeter_group import CoxeterGroup
|
|
|
27
34
|
from sage.groups.free_group import FreeGroup
|
|
28
35
|
from sage.groups.finitely_presented import FinitelyPresentedGroup, FinitelyPresentedGroupElement
|
|
29
36
|
from sage.misc.cachefunc import cached_method
|
|
37
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
30
38
|
from sage.rings.infinity import Infinity
|
|
31
39
|
from sage.structure.richcmp import richcmp, rich_to_bool
|
|
32
40
|
from sage.structure.unique_representation import UniqueRepresentation
|
|
@@ -62,7 +70,7 @@ class ArtinGroupElement(FinitelyPresentedGroupElement):
|
|
|
62
70
|
sage: b._latex_() # needs sage.rings.number_field
|
|
63
71
|
'\\sigma_{1}\\sigma_{2}\\sigma_{3}\\sigma_{1}^{-1}\\sigma_{2}\\sigma_{3}^{-1}'
|
|
64
72
|
|
|
65
|
-
sage: # needs sage.graphs
|
|
73
|
+
sage: # needs sage.combinat sage.graphs
|
|
66
74
|
sage: B = BraidGroup(4)
|
|
67
75
|
sage: b = B([1, 2, 3, -1, 2, -3])
|
|
68
76
|
sage: b._latex_()
|
|
@@ -93,7 +101,7 @@ class ArtinGroupElement(FinitelyPresentedGroupElement):
|
|
|
93
101
|
sage: b.exponent_sum()
|
|
94
102
|
0
|
|
95
103
|
|
|
96
|
-
sage: # needs sage.graphs
|
|
104
|
+
sage: # needs sage.combinat sage.graphs
|
|
97
105
|
sage: B = BraidGroup(5)
|
|
98
106
|
sage: b = B([1, 4, -3, 2])
|
|
99
107
|
sage: b.exponent_sum()
|
|
@@ -127,6 +135,8 @@ class ArtinGroupElement(FinitelyPresentedGroupElement):
|
|
|
127
135
|
[ a -a 1]
|
|
128
136
|
sage: b.coxeter_group_element().reduced_word()
|
|
129
137
|
[1, 2, 3, 2]
|
|
138
|
+
|
|
139
|
+
sage: # neeeds sage.combinat sage.rings.number_field
|
|
130
140
|
sage: A.<s1,s2,s3> = ArtinGroup(['A',3])
|
|
131
141
|
sage: c = s1 * s2 *s3
|
|
132
142
|
sage: c1 = c.coxeter_group_element(); c1
|
|
@@ -161,7 +171,157 @@ class ArtinGroupElement(FinitelyPresentedGroupElement):
|
|
|
161
171
|
W = self.parent().coxeter_group()
|
|
162
172
|
s = W.simple_reflections()
|
|
163
173
|
In = W.index_set()
|
|
164
|
-
return W.prod(s[In[abs(i)-1]] for i in self.Tietze())
|
|
174
|
+
return W.prod(s[In[abs(i) - 1]] for i in self.Tietze())
|
|
175
|
+
|
|
176
|
+
def burau_matrix(self, var='t'):
|
|
177
|
+
r"""
|
|
178
|
+
Return the Burau matrix of the Artin group element.
|
|
179
|
+
|
|
180
|
+
Following [BQ2024]_, the (generalized) Burau representation
|
|
181
|
+
of an Artin group is defined by deforming the reflection
|
|
182
|
+
representation of the corresponding Coxeter group. However,
|
|
183
|
+
we substitute `q \mapsto -t` from [BQ2024]_ to match one of
|
|
184
|
+
the unitary (reduced) Burau representations of the braid group
|
|
185
|
+
(see :meth:`sage.groups.braid.Braid.burau_matrix()` for details.)
|
|
186
|
+
|
|
187
|
+
More precisely, let `(m_{ij})_{i,j \in I}` be the
|
|
188
|
+
:meth:`Coxeter matrix<coxeter_matrix>`. Then the action is
|
|
189
|
+
given on the basis `(\alpha_1, \ldots \alpha_n)` (corresponding
|
|
190
|
+
to the reflection representation of the corresponding
|
|
191
|
+
:meth:`Coxeter group<coxeter_group>`) by
|
|
192
|
+
|
|
193
|
+
.. MATH::
|
|
194
|
+
|
|
195
|
+
\sigma_i(\alpha_j) = \alpha_j
|
|
196
|
+
- \langle \alpha_i, \alpha_j \rangle_q \alpha_i,
|
|
197
|
+
\qquad \text{ where }
|
|
198
|
+
\langle \alpha_i, \alpha_j \rangle_q := \begin{cases}
|
|
199
|
+
1 + t^2 & \text{if } i = j, \\
|
|
200
|
+
-2 t \cos(\pi/m_{ij}) & \text{if } i \neq j.
|
|
201
|
+
\end{cases}.
|
|
202
|
+
|
|
203
|
+
By convention `\cos(\pi/\infty) = 1`. Note that the inverse of the
|
|
204
|
+
generators act by `\sigma_i^{-1}(\alpha_j) = \alpha_j - q^{-2}
|
|
205
|
+
\langle \alpha_j, \alpha_i \rangle_q \alpha_i`.
|
|
206
|
+
|
|
207
|
+
INPUT:
|
|
208
|
+
|
|
209
|
+
- ``var`` -- string (default: ``'t'``); the name of the
|
|
210
|
+
variable in the entries of the matrix
|
|
211
|
+
|
|
212
|
+
OUTPUT:
|
|
213
|
+
|
|
214
|
+
The Burau matrix of the Artin group element over the Laurent
|
|
215
|
+
polynomial ring in the variable ``var``.
|
|
216
|
+
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: A.<s1,s2,s3> = ArtinGroup(['B',3])
|
|
220
|
+
sage: B1 = s1.burau_matrix()
|
|
221
|
+
sage: B2 = s2.burau_matrix()
|
|
222
|
+
sage: B3 = s3.burau_matrix()
|
|
223
|
+
sage: [B1, B2, B3]
|
|
224
|
+
[
|
|
225
|
+
[-t^2 t 0] [ 1 0 0] [ 1 0 0]
|
|
226
|
+
[ 0 1 0] [ t -t^2 a*t] [ 0 1 0]
|
|
227
|
+
[ 0 0 1], [ 0 0 1], [ 0 a*t -t^2]
|
|
228
|
+
]
|
|
229
|
+
sage: B1 * B2 * B1 == B2 * B1 * B2
|
|
230
|
+
True
|
|
231
|
+
sage: B2 * B3 * B2 * B3 == B3 * B2 * B3 * B2
|
|
232
|
+
True
|
|
233
|
+
sage: B1 * B3 == B3 * B1
|
|
234
|
+
True
|
|
235
|
+
sage: (~s1).burau_matrix() * B1 == 1
|
|
236
|
+
True
|
|
237
|
+
|
|
238
|
+
We verify the example in Theorem 4.1 of [BQ2024]_::
|
|
239
|
+
|
|
240
|
+
sage: A.<s1,s2,s3,s4> = ArtinGroup(['A', 3, 1])
|
|
241
|
+
sage: [g.burau_matrix() for g in A.gens()]
|
|
242
|
+
[
|
|
243
|
+
[-t^2 t 0 t] [ 1 0 0 0] [ 1 0 0 0]
|
|
244
|
+
[ 0 1 0 0] [ t -t^2 t 0] [ 0 1 0 0]
|
|
245
|
+
[ 0 0 1 0] [ 0 0 1 0] [ 0 t -t^2 t]
|
|
246
|
+
[ 0 0 0 1], [ 0 0 0 1], [ 0 0 0 1],
|
|
247
|
+
<BLANKLINE>
|
|
248
|
+
[ 1 0 0 0]
|
|
249
|
+
[ 0 1 0 0]
|
|
250
|
+
[ 0 0 1 0]
|
|
251
|
+
[ t 0 t -t^2]
|
|
252
|
+
]
|
|
253
|
+
sage: a = s3^2 * s4 * s3 * s2 *s1 * ~s3 * s4 * s3 * s2 * s1^-2 * s4
|
|
254
|
+
sage: b = s1^2 * ~s2 * s4 * s1 * ~s3 * s2 * ~s4 * s3 * s1 * s4 * s1 * ~s2 * s4^-2 * s3
|
|
255
|
+
sage: alpha = a * s3 * ~a
|
|
256
|
+
sage: beta = b * s2 * ~b
|
|
257
|
+
sage: elm = alpha * beta * ~alpha * ~beta
|
|
258
|
+
sage: print(elm.Tietze())
|
|
259
|
+
(3, 3, 4, 3, 2, 1, -3, 4, 3, 2, -1, -1, 4, 3, -4, 1, 1, -2, -3,
|
|
260
|
+
-4, 3, -1, -2, -3, -4, -3, -3, 1, 1, -2, 4, 1, -3, 2, -4, 3, 1,
|
|
261
|
+
4, 1, -2, -4, -4, 3, 2, -3, 4, 4, 2, -1, -4, -1, -3, 4, -2, 3,
|
|
262
|
+
-1, -4, 2, -1, -1, 3, 3, 4, 3, 2, 1, -3, 4, 3, 2, -1, -1, 4,
|
|
263
|
+
-3, -4, 1, 1, -2, -3, -4, 3, -1, -2, -3, -4, -3, -3, 1, 1, -2,
|
|
264
|
+
4, 1, -3, 2, -4, 3, 1, 4, 1, -2, -4, -4, 3, -2, -3, 4, 4, 2,
|
|
265
|
+
-1, -4, -1, -3, 4, -2, 3, -1, -4, 2, -1, -1)
|
|
266
|
+
sage: elm.burau_matrix()
|
|
267
|
+
[1 0 0 0]
|
|
268
|
+
[0 1 0 0]
|
|
269
|
+
[0 0 1 0]
|
|
270
|
+
[0 0 0 1]
|
|
271
|
+
|
|
272
|
+
Next, we show ``elm`` is not the identity by using the embedding of
|
|
273
|
+
the affine braid group `\widetilde{B}_n \to B_{n+1}`::
|
|
274
|
+
|
|
275
|
+
sage: # needs sage.libs.braiding
|
|
276
|
+
sage: B.<t1,t2,t3,t4> = BraidGroup(5)
|
|
277
|
+
sage: D = t1 * t2 * t3 * t4^2
|
|
278
|
+
sage: t0 = D * t3 * ~D
|
|
279
|
+
sage: t0*t1*t0 == t1*t0*t1
|
|
280
|
+
True
|
|
281
|
+
sage: t0*t2 == t2*t0
|
|
282
|
+
True
|
|
283
|
+
sage: t0*t3*t0 == t3*t0*t3
|
|
284
|
+
True
|
|
285
|
+
sage: T = [t0, t1, t2, t3]
|
|
286
|
+
sage: emb = B.prod(T[i-1] if i > 0 else ~T[-i-1] for i in elm.Tietze())
|
|
287
|
+
sage: emb.is_one()
|
|
288
|
+
False
|
|
289
|
+
|
|
290
|
+
Since the Burau representation does not respect the group embedding,
|
|
291
|
+
the corresponding `B_5` element's Burau matrix is not the identity
|
|
292
|
+
(Bigelow gave an example of the representation not being faithful for
|
|
293
|
+
`B_5`, but it is still open for `B_4`)::
|
|
294
|
+
|
|
295
|
+
sage: emb.burau_matrix() != 1 # needs sage.libs.braiding
|
|
296
|
+
True
|
|
297
|
+
|
|
298
|
+
We also verify the result using the elements in [BQ2024]_ Remark 4.2::
|
|
299
|
+
|
|
300
|
+
sage: ap = s3 * s1 * s2 * s1 * ~s3 * s4 * s2 * s3 * s2 * ~s3 * s1^-2 * s4
|
|
301
|
+
sage: bp = s1 * ~s4 * s1^2 * s3^-2 * ~s2 * s4 * s1 * ~s3 * s2 * ~s4 * s3 * s1 * s4 * s1 * ~s2 * s4^-2 * s3
|
|
302
|
+
sage: alpha = ap * s3 * ~ap
|
|
303
|
+
sage: beta = bp * s2 * ~bp
|
|
304
|
+
sage: elm = alpha * beta * ~alpha * ~beta # needs sage.libs.braiding
|
|
305
|
+
sage: elm.burau_matrix() # needs sage.libs.braiding
|
|
306
|
+
[1 0 0 0]
|
|
307
|
+
[0 1 0 0]
|
|
308
|
+
[0 0 1 0]
|
|
309
|
+
[0 0 0 1]
|
|
310
|
+
|
|
311
|
+
REFERENCES:
|
|
312
|
+
|
|
313
|
+
- [BQ2024]_
|
|
314
|
+
"""
|
|
315
|
+
gens, invs = self.parent()._burau_generators
|
|
316
|
+
MS = gens[0].parent()
|
|
317
|
+
ret = MS.prod(gens[i-1] if i > 0 else invs[-i-1] for i in self.Tietze())
|
|
318
|
+
|
|
319
|
+
if var == 't':
|
|
320
|
+
return ret
|
|
321
|
+
|
|
322
|
+
from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
|
|
323
|
+
poly_ring = LaurentPolynomialRing(ret.base_ring().base_ring(), var)
|
|
324
|
+
return ret.change_ring(poly_ring)
|
|
165
325
|
|
|
166
326
|
|
|
167
327
|
class FiniteTypeArtinGroupElement(ArtinGroupElement):
|
|
@@ -248,6 +408,7 @@ class FiniteTypeArtinGroupElement(ArtinGroupElement):
|
|
|
248
408
|
sage: A([1,2,1,3,2,1,3,2,3,3,2,3,1,2,3,1,2,3,1,2]).left_normal_form()
|
|
249
409
|
((s3*(s2*s3*s1)^2*s2*s1)^2, s3*s2)
|
|
250
410
|
|
|
411
|
+
sage: # needs sage.combinat
|
|
251
412
|
sage: B = BraidGroup(4)
|
|
252
413
|
sage: b = B([1, 2, 3, -1, 2, -3])
|
|
253
414
|
sage: b.left_normal_form() # needs sage.libs.braiding
|
|
@@ -434,7 +595,7 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
434
595
|
sage: A1 is A2 and A2 is A3
|
|
435
596
|
True
|
|
436
597
|
|
|
437
|
-
sage: ArtinGroup(['A',3]) is BraidGroup(4, 's1,s2,s3') # needs sage.rings.number_field
|
|
598
|
+
sage: ArtinGroup(['A',3]) is BraidGroup(4, 's1,s2,s3') # needs sage.combinat sage.rings.number_field
|
|
438
599
|
True
|
|
439
600
|
|
|
440
601
|
sage: # needs sage.graphs sage.rings.number_field
|
|
@@ -461,13 +622,13 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
461
622
|
from sage.groups.raag import RightAngledArtinGroup
|
|
462
623
|
return RightAngledArtinGroup(coxeter_data.coxeter_graph(), names)
|
|
463
624
|
if not coxeter_data.is_finite():
|
|
464
|
-
|
|
625
|
+
return super().__classcall__(cls, coxeter_data, names)
|
|
465
626
|
if coxeter_data.coxeter_type().cartan_type().type() == 'A':
|
|
466
627
|
from sage.groups.braid import BraidGroup
|
|
467
|
-
return BraidGroup(coxeter_data.rank()+1, names)
|
|
628
|
+
return BraidGroup(coxeter_data.rank() + 1, names)
|
|
468
629
|
return FiniteTypeArtinGroup(coxeter_data, names)
|
|
469
630
|
|
|
470
|
-
def __init__(self, coxeter_matrix, names):
|
|
631
|
+
def __init__(self, coxeter_matrix, names) -> None:
|
|
471
632
|
"""
|
|
472
633
|
Initialize ``self``.
|
|
473
634
|
|
|
@@ -484,18 +645,20 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
484
645
|
rels = []
|
|
485
646
|
# Generate the relations based on the Coxeter graph
|
|
486
647
|
I = coxeter_matrix.index_set()
|
|
648
|
+
gens = free_group.gens()
|
|
487
649
|
for ii, i in enumerate(I):
|
|
488
|
-
for j in I[ii + 1:]:
|
|
650
|
+
for jj, j in enumerate(I[ii + 1:], start=ii + 1):
|
|
489
651
|
m = coxeter_matrix[i, j]
|
|
490
652
|
if m == Infinity: # no relation
|
|
491
653
|
continue
|
|
492
|
-
elt = [
|
|
493
|
-
|
|
494
|
-
elt
|
|
495
|
-
|
|
654
|
+
elt = (gens[ii] * gens[jj]) ** (m // 2)
|
|
655
|
+
if m % 2 == 1:
|
|
656
|
+
elt = elt * gens[ii] * ~gens[jj]
|
|
657
|
+
elt = elt * (~gens[ii] * ~gens[jj]) ** (m // 2)
|
|
658
|
+
rels.append(elt)
|
|
496
659
|
FinitelyPresentedGroup.__init__(self, free_group, tuple(rels))
|
|
497
660
|
|
|
498
|
-
def _repr_(self):
|
|
661
|
+
def _repr_(self) -> str:
|
|
499
662
|
"""
|
|
500
663
|
Return a string representation of ``self``.
|
|
501
664
|
|
|
@@ -630,7 +793,7 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
630
793
|
return self.element_class(self, x)
|
|
631
794
|
|
|
632
795
|
@cached_method
|
|
633
|
-
def
|
|
796
|
+
def _an_element_(self):
|
|
634
797
|
"""
|
|
635
798
|
Return an element of ``self``.
|
|
636
799
|
|
|
@@ -642,7 +805,7 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
642
805
|
"""
|
|
643
806
|
return self.gen(0)
|
|
644
807
|
|
|
645
|
-
def some_elements(self):
|
|
808
|
+
def some_elements(self) -> list:
|
|
646
809
|
"""
|
|
647
810
|
Return a list of some elements of ``self``.
|
|
648
811
|
|
|
@@ -687,8 +850,8 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
687
850
|
|
|
688
851
|
EXAMPLES::
|
|
689
852
|
|
|
690
|
-
sage: A = ArtinGroup(['B',3]) # needs sage.rings.number_field
|
|
691
|
-
sage: A._standard_lift(A.coxeter_group().long_element()) # needs sage.rings.number_field
|
|
853
|
+
sage: A = ArtinGroup(['B',3]) # needs sage.combinat sage.rings.number_field
|
|
854
|
+
sage: A._standard_lift(A.coxeter_group().long_element()) # needs sage.combinat sage.rings.number_field
|
|
692
855
|
s3*(s2*s3*s1)^2*s2*s1
|
|
693
856
|
|
|
694
857
|
sage: B = BraidGroup(5)
|
|
@@ -698,6 +861,154 @@ class ArtinGroup(UniqueRepresentation, FinitelyPresentedGroup):
|
|
|
698
861
|
"""
|
|
699
862
|
return self(self._standard_lift_Tietze(w))
|
|
700
863
|
|
|
864
|
+
@lazy_attribute
|
|
865
|
+
def _burau_generators(self):
|
|
866
|
+
"""
|
|
867
|
+
The Burau matrices for the generators of ``self`` and their inverses.
|
|
868
|
+
|
|
869
|
+
EXAMPLES::
|
|
870
|
+
|
|
871
|
+
sage: A = ArtinGroup(['G',2])
|
|
872
|
+
sage: A._burau_generators
|
|
873
|
+
[[
|
|
874
|
+
[-t^2 a*t] [ 1 0]
|
|
875
|
+
[ 0 1], [ a*t -t^2]
|
|
876
|
+
],
|
|
877
|
+
[
|
|
878
|
+
[ -t^-2 a*t^-1] [ 1 0]
|
|
879
|
+
[ 0 1], [a*t^-1 -t^-2]
|
|
880
|
+
]]
|
|
881
|
+
|
|
882
|
+
sage: A = ArtinGroup(['H',3])
|
|
883
|
+
sage: A._burau_generators
|
|
884
|
+
[[
|
|
885
|
+
[-t^2 t 0] [ 1 0 0]
|
|
886
|
+
[ 0 1 0] [ t -t^2 (1/2*a + 1/2)*t]
|
|
887
|
+
[ 0 0 1], [ 0 0 1],
|
|
888
|
+
<BLANKLINE>
|
|
889
|
+
[ 1 0 0]
|
|
890
|
+
[ 0 1 0]
|
|
891
|
+
[ 0 (1/2*a + 1/2)*t -t^2]
|
|
892
|
+
],
|
|
893
|
+
[
|
|
894
|
+
[-t^-2 t^-1 0]
|
|
895
|
+
[ 0 1 0]
|
|
896
|
+
[ 0 0 1],
|
|
897
|
+
<BLANKLINE>
|
|
898
|
+
[ 1 0 0]
|
|
899
|
+
[ t^-1 -t^-2 (1/2*a + 1/2)*t^-1]
|
|
900
|
+
[ 0 0 1],
|
|
901
|
+
<BLANKLINE>
|
|
902
|
+
[ 1 0 0]
|
|
903
|
+
[ 0 1 0]
|
|
904
|
+
[ 0 (1/2*a + 1/2)*t^-1 -t^-2]
|
|
905
|
+
]]
|
|
906
|
+
|
|
907
|
+
sage: CM = matrix([[1,4,7], [4,1,10], [7,10,1]])
|
|
908
|
+
sage: A = ArtinGroup(CM)
|
|
909
|
+
sage: gens = A._burau_generators[0]; gens
|
|
910
|
+
[
|
|
911
|
+
[ -t^2 (E(8) - E(8)^3)*t (-E(7)^3 - E(7)^4)*t]
|
|
912
|
+
[ 0 1 0]
|
|
913
|
+
[ 0 0 1],
|
|
914
|
+
<BLANKLINE>
|
|
915
|
+
[ 1 0 0]
|
|
916
|
+
[ (E(8) - E(8)^3)*t -t^2 (E(20) - E(20)^9)*t]
|
|
917
|
+
[ 0 0 1],
|
|
918
|
+
<BLANKLINE>
|
|
919
|
+
[ 1 0 0]
|
|
920
|
+
[ 0 1 0]
|
|
921
|
+
[(-E(7)^3 - E(7)^4)*t (E(20) - E(20)^9)*t -t^2]
|
|
922
|
+
]
|
|
923
|
+
sage: all(gens[i] * A._burau_generators[1][i] == 1 for i in range(3))
|
|
924
|
+
True
|
|
925
|
+
sage: B1, B2, B3 = gens
|
|
926
|
+
sage: (B1 * B2)^2 == (B2 * B1)^2
|
|
927
|
+
True
|
|
928
|
+
sage: (B2 * B3)^5 == (B3 * B2)^5
|
|
929
|
+
True
|
|
930
|
+
sage: B1 * B3 * B1 * B3 * B1 * B3 * B1 == B3 * B1 * B3 * B1 * B3 * B1 * B3
|
|
931
|
+
True
|
|
932
|
+
"""
|
|
933
|
+
data = self.coxeter_type()
|
|
934
|
+
coxeter_matrix = self.coxeter_matrix()
|
|
935
|
+
n = coxeter_matrix.rank()
|
|
936
|
+
|
|
937
|
+
# Determine the base field
|
|
938
|
+
if data.is_simply_laced():
|
|
939
|
+
from sage.rings.integer_ring import ZZ
|
|
940
|
+
base_ring = ZZ
|
|
941
|
+
elif data.is_finite():
|
|
942
|
+
from sage.rings.number_field.number_field import QuadraticField
|
|
943
|
+
letter = data.cartan_type().type()
|
|
944
|
+
if letter in ['B', 'C', 'F']:
|
|
945
|
+
base_ring = QuadraticField(2)
|
|
946
|
+
elif letter == 'G':
|
|
947
|
+
base_ring = QuadraticField(3)
|
|
948
|
+
elif letter == 'H':
|
|
949
|
+
base_ring = QuadraticField(5)
|
|
950
|
+
else:
|
|
951
|
+
from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
|
|
952
|
+
base_ring = UniversalCyclotomicField()
|
|
953
|
+
else:
|
|
954
|
+
from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
|
|
955
|
+
base_ring = UniversalCyclotomicField()
|
|
956
|
+
|
|
957
|
+
# Construct the matrices
|
|
958
|
+
from sage.matrix.args import SparseEntry
|
|
959
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
960
|
+
from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
|
|
961
|
+
import sage.rings.abc
|
|
962
|
+
poly_ring = LaurentPolynomialRing(base_ring, 't')
|
|
963
|
+
q = -poly_ring.gen()
|
|
964
|
+
MS = MatrixSpace(poly_ring, n, sparse=True)
|
|
965
|
+
one = MS.one()
|
|
966
|
+
# FIXME: Hack because there is no ZZ \cup \{ \infty \}: -1 represents \infty
|
|
967
|
+
if isinstance(base_ring, sage.rings.abc.UniversalCyclotomicField):
|
|
968
|
+
E = base_ring.gen
|
|
969
|
+
|
|
970
|
+
def val(x):
|
|
971
|
+
if x == -1:
|
|
972
|
+
return 2 * q
|
|
973
|
+
elif x == 1:
|
|
974
|
+
return 1 + q**2
|
|
975
|
+
else:
|
|
976
|
+
E2x = E(2 * x)
|
|
977
|
+
return q * (E2x + ~E2x)
|
|
978
|
+
elif isinstance(base_ring, sage.rings.abc.NumberField_quadratic):
|
|
979
|
+
from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
|
|
980
|
+
E = UniversalCyclotomicField().gen
|
|
981
|
+
|
|
982
|
+
def val(x):
|
|
983
|
+
if x == -1:
|
|
984
|
+
return 2 * q
|
|
985
|
+
elif x == 1:
|
|
986
|
+
return 1 + q**2
|
|
987
|
+
else:
|
|
988
|
+
return q * base_ring((E(2 * x) + ~E(2 * x)).to_cyclotomic_field())
|
|
989
|
+
else:
|
|
990
|
+
def val(x):
|
|
991
|
+
if x == -1:
|
|
992
|
+
return 2 * q
|
|
993
|
+
elif x == 1:
|
|
994
|
+
return 1 + q**2
|
|
995
|
+
elif x == 2:
|
|
996
|
+
return 0
|
|
997
|
+
elif x == 3:
|
|
998
|
+
return q
|
|
999
|
+
else:
|
|
1000
|
+
from sage.functions.trig import cos
|
|
1001
|
+
from sage.symbolic.constants import pi
|
|
1002
|
+
return q * base_ring(2 * cos(pi / x))
|
|
1003
|
+
index_set = data.index_set()
|
|
1004
|
+
gens = [one - MS([SparseEntry(i, j, val(coxeter_matrix[index_set[i], index_set[j]]))
|
|
1005
|
+
for j in range(n)])
|
|
1006
|
+
for i in range(n)]
|
|
1007
|
+
invs = [one - q**-2 * MS([SparseEntry(i, j, val(coxeter_matrix[index_set[i], index_set[j]]))
|
|
1008
|
+
for j in range(n)])
|
|
1009
|
+
for i in range(n)]
|
|
1010
|
+
return [gens, invs]
|
|
1011
|
+
|
|
701
1012
|
Element = ArtinGroupElement
|
|
702
1013
|
|
|
703
1014
|
|
|
@@ -754,8 +1065,8 @@ class FiniteTypeArtinGroup(ArtinGroup):
|
|
|
754
1065
|
sage: A.delta() # needs sage.rings.number_field
|
|
755
1066
|
(s2*s1)^3
|
|
756
1067
|
|
|
757
|
-
sage: B = BraidGroup(5)
|
|
758
|
-
sage: B.delta()
|
|
1068
|
+
sage: B = BraidGroup(5) # needs sage.combinat
|
|
1069
|
+
sage: B.delta() # needs sage.combinat
|
|
759
1070
|
s0*s1*s2*s3*s0*s1*s2*s0*s1*s0
|
|
760
1071
|
"""
|
|
761
1072
|
return self._standard_lift(self._coxeter_group.long_element())
|