def __pySIVIA_ctc(X0, ctc, epsilon, color_out='k[b]', color_maybe='k[y]', draw_boxes=True, save_result=True, **kwargs): stack = deque([IntervalVector(X0)]) res_y, res_out = [], [] lf = LargestFirst(epsilon / 2.0) k = 0 while len(stack) > 0: k = k + 1 X = stack.popleft() X0 = IntervalVector(X) # X = __contract_and_extract(X, ctc, res_out, color_out) ctc.contract(X) if (draw_boxes is True and vibes_available is True): drawBoxDiff(X0, X, color_out, **kwargs) if save_result is True: res_out += X0.diff(X) if (X.is_empty()): continue if (X.max_diam() < epsilon): if draw_boxes is True: vibes.drawBox(X[0].lb(), X[0].ub(), X[1].lb(), X[1].ub(), color_maybe) if save_result is True: res_y.append(X) elif (X.is_empty() is False): (X1, X2) = lf.bisect(X) stack.append(X1) stack.append(X2) print('number of contraction %d / number of boxes %d' % (k, len(res_out) + len(res_y))) return (res_out, res_y)
def test_diff_2(self): a = IntervalVector([[-1, 1], [0, 2], [1, 5]]) b = IntervalVector(a) l = a.diff(b) self.assertEqual(len(l), 0)
def test_diff(self): a = IntervalVector([[-1, 1], [0, 2], [1, 5]]) b = IntervalVector(list(range(0, 3))).inflate(1) l = a.diff(b) self.assertEqual(len(l), 1) self.assertEqual(l[0], IntervalVector([[-1, 1], [0, 2], [3, 5]]))