# Path: retina/screen/map/pointmap.py
# class PointMapWithDirection(object):
#     """ Interface of mapping a point from one surface to another
#         (hence the 2 parameters)
#     """
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def map(self, p1, p2, dp1, dp2):
#         """ map of point (p1, p2) from one surface to another
#             in direction (dp1, dp2) """
#         return
# 
#     @abstractmethod
#     def invmap(self, p1, p2, dp1, dp2):
#         """ inverse map of point (p1, p2) from one surface to another
#             in direction (dp1, dp2) """
#         return


import numpy as np
from .pointmap import PointMapWithDirection
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division

PI = np.pi




# Path: retina/screen/map/pointmap.py
# class PointMapWithDirection(object):
#     """ Interface of mapping a point from one surface to another
#         (hence the 2 parameters)
#     """
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def map(self, p1, p2, dp1, dp2):
#         """ map of point (p1, p2) from one surface to another
#             in direction (dp1, dp2) """
#         return
# 
#     @abstractmethod
#     def invmap(self, p1, p2, dp1, dp2):
#         """ inverse map of point (p1, p2) from one surface to another
#             in direction (dp1, dp2) """
#         return


# Path: retina/screen/map/mapimpldr.py
import numpy as np
from .pointmap import PointMapWithDirection

from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division

PI = np.pi




def solve_quadratic(a, b, c):