curver.kernel.curve module

A module for representing (multi)curves on triangulations.

class curver.kernel.curve.Curve(triangulation, geometric)[source]

Bases: curver.kernel.curve.MultiCurve

A MultiCurve with a single component.

components()[source]

Return a dictionary mapping components to their multiplicities.

crush()[source]

Return the crush map associated to this Curve.

encode_twist(power=1)[source]

Return an Encoding of a right Dehn twist about this curve, raised to the given power.

is_isolating()[source]

Return if this curve is isolating, that is, if it is non-peripheral and a component of S - self does not contain a puncture.

is_minimal()[source]

Return whether this curve is minimal.

A curve is minimal if its weight is as small as possible.

Note that minimal ==> short.

is_short()[source]

Return whether this lamination is short.

A lamination is short if all of its non-peripheral components are parallel to edges of the triangulation that it is defined on. This makes computing its components very easy.

minimise(**kwargs)[source]

Return an encoding which maps this curve to a minimal one.

parallel()[source]

Return an edge that this curve is parallel to.

Note that this is only defined for short, non-peripheral curves.

relative_twisting(b, c)[source]

Return the relative twisting number of b about self relative to c.

This is the number of (right) Dehn twists about self that must be applied to b in order to minimise its intersection with c.

Assumes that this curve and the given laminations intersect. This curve must be non-peripheral.

slope(lamination)[source]

Return the slope of the given lamination about this curve.

This is a Fraction that increases by one each time a right Dehn twist about this curve is performed unless -1 <= slope <= 1.

Assumes that this curve and the given lamination intersect. This curve must be non-peripheral.

class curver.kernel.curve.MultiCurve(triangulation, geometric)[source]

Bases: curver.kernel.lamination.Lamination

A Lamination in which every component is a Curve.

boundary()[source]

Return the boundary of a regular neighbourhood of this lamination.

boundary_union(other)[source]

Return partial N(self cup other).

crush()[source]

Return the crush map associated to this MultiCurve.

encode_twist(power=1)[source]

Return an Encoding of a right Dehn (multi)twist about the components of this multicurve, raised to the given power.

fills_with(other)[source]

Return whether self cup other fills.

is_filling()[source]

Return if this Lamination fills the surface, that is, if it intersects all curves on the surface.

Note that this is equivalent to:
  • it meets every non S_{0,3} component of the surface, and
  • its boundary is peripheral.

Furthermore, if any component of this lamination is a non-peripheral curve then it cannot fill.

is_multiarc()[source]

Return if this lamination is actually a multiarc.

is_multicurve()[source]

Return if this lamination is actually a multicurve.

is_separating()[source]

Return whether this multicurve separates S.

That is, whether S - self has more components than S.

topological_type()[source]

Return the topological type of this multicurve.

Two multicurves are in the same mapping class group orbit if and only their topological types are equal. These are labelled graphs and so equal means ‘label isomorphic’, so we return a CurvePartitionGraph class that uses networkx.is_isomorphic to determine equality.

vertex_cycle()[source]

Return a vertex cycle of this multicurve.

vertex_cycles()[source]

Yield the vertex cycles of this multicurve.

These are the curves that use the same normal arcs as this multicurve but only pass through each edge at most twice. Be careful as there are often a lot of them.