def test_namedtuple(self): v = Point(1, 2) tp_point = typeof(v) self.assertEqual(tp_point, types.NamedUniTuple(types.intp, 2, Point)) v = Point(1, 2.0) self.assertEqual(typeof(v), types.NamedTuple([types.intp, types.float64], Point)) w = Rect(3, 4) tp_rect = typeof(w) self.assertEqual(tp_rect, types.NamedUniTuple(types.intp, 2, Rect)) self.assertNotEqual(tp_rect, tp_point) self.assertNotEqual(tp_rect, types.UniTuple(tp_rect.dtype, tp_rect.count))
def test_ndim_not_on_array(self): FakeArray = collections.namedtuple('FakeArray', ['ndim']) fa = FakeArray(ndim=2) def impl(fa): if fa.ndim == 2: return fa.ndim else: object() # check prune works for array ndim self.assert_prune(impl, (types.Array(types.float64, 2, 'C'), ), [False], np.zeros((2, 3))) # check prune fails for something with `ndim` attr that is not array FakeArrayType = types.NamedUniTuple(types.int64, 1, FakeArray) self.assert_prune(impl, (FakeArrayType, ), [None], fa, flags=enable_pyobj_flags)
def test_namedtuples(self): ty1 = types.NamedUniTuple(types.intp, 2, Point) self.check_pickling(ty1) ty2 = types.NamedTuple((types.intp, types.float64), Point) self.check_pickling(ty2)
# Calculate the theoretical bounding box if the image was # perfectly centered on the closest reference point # Clip the bounding box to the extents of the image left = viewed_img_center_x - half_canvas_width right = viewed_img_center_x + half_canvas_width return left, right @jit(float64(float64, float64, float64), nopython=True, cache=True, nogil=True) def clip(v, n, x): return max(min(v, x), n) @jit(nb_types.NamedUniTuple(float64, 4, Box)(nb_types.NamedUniTuple(float64, 4, Box), nb_types.Array(float64, 1, 'C'), nb_types.Array(float64, 1, 'C'), nb_types.UniTuple(int64, 2), float64, float64), nopython=True, cache=True, nogil=True) def calc_view_extents(image_extents_box: Box, canvas_point, image_point, canvas_size, dx, dy) -> Box: left, right = _calc_extent_component(canvas_point[0], image_point[0], canvas_size[0], dx) left = clip(left, image_extents_box.left, image_extents_box.right) right = clip(right, image_extents_box.left, image_extents_box.right) bot, top = _calc_extent_component(canvas_point[1], image_point[1], canvas_size[1], dy) bot = clip(bot, image_extents_box.bottom, image_extents_box.top)
dx = abs((image_point[1, 0] - image_point[0, 0]) / (canvas_size[0] * (canvas_point[1, 0] - canvas_point[0, 0]) / 2.)) dy = abs((image_point[1, 1] - image_point[0, 1]) / (canvas_size[1] * (canvas_point[1, 1] - canvas_point[0, 1]) / 2.)) return dx, dy @jit(nopython=True) def clip(v, n, x): return max(min(v, x), n) @jit(nb_types.NamedUniTuple(float64, 4, box)( nb_types.NamedUniTuple(float64, 4, box), nb_types.Array(float64, 1, 'C'), nb_types.Array(float64, 1, 'C'), nb_types.UniTuple(int64, 2), float64, float64 ), nopython=True) def calc_view_extents(image_extents_box, canvas_point, image_point, canvas_size, dx, dy): l, r = _calc_extent_component(canvas_point[0], image_point[0], canvas_size[0], dx) l = clip(l, image_extents_box.l, image_extents_box.r) r = clip(r, image_extents_box.l, image_extents_box.r) b, t = _calc_extent_component(canvas_point[1], image_point[1], canvas_size[1], dy) b = clip(b, image_extents_box.b, image_extents_box.t) t = clip(t, image_extents_box.b, image_extents_box.t) if (r - l) < CANVAS_EXTENTS_EPSILON or (t - b) < CANVAS_EXTENTS_EPSILON: # they are viewing essentially nothing or the image isn't in view