parameters: (self, p1, p2)
docstring: Return a PoincareDiskLine through the two given points.
  
          If the two points are collinear with the center of the underlying
          Poincare disk model, return a Line or a VerticalLine, as appropriate.
docstring_summary: Return a PoincareDiskLine through the two given points.
docstring_tokens: Return a PoincareDiskLine through the two given points .
function: def line_through(self, p1, p2):
          """Return a PoincareDiskLine through the two given points.
  
          If the two points are collinear with the center of the underlying
          Poincare disk model, return a Line or a VerticalLine, as appropriate.
          """
          if orientation(p1, p2, self.center) == 'collinear':
              return Line.through(p1, p2)
          else:
              circle = circle_through_points_perpendicular_to_circle(
                  p1, p2, self)
              return PoincareDiskLine(circle.center, circle.radius)
function_tokens: def line_through ( self , p1 , p2 ) : if orientation ( p1 , p2 , self . center ) == 'collinear' : return Line . through ( p1 , p2 ) else : circle = circle_through_points_perpendicular_to_circle ( p1 , p2 , self ) return PoincareDiskLine ( circle . center , circle . radius )