@@ -1353,6 +1353,7 @@ def abelian_invariants(self):
1353
1353
invariants = self .gap ().AbelianInvariants ()
1354
1354
return tuple (i .sage () for i in invariants )
1355
1355
1356
+ @cached_method
1356
1357
def abelianization_map (self ):
1357
1358
r"""
1358
1359
Return the abelianization map of ``self``.
@@ -1391,6 +1392,7 @@ def abelianization_map(self):
1391
1392
images .append (ab ([int (j ) for j in L ]))
1392
1393
return self .hom (codomain = ab , im_gens = images )
1393
1394
1395
+ @cached_method
1394
1396
def abelianization_to_algebra (self , ring = QQ ):
1395
1397
r"""
1396
1398
Return the group algebra of the abelianization of ``self``
@@ -1634,7 +1636,8 @@ def alexander_matrix(self, im_gens=None):
1634
1636
return matrix (len (rel ), len (gen ),
1635
1637
lambda i , j : rel [i ].fox_derivative (gen [j ], im_gens ))
1636
1638
1637
- def abelian_alexander_matrix (self , ring = QQ , abelianized = None , simplified = True ):
1639
+ @cached_method
1640
+ def abelian_alexander_matrix (self , ring = QQ , simplified = True ):
1638
1641
"""
1639
1642
Return the Alexander matrix of the group with values in the group
1640
1643
algebra of the abelianized.
@@ -1643,8 +1646,6 @@ def abelian_alexander_matrix(self, ring=QQ, abelianized=None, simplified=True):
1643
1646
1644
1647
- ``ring`` -- (default: ``QQ``) the base ring of the
1645
1648
group algebra
1646
- - ``abelianized`` -- optional (default: ``None``); a tuple containing the output of
1647
- ``self.abelianization_to_algebra()`` to avoid recomputation
1648
1649
- ``simplified`` -- boolean (default: ``False``); if set to
1649
1650
``True`` use Gauss elimination and erase rows and columns
1650
1651
@@ -1667,9 +1668,6 @@ def abelian_alexander_matrix(self, ring=QQ, abelianized=None, simplified=True):
1667
1668
Multivariate Laurent Polynomial Ring in f1, f2, f3 over Rational Field
1668
1669
sage: ideal
1669
1670
[]
1670
- sage: abel = H.abelianization_to_algebra()
1671
- sage: (A, ideal) == H.abelian_alexander_matrix(abelianized=abel)
1672
- True
1673
1671
sage: G = FreeGroup(3)/[(2, 1, 1), (1, 2, 2, 3, 3)]
1674
1672
sage: A, ideal = G.abelian_alexander_matrix(simplified=True); A
1675
1673
[-f3^2 - f3^4 - f3^6 f3^3 + f3^6]
@@ -1680,10 +1678,7 @@ def abelian_alexander_matrix(self, ring=QQ, abelianized=None, simplified=True):
1680
1678
sage: g.abelian_alexander_matrix()
1681
1679
([], [])
1682
1680
"""
1683
- if abelianized is None :
1684
- ab , R , ideal , images = self .abelianization_to_algebra (ring = ring )
1685
- else :
1686
- ab , R , ideal , images = abelianized
1681
+ ab , R , ideal , images = self .abelianization_to_algebra (ring = ring )
1687
1682
A = self .alexander_matrix (im_gens = images )
1688
1683
if simplified :
1689
1684
n , m = A .dimensions ()
@@ -1713,7 +1708,7 @@ def abelian_alexander_matrix(self, ring=QQ, abelianized=None, simplified=True):
1713
1708
simpli = unidad
1714
1709
return A , ideal
1715
1710
1716
- def characteristic_varieties (self , ring = QQ , matrix_ideal = None , abelianized = None , groebner = False ):
1711
+ def characteristic_varieties (self , ring = QQ , matrix_ideal = None , groebner = False ):
1717
1712
r"""
1718
1713
Return the characteristic varieties of the group ``self``.
1719
1714
@@ -1731,8 +1726,6 @@ def characteristic_varieties(self, ring=QQ, matrix_ideal=None, abelianized=None,
1731
1726
INPUT:
1732
1727
1733
1728
- ``ring`` -- (default: ``QQ``) the base ring of the group algebra
1734
- - ``matrix_ideal`` -- optional; an abelian Alexander matrix and an ideal
1735
- - ``abelianized`` -- optional; the data of of the output of ``abelianization_to_algebra``
1736
1729
- ``groebner`` -- boolean (default: ``False``); If set to
1737
1730
``True`` the minimal associated primes of the ideals and their
1738
1731
groebner bases are computed; ignored if the base ring
@@ -1760,9 +1753,6 @@ def characteristic_varieties(self, ring=QQ, matrix_ideal=None, abelianized=None,
1760
1753
(f2*f3 + 1, f1 - f2),
1761
1754
(f2*f3 + 1, f1 - f3),
1762
1755
(f1*f3 + 1, f2 - f3)]]
1763
- sage: A, I = G.abelian_alexander_matrix()
1764
- sage: G.characteristic_varieties(groebner=True) == G.characteristic_varieties(groebner=True, matrix_ideal=(A, I))
1765
- True
1766
1756
sage: G = FreeGroup(2)/[2*(1,2,-1,-2)]
1767
1757
sage: G.characteristic_varieties()
1768
1758
[Ideal (-2*f2 + 2, 2*f1 - 2) of Multivariate Laurent Polynomial Ring in f1, f2 over Rational Field]
@@ -1774,10 +1764,7 @@ def characteristic_varieties(self, ring=QQ, matrix_ideal=None, abelianized=None,
1774
1764
sage: G.characteristic_varieties(groebner=True)
1775
1765
[[1 - f2 + f2^2]]
1776
1766
"""
1777
- if matrix_ideal is None :
1778
- A , ideal = self .abelian_alexander_matrix (ring = ring , abelianized = abelianized , simplified = True )
1779
- else :
1780
- A , ideal = matrix_ideal
1767
+ A , ideal = self .abelian_alexander_matrix (ring = ring , simplified = True )
1781
1768
R = A .base_ring ()
1782
1769
res = []
1783
1770
S = R .polynomial_ring ()
0 commit comments