Free monoid generated by prime knots available via the¶
KnotInfoBase class.
A generator of this free abelian monoid is a prime knot according to
the list at KnotInfo. A fully
amphicheiral prime knot is represented by exactly one generator with
the corresponding name. For non-chiral prime knots, there are
additionally one or three generators with the suffixes m, r
and c which specify the mirror and reverse images according to
their symmetry type.
AUTHORS:
Sebastian Oehms June 2024: initial version
- class sage.knots.free_knotinfo_monoid.FreeKnotInfoMonoid(max_crossing_number, category=None, prefix=None, **kwds)[source]¶
Bases:
IndexedFreeAbelianMonoidInitialize
selfwith generators belonging to prime knots with at mostmax_crossing_numbercrossings.- Element[source]¶
alias of
FreeKnotInfoMonoidElement
- from_knot(knot, unique=True)[source]¶
Create an element of this abelian monoid from
knot.INPUT:
knot– an instance ofKnotunique– boolean (default isTrue). This only affects the case where a unique identification is not possible. If set toFalseyou can obtain a matching list (see explanation of the output below)
OUTPUT:
An instance of the element class of
selfper default. If the keyword argumentuniquethen a list of such instances is returned.EXAMPLES:
sage: from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid sage: FKIM = FreeKnotInfoMonoid() sage: K = KnotInfo.K5_1.link().mirror_image() sage: FKIM.from_knot(K) KnotInfo['K5_1m'] sage: # optional - database_knotinfo sage: K = Knot(KnotInfo.K9_12.braid()) sage: FKIM.from_knot(K) # long time Traceback (most recent call last): ... NotImplementedError: this (possibly non prime) knot cannot be identified uniquely by KnotInfo use keyword argument `unique` to obtain more details sage: FKIM.from_knot(K, unique=False) # long time [KnotInfo['K4_1']*KnotInfo['K5_2'], KnotInfo['K9_12']]
>>> from sage.all import * >>> from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid >>> FKIM = FreeKnotInfoMonoid() >>> K = KnotInfo.K5_1.link().mirror_image() >>> FKIM.from_knot(K) KnotInfo['K5_1m'] >>> # optional - database_knotinfo >>> K = Knot(KnotInfo.K9_12.braid()) >>> FKIM.from_knot(K) # long time Traceback (most recent call last): ... NotImplementedError: this (possibly non prime) knot cannot be identified uniquely by KnotInfo use keyword argument `unique` to obtain more details >>> FKIM.from_knot(K, unique=False) # long time [KnotInfo['K4_1']*KnotInfo['K5_2'], KnotInfo['K9_12']]
- inject_variables(select=None, verbose=True)[source]¶
Inject
selfwith its name into the namespace of the Python code from which this function is called.INPUT:
select– instance ofKnotInfoBase,KnotInfoSeriesor an integer. In all cases the input is used to restrict the injected generators to the according subset (number of crossings in the case of integer)verbose– boolean (optional, defaultTrue) to suppress the message printed on the invocation
EXAMPLES:
sage: from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid sage: FKIM = FreeKnotInfoMonoid(5) sage: FKIM.inject_variables(select=3) Defining K3_1 Defining K3_1m sage: FKIM.inject_variables(select=KnotInfo.K5_2) Defining K5_2 Defining K5_2m sage: FKIM.inject_variables(select=KnotInfo.K5_2.series()) Defining K5_1 Defining K5_1m sage: FKIM.inject_variables() Defining K0_1 Defining K4_1
>>> from sage.all import * >>> from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid >>> FKIM = FreeKnotInfoMonoid(Integer(5)) >>> FKIM.inject_variables(select=Integer(3)) Defining K3_1 Defining K3_1m >>> FKIM.inject_variables(select=KnotInfo.K5_2) Defining K5_2 Defining K5_2m >>> FKIM.inject_variables(select=KnotInfo.K5_2.series()) Defining K5_1 Defining K5_1m >>> FKIM.inject_variables() Defining K0_1 Defining K4_1
- class sage.knots.free_knotinfo_monoid.FreeKnotInfoMonoidElement(F, x)[source]¶
Bases:
IndexedFreeAbelianMonoidElementAn element of an indexed free abelian monoid.
- as_knot()[source]¶
Return the knot represented by
self.EXAMPLES:
sage: from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid sage: FKIM = FreeKnotInfoMonoid() sage: FKIM.inject_variables(select=3) Defining K3_1 Defining K3_1m sage: K = K3_1^2 * K3_1m sage: K.as_knot() Knot represented by 9 crossings
>>> from sage.all import * >>> from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid >>> FKIM = FreeKnotInfoMonoid() >>> FKIM.inject_variables(select=Integer(3)) Defining K3_1 Defining K3_1m >>> K = K3_1**Integer(2) * K3_1m >>> K.as_knot() Knot represented by 9 crossings
- to_knotinfo()[source]¶
Return a word representing
selfas a list of pairs.Each pair
(ki, sym)consists of aKnotInfoBaseinstancekiandSymmetryMutantinstancesym.EXAMPLES:
sage: from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid sage: FKIM = FreeKnotInfoMonoid() sage: FKIM.inject_variables(select=3) Defining K3_1 Defining K3_1m sage: K = K3_1^2 * K3_1m sage: K.to_knotinfo() [(<KnotInfo.K3_1: '3_1'>, <SymmetryMutant.itself: 's'>), (<KnotInfo.K3_1: '3_1'>, <SymmetryMutant.itself: 's'>), (<KnotInfo.K3_1: '3_1'>, <SymmetryMutant.mirror_image: 'm'>)]
>>> from sage.all import * >>> from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid >>> FKIM = FreeKnotInfoMonoid() >>> FKIM.inject_variables(select=Integer(3)) Defining K3_1 Defining K3_1m >>> K = K3_1**Integer(2) * K3_1m >>> K.to_knotinfo() [(<KnotInfo.K3_1: '3_1'>, <SymmetryMutant.itself: 's'>), (<KnotInfo.K3_1: '3_1'>, <SymmetryMutant.itself: 's'>), (<KnotInfo.K3_1: '3_1'>, <SymmetryMutant.mirror_image: 'm'>)]