bigger.triangulation.Triangulation

class bigger.triangulation.Triangulation(edges: Callable[[], Iterable[Edge]], link: Callable[[bigger.triangulation.Side[~Edge][Edge]], Tuple[bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge]]])[source]

Bases: typing.Generic

A triangulation of a (possibly infinite type) surface.

The triangulation is specified via two functions:

  • edges: which returns an iterable over the edges of the triangulation, and
  • link: which maps an oriented edge to its link, i.e., link(e) = (a, b, c, d)

#<—a—-# | ^^ | / | b e d | / | V/ | #—-c—>#

as_lamination() → bigger.lamination.Lamination[~Edge][Edge][source]

Return this Triangulation as a Lamination on self.

corner(side: bigger.triangulation.Side[~Edge][Edge]) → Tuple[bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge]][source]

Return the triangle starting at this side.

disjoint_sum(laminations: dict[bigger.Lamination[Edge], int]) → bigger.Lamination[Edge][source]

Return the lamination made from summing the given laminations.

draw(edges: list[Edge], **options) → Image[source]

Return a PIL image of this Triangulation around the given edges.

edge_arc(edge: Edge) → bigger.lamination.Lamination[~Edge][Edge][source]

Return the given edge as a Lamination.

empty_lamination() → bigger.lamination.Lamination[~Edge][Edge][source]

Return the zero Lamination on this triangulation.

encode(sequence: list[Union[Callable[[Side[Edge]], bool], Container[Side[Edge]], tuple[Callable[[Side[Edge]], Side[Edge]], Callable[[Side[Edge]], Side[Edge]]], tuple[int, Callable[[Edge], Edge], Callable[[Edge], Edge]], dict[Side[Edge], Side[Edge]], Side[Edge]]]) → bigger.Encoding[Edge][source]

Return an Encoding from a small sequence of data.

There are several conventions that allow these to be specified by a smaller amount of information:

  • A container or callable is used to flip those edges.
  • A dict or pair of callables is used to encode an isomety.
  • Otherwise, it is assumed to be the label of an edge to flip.

The sequence is read in reverse in order to respect composition.

flip(is_flipped: Callable[[Side[Edge]], bool] | Container[Side[Edge]]) → bigger.Encoding[Edge][source]

Return an Encoding consisting of a single Move which flips all edges where is_flipped is True.

Alternatively, this can be given a container of Sides and will use membership of this container to test which edges flip. Note that if is_flipped is True for edge then it must be False for all edges in its link and ~edge.

classmethod from_pos(edges: Callable[[], Iterable[Edge]], ulink: Callable[[Edge], tuple[Edge, bool, Edge, bool, Edge, bool, Edge, bool]]) → Triangulation[Edge][source]

Return a triangulation from a link function defined on only the positive edges.

identity() → bigger.encoding.Encoding[~Edge][Edge][source]

Return an Encoding which represents the identity mapping class.

is_finite() → bool[source]

Return whether this triangulation only has finitely many edges.

is_flippable(side: bigger.triangulation.Side[~Edge][Edge]) → bool[source]

Return whether the given side is flippable.

isometry(target: bigger.triangulation.Triangulation[~Edge][Edge], isom: Callable[[Edge], Edge], inv_isom: Callable[[Edge], Edge]) → bigger.encoding.Encoding[~Edge][Edge][source]

Return an Encoding which maps edges under the specified relabelling.

left(side: bigger.triangulation.Side[~Edge][Edge]) → bigger.triangulation.Side[~Edge][Edge][source]

Return the side to the left of the given one in its triangle.

relabel(isom: Callable[[bigger.triangulation.Side[~Edge][Edge]], bigger.triangulation.Side[~Edge][Edge]], inv_isom: Callable[[bigger.triangulation.Side[~Edge][Edge]], bigger.triangulation.Side[~Edge][Edge]]) → bigger.encoding.Encoding[~Edge][Edge][source]

Return an Encoding which maps edges under the specified relabelling.

relabel_from_dict(isom_dict: Mapping[bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge]]) → bigger.encoding.Encoding[~Edge][Edge][source]

Return an Encoding which relabels Edges in isom_dict an leaves all other edges unchanged.

right(side: bigger.triangulation.Side[~Edge][Edge]) → bigger.triangulation.Side[~Edge][Edge][source]

Return the side to the right of the given one in its triangle.

side_arc(side: bigger.triangulation.Side[~Edge][Edge]) → bigger.lamination.Lamination[~Edge][Edge][source]

Return the given side as a Lamination.

side_curve(side: bigger.triangulation.Side[~Edge][Edge]) → bigger.lamination.Lamination[~Edge][Edge][source]

Return the curve partial N(side).

star(side: bigger.triangulation.Side[~Edge][Edge]) → Tuple[bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge]][source]

Return the link of an Side together with the Side itself.

tetra(side: bigger.triangulation.Side[~Edge][Edge]) → Tuple[bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge]][source]

Return the link of an Side together with the Side itself and its inverse.

triangle(side: bigger.triangulation.Side[~Edge][Edge]) → Tuple[bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge], bigger.triangulation.Side[~Edge][Edge]][source]

Return the triangle containing this side.

walk_vertex(side: bigger.triangulation.Side[~Edge][Edge]) → Iterable[bigger.triangulation.Side[~Edge][Edge]][source]

Walk about the vertex at the tail of the given side until you get back to the same edge.