class_docstr: Constrained delaunay triangulation
  
  Implementation based on [1]_.
  
  Parameters
  ----------
  pts : array
      Nx2 array of points.
  edges : array
      Nx2 array of edges (dtype=int).
  
  Notes
  -----
  * Delaunay legalization is not yet implemented. This produces a proper
    triangulation, but adding legalisation would produce fewer thin
    triangles.
  * The pts and edges arrays may be modified.
  
  References
  ----------
  .. [1] Domiter, V. and Žalik, B. Sweep‐line algorithm for constrained
     Delaunay triangulation
class_docstr_tok: ["Constrained","delaunay","triangulation","Implementation","based","on","[","1","]","_.","Parameters","--","--","--","--","--","pts",":","array","Nx2","array","of","points",".","edges",":","array","Nx2","array","of","edges","(","dtype=int",")",".","Notes","--","--","-","*","Delaunay","legalization","is","not","yet","implemented",".","This","produces","a","proper","triangulation",",","but","adding","legalisation","would","produce","fewer","thin","triangles",".","*","The","pts","and","edges","arrays","may","be","modified",".","References","--","--","--","--","--","..","[","1","]","Domiter",",","V.","and","\u017dalik",",","B.","Sweep\u2010line","algorithm","for","constrained","Delaunay","triangulation"]
docstr: Return the triangle that has edge[0] as one of its vertices and is
  bisected by edge.
  
  Return None if no triangle is found.
docstr_tok: ["Return","the","triangle","that","has","edge","[","0","]","as","one","of","its","vertices","and","is","bisected","by","edge",".","Return","None","if","no","triangle","is","found","."]
code: def _find_cut_triangle(self, edge):
      """
      Return the triangle that has edge[0] as one of its vertices and is
      bisected by edge.
  
      Return None if no triangle is found.
      """
      edges = []  # opposite edge for each triangle attached to edge[0]
      for tri in self.tris:
          if edge[0] in tri:
              edges.append(self._edge_opposite_point(tri, edge[0]))
  
      for oedge in edges:
          o1 = self._orientation(edge, oedge[0])
          o2 = self._orientation(edge, oedge[1])
          if o1 != o2:
              return (edge[0], oedge[0], oedge[1])
  
      return None
  
imports: from __future__ import division, print_function
  from itertools import permutations
  import numpy
  from collections import OrderedDict
label_desc: Use image node_id 7 for calling the Triangulation obj's underlying member method code with example usage: obj._find_cut_triangle(edge) and returns: None, edge,  oedge,  oedge