def __repr__(self):
    "\n        What comes in:\n          -- self\n        What goes out: Returns a string representation of this Line,\n        in the form:\n           Line[(x1, y1), (x2, y2)]\n        Side effects: None.\n        Note:  print(BLAH)  causes BLAH's __repr__ to be called.\n               BLAH's __repr__ returns a string,\n               which the  print  function then prints.\n\n        Example:  Since the  print  function calls __repr__ on the\n        object to be printed:\n            p1 = Point(30, 17)\n            p2 = Point(50, 80)\n            line = Line(p1, p2)  # Causes __init__ to run\n\n            # The following statement causes __repr__ to run,\n            # hence should print: Line[(30, 17), (50, 80)]\n            print(line)\n\n        Type hints:\n          :rtype: str\n        "
    start = repr(self.start).replace('Point', '')
    end = repr(self.end).replace('Point', '')
    return 'Line[{}, {}]'.format(start, end)
What comes in:
  -- self
What goes out: Returns a string representation of this Line,
in the form:
   Line[(x1, y1), (x2, y2)]
Side effects: None.
Note:  print(BLAH)  causes BLAH's __repr__ to be called.
       BLAH's __repr__ returns a string,
       which the  print  function then prints.

Example:  Since the  print  function calls __repr__ on the
object to be printed:
    p1 = Point(30, 17)
    p2 = Point(50, 80)
    line = Line(p1, p2)  # Causes __init__ to run

    # The following statement causes __repr__ to run,
    # hence should print: Line[(30, 17), (50, 80)]
    print(line)

Type hints:
  :rtype: str
def __repr__(self):
    "\n        What comes in:\n          -- self\n        What goes out: Returns a string representation of this Line,\n        in the form:\n           Line[(x1, y1), (x2, y2)]\n        Side effects: None.\n        Note:  print(BLAH)  causes BLAH's __repr__ to be called.\n               BLAH's __repr__ returns a string,\n               which the  print  function then prints.\n\n        Example:  Since the  print  function calls __repr__ on the\n        object to be printed:\n            p1 = Point(30, 17)\n            p2 = Point(50, 80)\n            line = Line(p1, p2)  # Causes __init__ to run\n\n            # The following statement causes __repr__ to run,\n            # hence should print: Line[(30, 17), (50, 80)]\n            print(line)\n\n        Type hints:\n          :rtype: str\n        "
    start = repr(self.start).replace('Point', )
    end = repr(self.end).replace('Point', )
    return 'Line[{}, {}]'.format(start, end)