def METHOD_NAME(point, polygon):
    """
    Test if a point is inside a polygon with a winding number algorithm.
    After "Inclusion of a Point in a Polygon" by Dan Sunday,
    http://geomalgorithms.com/a03-_inclusion.html
    :param point: a 2D point or list of points
    :param polygon: a list of polygon edges
    :return: if a point is inside a polygon
    """
    polygon = np.asarray(polygon)
    point = np.asarray(point)
    x = point[..., 0]
    y = point[..., 1]
    if x.shape:  # to support multiple points
        x = x.reshape(-1, 1)
        y = y.reshape(-1, 1)
    pp = rolling_window(polygon.T, 2)
    left = is_left(pp[0][:, 0], pp[1][:, 0], pp[0][:, 1], pp[1][:, 1], x, y)
    upward_crossing = (pp[1][:, 0] <= y) * (y < pp[1][:, 1])
    downward_crossing = (pp[1][:, 0] > y) * (y >= pp[1][:, 1])
    wn = np.sum((left > 0) * (upward_crossing), axis=-1) \
         - np.sum((left < 0) * (downward_crossing), axis=-1)
    return wn != 0