flipper.kernel.encoding.Encoding

class flipper.kernel.encoding.Encoding(sequence, _cache=None)[source]

Bases: object

This represents a map between two Triagulations.

If it maps to and from the same triangulation then it represents a mapping class. This can be checked using self.is_mapping_class().

The map is given by a sequence of EdgeFlips, LinearTransformations and Isometries which act from right to left.

applied_geometric(lamination)[source]

Return the action and condition matrices describing the PL map applied to the geometric coordinates of the given lamination.

bundle(veering=True, _safety=True)[source]

Return the bundle associated to this mapping class.

This method can be run in two different modes:

If veering=True then the bundle returned is triangulated by a veering, layered triangulation and has at most 6g+5n-6 additional loops drilled from it, as described by Agol. These additional cusps are marked as fake cusps and can be dealt with by filling along their fibre slope. Assumes (and checks) that this mapping class is pseudo-Anosov.

If veering=False then the bundle returned is triangulated by a layered triangulation obtained by stacking flat tetrahedra, one for each edge flip in self.

Assumes (and checks) that the resulting triangulation is an ideal triangulation of a manifold and that the fibre surface immerses into the two skeleton. If _safety=True then this should always happen.

This encoding must be a mapping class.

canonical()[source]

Return the canonical form of this mapping class.

closing_isometries()[source]

Return all the possible isometries from self.target_triangulation to self.source_triangulation.

These are the maps that can be used to close this into a mapping class.

dilatation()[source]

Return the dilatation of this mapping class.

This encoding must be a mapping class.

flat_structure()[source]

Return the flat structure associated to self.canonical().

This is based off of code supplied by Shannon Horrigan.

Assumes that this mapping class is pseudo-Anosov.

This encoding must be a mapping class.

flip_length()[source]

Return the number of flips needed to realise this sequence.

hitting_matrix()[source]

Return the hitting matrix of the underlying train track.

identify()[source]

Return a tuple of integers which uniquely determines this map.

The tuple we return is the intersection numbers of the images of the key_curves under this map. This uniquely determines the map (assuming we know source_triangulation and target_triangulation) by Alexanders trick.

invariant_lamination()[source]

Return a projectively invariant lamination of this mapping class.

This encoding must be a mapping class.

Assumes that this encoding is pseudo-Anosov.

inverse()[source]

Return the inverse of this encoding.

is_abelian()[source]

Return if this mapping class corresponds to an Abelian differential.

This is an Abelian differential (rather than a quadratic differential) if and only if its stable lamination is orientable.

Assumes (and checks) that the mapping class is pseudo-Anosov.

This encoding must be a mapping class.

is_conjugate_to(other)[source]

Return if this mapping class is conjugate to other.

It would also be straightforward to check if self^i ~~ other^j for some i, j.

Both encodings must be mapping classes.

Currently assumes that at least one mapping class is pseudo-Anosov.

is_homologous_to(other)[source]

Return if this encoding is homologous to other.

Two maps are homologous if and only if they induce the same map from H_1(source_triangulation) to H_1(target_triangulation).

is_identity()[source]

Return if this encoding is the identity map.

is_mapping_class()[source]

Return if this encoding is a mapping class.

That is, if it maps to the triangulation it came from.

is_periodic()[source]

Return if this encoding has finite order.

This encoding must be a mapping class.

is_primitive()[source]

Return if this mapping class is primitive.

This encoding must be a mapping class.

Assumes (and checks) that this mapping class is pseudo-Anosov.

is_pseudo_anosov()[source]

Return if this encoding is pseudo-Anosov.

This encoding must be a mapping class.

is_reducible()[source]

Return if this encoding is reducible and NOT periodic.

This encoding must be a mapping class.

nielsen_thurston_type()[source]

Return the Nielsen–Thurston type of this encoding.

This encoding must be a mapping class.

order()[source]

Return the order of this mapping class.

If this has infinite order then return 0.

This encoding must be a mapping class.

package()[source]

Return a small amount of info that self.source_triangulation can use to reconstruct this triangulation.

pl_action()[source]

Yield each of the action, condition matrix pairs describing the action of this Encoding on ML.

pml_fixedpoint()[source]

Return a rescaling constant and projectively invariant lamination.

Assumes that the mapping class is pseudo-Anosov.

To find this we start with a curve on the surface and repeatedly apply the map. We then use directed_eigenvector() to find the nearby projective fixed point. The work of Margalit–Strenner–Yurtas says that if we apply self too many times then self is not pseudo-Anosov.

This encoding must be a mapping class.

splitting_sequence()[source]

Return the splitting sequence associated to this mapping class.

Assumes (and checks) that the mapping class is pseudo-Anosov.

This encoding must be a mapping class.

splitting_sequences(take_roots=False)[source]

Return a list of splitting sequences associated to this mapping class.

Assumes (and checks) that the mapping class is pseudo-Anosov.

This encoding must be a mapping class.

stratum()[source]

Return a dictionary mapping each singularity to its stratum order.

This is the number of bipods incident to the vertex.

Assumes (and checks) that this mapping class is pseudo-Anosov.

This encoding must be a mapping class.

without_cache()[source]

Return this Encoding but with an empty cache.