def test_complementary(self): a = IntervalVector(list(range(0, 1))).inflate(1) l = a.complementary() self.assertEqual(l[0], IntervalVector(1, Interval(float("-inf"), -1))) self.assertEqual(l[1], IntervalVector(1, Interval(1, float("inf"))))
def test_0_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(2.5, 9.5) intv_y = Interval(-5., -2.5) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(intv_t, Interval(2.5, 9.5)) self.assertEqual(intv_y, Interval(-3., -2.5)) self.assertEqual(x.nb_slices(), 12) self.assertEqual(x(0), Interval(-5.5, 2.25)) self.assertEqual(x(1), Interval(-4.5, 1.75)) self.assertEqual(x(2), Interval(-3.5, 1.25)) self.assertEqual(x(2.5), Interval(-3., 1.)) self.assertEqual(x(3), Interval(-3., 1.)) self.assertEqual(x(4), Interval(-2.5, 0.75)) # //CHECK(x(5), Interval(xxx)); // optimality self.assertEqual(x(6), Interval(-1., 1.)) self.assertEqual(x(7), Interval(-1.5, 2.)) self.assertEqual(x(8), Interval(-2., 3.)) self.assertEqual(x(9), Interval(-2.5, 4.)) self.assertEqual(x(10), Interval(-2.75, 4.5)) self.assertEqual(x(9.5), Interval(-2.75, 4.5)) self.assertEqual(x(11), Interval(-3., 5.))
def test_ctceval_1(self): t = Interval(0., 6.) z = Interval(-1., 1.) x = Tube(Interval(-1., 7.), 2.) v = Tube(x) v.set(Interval(-1.), 0) v.set(Interval(-1., 1.), 1) v.set(Interval(-1.), 2) v.set(Interval(1.), 3) self.assertEqual(x.nb_slices(), 4) ctc_eval = CtcEval() ctc_eval.preserve_slicing(False) ctc_eval.enable_time_propag(False) ctc_eval.contract(t, z, x, v) self.assertEqual(x.nb_slices(), 6) self.assertEqual(x.codomain(), Interval.ALL_REALS) # only gates should be affected self.assertEqual(x(-1.), Interval.ALL_REALS) self.assertEqual(x(0.), Interval(-2., 6.)) self.assertEqual(x(1.), Interval(-3., 5.)) self.assertEqual(x(3.), Interval(-4., 3.)) self.assertEqual(x(5.), Interval(-6., 1.)) self.assertEqual(x(6.), Interval(-5., 2.)) self.assertEqual(x(7.), Interval.ALL_REALS)
def test_I_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(2.5) intv_y = Interval(0.5) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(intv_t, Interval(2.5)) self.assertEqual(intv_y, Interval(0.5)) self.assertEqual(x.nb_slices(), 11) self.assertEqual(x(0), Interval(-2., 1.75)) self.assertEqual(x(1), Interval(-1., 1.25)) self.assertEqual(x(2), Interval(-0., 0.75)) self.assertEqual(x(2.5), Interval(0.5)) self.assertEqual(x(3), Interval(0.25, 1.)) self.assertApproxIntv(x(4), Interval(-0.25, 1. + 1. / 3.)) self.assertEqual(x(5), Interval(-0.75, 1.)) self.assertEqual(x(6), Interval(-1., 1.5)) self.assertEqual(x(7), Interval(-1.5, 2.5)) self.assertEqual(x(8), Interval(-2., 3.5)) self.assertEqual(x(9), Interval(-2.5, 4.5)) self.assertEqual(x(10), Interval(-3., 5.5))
def test_K_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(5.25, 8.25) intv_y = Interval(-0.5, 0.) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(intv_t, Interval(5.25, 8.25)) self.assertEqual(intv_y, Interval(-0.5, 0.)) self.assertEqual(x.nb_slices(), 12) self.assertEqual(x(0), Interval(-5.5, 3.)) self.assertEqual(x(1), Interval(-4.5, 2.5)) self.assertEqual(x(2), Interval(-3.5, 2.)) self.assertEqual(x(3), Interval(-2.5, 1.5)) self.assertEqual(x(4), Interval(-1.5, 1.)) self.assertEqual(x(5), Interval(-1., 1.25)) self.assertEqual(x(5.25), Interval(-1., 1.25)) self.assertApproxIntv(x(6), Interval(-1., 1.4 + 1. / 60.)) self.assertEqual(x(7), Interval(-1.5, 1.875)) self.assertApproxIntv(x(8), Interval(-1.625 - 1. / 3., 2.75)) self.assertEqual(x(9), Interval(-2., 3.)) self.assertEqual(x(8.25), Interval(-2., 3.)) self.assertEqual(x(10), Interval(-2.375, 3.75)) self.assertEqual(x(11), Interval(-2.875, 4.75))
def test_B_ctc_deriv_propa(self): # Test B_propa x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(0.5, 2.5) intv_y = Interval(-2.) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(x.nb_slices(), 12) self.assertEqual(intv_t, Interval(0.5, 2.5)) self.assertEqual(intv_y, Interval(-2.)) self.assertEqual(x(0), Interval(-4.5, -0.75)) self.assertEqual(x(0.5), Interval(-4., -1.)) self.assertEqual(x(1), Interval(-4., -1.)) self.assertEqual(x(1.), Interval(-3.5, -1.25)) self.assertEqual(x.slice(0.6).tdomain(), Interval(0.5, 1.)) self.assertEqual(x.slice(0.6).input_gate(), Interval(-4., -1.)) self.assertEqual(x.slice(0.6).output_gate(), Interval(-3.5, -1.25)) self.assertEqual(xdot(2), Interval(-0.5, 1.)) #self.assertEqual(x(2), Interval(-3.5,-0.5)); # todo: optimal implementation? self.assertEqual(x(2.), Interval(-2.75, -0.5)) self.assertEqual(x(3), Interval(-3., 0.)) self.assertEqual(x(2.5), Interval(-3., -0.)) self.assertEqual(x(4), Interval(-3., 0.5)) self.assertApproxIntv(x(5), Interval(-2.5, 1. + 1. / 6.)) self.assertEqual(x(6), Interval(-1.5, 1.)) self.assertEqual(x(7), Interval(-1., 1.5)) self.assertEqual(x(8), Interval(-1.5, 2.5)) self.assertEqual(x(9), Interval(-2., 3.5)) self.assertEqual(x(10), Interval(-2.5, 4.5)) self.assertEqual(x(11), Interval(-3., 5.5))
def test_ctceval_2(self): t, z = Interval(0., 6.), Interval(-1., 1.) x = Tube(Interval(-1., 7.), 2.) v = Tube(x) v.set(Interval(-1.), 0) v.set(Interval(-1., 1.), 1) v.set(Interval(-1.), 2) v.set(Interval(1.), 3) x.set(Interval(0., 1.), 2.) v.sample(2.) self.assertEqual(x.nb_slices(), 5) ctc_eval = CtcEval() ctc_eval.preserve_slicing(False) ctc_eval.enable_time_propag(False) ctc_eval.contract(t, z, x, v) self.assertEqual(x.nb_slices(), 7) self.assertEqual(x.codomain(), Interval.ALL_REALS) # only gates should be affected self.assertEqual(x(-1.), Interval.ALL_REALS) self.assertEqual(x(0.), Interval(0., 3.)) self.assertEqual(x(1.), Interval(-1., 2.)) self.assertEqual(x(2.), Interval(0., 1.)) self.assertEqual(x(3.), Interval(-1., 2.)) self.assertEqual(x(5.), Interval(-3., 1.)) self.assertEqual(x(6.), Interval(-2., 2.)) self.assertEqual(x(7.), Interval.ALL_REALS) t = Interval(1.75, 5.5) z = Interval(1.6) ctc_eval.enable_time_propag(True) ctc_eval.contract(t, z, x, v) box = IntervalVector([Interval(1.75, 5.5), Interval(1.6)]) # if(VIBES_DRAWING) fig_tube->draw_box(box, vibesParams("figure", "ctceval", "red")); ctc_eval.contract(box[0], box[1], x, v) # if(VIBES_DRAWING) fig_tube->draw_box(box, vibesParams("figure", "ctceval", "blue")); self.assertApproxIntv(x.interpol(3.4, v), Interval(0.8, 1.6)) self.assertApproxIntv(box[0], Interval(2.6, 3.4)) self.assertApproxIntv(box[1], Interval(1.6))
def test_bwd_mul(self): a = IntervalVector(2, Interval(2, 4)) b = Interval(1, 2) c = IntervalVector(2) pyibex.bwd_mul(a, b, c) pyibex.bwd_mul(b, a, c)
def test_constructor33(self): l = (Interval(1, 3), Interval(float('-inf'), 4)) c = IntervalVector(l) self.assertEqual(c[0], Interval(1, 3)) self.assertEqual(c[1], Interval(float('-inf'), 4))
def test_abs(self): a = IntervalVector(2, Interval(-2, 4)) self.assertEqual(pyibex.abs(a), IntervalVector(2, Interval(0, 4)))
def test_bwd_mul(self): a = IntervalVector(2, Interval(2, 4)) b = IntervalVector(2, Interval(-3, 4)) c = IntervalVector(2) pyibex.bwd_mul(c, a, b)
def test_ops_6(self): a = IntervalVector(2, Interval(-1, 1)) self.assertEqual(a - [1, 1], IntervalVector(2, Interval(-2, 0))) self.assertEqual([1, 1] - a, IntervalVector(2, Interval(0, 2)))
def test_ops_5(self): a = IntervalVector(2, Interval(-1, 1)) self.assertEqual(a + [1, 1], IntervalVector(2, Interval(0, 2))) self.assertEqual([1, 1] + a, IntervalVector(2, Interval(0, 2)))
def test_constructor2(self): c = IntervalVector(3, [1, 2]) self.assertEqual(c[0], Interval(1, 2))
def test_adding_continuous_data(self): dt = 1. tdomain = Interval(0., 5.) x = Tube(tdomain, dt) v = Tube(tdomain, dt) x.set(Interval(0.), 0.) # todo: allow to write x.set(0., 0.) ? ctc_deriv = CtcDeriv() cn = ContractorNetwork() cn.add(ctc_deriv, [x, v]) cn.set_name(x, "x") cn.set_name(v, "v") cn.print_dot_graph("cn_adddata") cn.contract() self.assertTrue((x.codomain() == Interval.ALL_REALS \ or x.codomain(), Interval(-99999, 99999))) # todo: remove this self.assertTrue((v.codomain() == Interval.ALL_REALS \ or x.codomain(), Interval(-99999, 99999))) # todo: remove this self.assertEqual(cn.nb_ctc_in_stack(), 0) # Adding data cn.add_data(v, 0., Interval(0.)) self.assertEqual(cn.nb_ctc_in_stack(), 0) cn.add_data(v, 0.3, Interval(0.)) self.assertEqual(cn.nb_ctc_in_stack(), 0) cn.add_data(v, 0.4, Interval(0.)) cn.add_data(v, 0.5, Interval(0.)) # cn.add_data(x, 0.5, Interval(0.5))) # should fail self.assertEqual(cn.nb_ctc_in_stack(), 0) cn.add_data(v, 0.99, Interval(0.)) self.assertEqual(cn.nb_ctc_in_stack(), 0) cn.add_data(v, 1.3, Interval(0.)) self.assertEqual(cn.nb_ctc_in_stack(), 3) cn.add_data(v, 1.5, Interval(0.)) self.assertEqual(cn.nb_ctc_in_stack(), 3) cn.add_data(v, 4.5, Interval(-3.)) # accross two slices self.assertEqual(cn.nb_ctc_in_stack(), 9) cn.add_data(v, 5.5, Interval(1.)) # after tf self.assertEqual(cn.nb_ctc_in_stack(), 10) self.assertEqual(v(0), Interval(0.)) self.assertEqual(v(1), Interval(-0.5, 0.)) self.assertEqual(v(2), Interval(-1.5, -0.5)) self.assertEqual(v(3), Interval(-2.5, -1.5)) self.assertEqual(v(4), Interval(-3., -1.))
def test_iterable(self): x = IntervalVector(list(range(10))) for b, i in zip(x, range(10)): self.assertEqual(b, Interval(i))
def test_B_ctc_deriv(self): # Test B_no_propa x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(0.5, 2.5) intv_y = Interval(-2.) self.ctc_eval_nopropa.contract(intv_t, intv_y, x, xdot) self.assertEqual(x.nb_slices(), 12) self.assertEqual(intv_t, Interval(0.5, 2.5)) self.assertEqual(intv_y, Interval(-2.)) self.assertEqual(x(0), Interval(-5.5, 3.)) self.assertEqual(x(0.5), Interval(-4., -1.)) self.assertEqual(x(1), Interval(-5.5, 3.)) self.assertEqual(x(1.), Interval(-3.5, -1.25)) self.assertEqual(x(2), Interval(-4.5, 2.5)) self.assertEqual(x(2.), Interval(-2.75, -0.5)) self.assertEqual(x(3), Interval(-3.5, 2.)) self.assertEqual(x(2.5), Interval(-3., -0.)) self.assertEqual(x(4), Interval(-3.5, 2.)) self.assertEqual(x(5), Interval(-2.5, 1.5)) self.assertEqual(x(6), Interval(-1.5, 1.)) self.assertEqual(x(7), Interval(-1., 1.5)) self.assertEqual(x(8), Interval(-1.5, 2.5)) self.assertEqual(x(9), Interval(-2., 3.5)) self.assertEqual(x(10), Interval(-2.5, 4.5)) self.assertEqual(x(11), Interval(-3., 5.5))
def test_TubeClasss(self): box1 = IntervalVector(2) box2 = IntervalVector(2) box3 = IntervalVector(2) box4 = IntervalVector(2) box1[0] = Interval(-1., 10.) box1[1] = Interval(3., 4.) box2[0] = Interval(10., 10.5) box2[1] = Interval(2., 7.) box3[0] = Interval(10.5, 12.) box3[1] = Interval(5., 6.) box4[0] = Interval(12., 14.) box4[1] = Interval(5.5) v_tdomains = [box1[0], box2[0], box3[0], box4[0]] v_codomains = [box1[1], box2[1], box3[1], box4[1]] tube_from_boxes = Tube(v_tdomains, v_codomains) self.assertEqual(tube_from_boxes.tdomain(), Interval(-1., 14.)) self.assertEqual(tube_from_boxes.codomain(), Interval(2., 7.)) self.assertEqual(tube_from_boxes.nb_slices(), 4) self.assertEqual(tube_from_boxes(0), Interval(3., 4.)) self.assertEqual(tube_from_boxes(1), Interval(2., 7.)) self.assertEqual(tube_from_boxes(2), Interval(5., 6.)) self.assertEqual(tube_from_boxes(3), Interval(5.5)) self.assertEqual( tube_from_boxes.slice(0).tdomain(), Interval(-1., 10.)) self.assertEqual( tube_from_boxes.slice(1).tdomain(), Interval(10., 10.5)) self.assertEqual( tube_from_boxes.slice(2).tdomain(), Interval(10.5, 12.)) self.assertEqual( tube_from_boxes.slice(3).tdomain(), Interval(12., 14.))
def test_D_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = 3.5 intv_y = Interval(-3.5, -0.5) self.assertEqual(x.nb_slices(), 10) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(x.nb_slices(), 11) self.assertEqual(intv_t, 3.5) self.assertEqual(intv_y, Interval(-2., -0.5)) self.assertEqual(x(0), Interval(-5.5, 1.25)) self.assertEqual(x(1), Interval(-4.5, 0.75)) self.assertEqual(x(2), Interval(-3.5, 0.25)) self.assertEqual(x(3), Interval(-2.5, -0.25)) self.assertEqual(x(3.5), Interval(-2., -0.5)) self.assertEqual(x(4), Interval(-2., 0.)) self.assertEqual(x(5), Interval(-1.5, 1.)) self.assertEqual(x(6), Interval(-1., 1.5)) self.assertEqual(x(7), Interval(-1.5, 2.5)) self.assertEqual(x(8), Interval(-2., 3.5)) self.assertEqual(x(9), Interval(-2.5, 4.5)) self.assertEqual(x(10), Interval(-3., 5.5))
def test_Slice_class(self): tubeslice = Slice(Interval(0., 1.), Interval(-1., 1.)) self.assertEqual(tubeslice.tdomain(), Interval(0., 1.)) self.assertEqual(tubeslice.codomain(), Interval(-1., 1.))
def test_G_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(6.5, 7.5) intv_y = Interval(3., 4.) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(intv_t, Interval(7.5)) self.assertEqual(intv_y, Interval(3.)) self.assertEqual(x(0), Interval(-4.5, 3.)) self.assertEqual(x(1), Interval(-3.5, 2.5)) self.assertEqual(x(2), Interval(-2.5, 2.)) self.assertEqual(x(3), Interval(-1.5, 1.5)) self.assertEqual(x(4), Interval(-0.5, 1.)) self.assertEqual(x(5), Interval(0.5, 1.5)) self.assertEqual(x(6), Interval(1.5, 2.5)) self.assertEqual(x(7), Interval(2.5, 3.)) self.assertEqual(x(7.5), Interval(3.)) self.assertEqual(x(8), Interval(2.75, 3.5)) self.assertEqual(x(9), Interval(2.25, 4.5)) self.assertEqual(x(10), Interval(1.75, 5.5))
def test_Tube_class_vector_of_boxes_n_dim_case(self): box1 = IntervalVector( [Interval(-1., 10.), Interval(3., 4.), Interval(0., 2.)]) box2 = IntervalVector( [Interval(10., 10.5), Interval(2., 7.), Interval(1., 3.)]) box3 = IntervalVector( [Interval(10.5, 12.), Interval(5., 6.), Interval(2., 4.)]) box4 = IntervalVector( [Interval(12., 14.), Interval(5.5), Interval(3., 5.)]) v_tdomains = [box1[0], box2[0], box3[0], box4[0]] v_codomains = [ box1.subvector(1, 2), box2.subvector(1, 2), box3.subvector(1, 2), box4.subvector(1, 2) ] tube_from_boxes = TubeVector(v_tdomains, v_codomains) self.assertEqual(tube_from_boxes.size(), 2) self.assertEqual(tube_from_boxes.tdomain(), Interval(-1., 14.)) self.assertEqual(tube_from_boxes.codomain()[0], Interval(2., 7.)) self.assertEqual(tube_from_boxes.codomain()[1], Interval(0., 5.)) self.assertEqual(tube_from_boxes.nb_slices(), 4) self.assertEqual(tube_from_boxes[0](0), Interval(3., 4.)) self.assertEqual(tube_from_boxes[0](1), Interval(2., 7.)) self.assertEqual(tube_from_boxes[0](2), Interval(5., 6.)) self.assertEqual(tube_from_boxes[0](3), Interval(5.5)) self.assertEqual(tube_from_boxes[0].slice(0).tdomain(), Interval(-1., 10.)) self.assertEqual(tube_from_boxes[0].slice(1).tdomain(), Interval(10., 10.5)) self.assertEqual(tube_from_boxes[0].slice(2).tdomain(), Interval(10.5, 12.)) self.assertEqual(tube_from_boxes[0].slice(3).tdomain(), Interval(12., 14.)) self.assertEqual(tube_from_boxes[1](0), Interval(0., 2.)) self.assertEqual(tube_from_boxes[1](1), Interval(1., 3.)) self.assertEqual(tube_from_boxes[1](2), Interval(2., 4.)) self.assertEqual(tube_from_boxes[1](3), Interval(3., 5.)) self.assertEqual(tube_from_boxes[1].slice(0).tdomain(), Interval(-1., 10.)) self.assertEqual(tube_from_boxes[1].slice(1).tdomain(), Interval(10., 10.5)) self.assertEqual(tube_from_boxes[1].slice(2).tdomain(), Interval(10.5, 12.)) self.assertEqual(tube_from_boxes[1].slice(3).tdomain(), Interval(12., 14.))
def test_J_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = 6.25 intv_y = Interval(0.5, 1.) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(intv_t, 6.25) self.assertEqual(intv_y, Interval(0.5, 1.)) self.assertEqual(x.nb_slices(), 11) self.assertEqual(x(0), Interval(-5.5, 3.)) self.assertEqual(x(1), Interval(-4.5, 2.5)) self.assertEqual(x(2), Interval(-3.5, 2.)) self.assertEqual(x(3), Interval(-2.5, 1.5)) self.assertEqual(x(4), Interval(-1.5, 1.)) self.assertEqual(x(5.), Interval(-0.75, 1.)) self.assertApproxIntv(x(5), Interval(-0.75, 1.4 + 1. / 60.)) self.assertEqual(x(6), Interval(0.25, 1.125)) self.assertEqual(x(7), Interval(0.125, 1.75)) self.assertEqual(x(8), Interval(0.125 - 0.5, 2.75)) self.assertEqual(x(9), Interval(0.125 - 1., 3.75)) self.assertEqual(x(10), Interval(0.125 - 1.5, 4.75))
def test_Tube_nb_slices(self): tube_a = Tube(Interval(0., 12.), 1.) self.assertEqual(tube_a.nb_slices(), 12) self.assertEqual(tube_a.tdomain(), Interval(0., 12.))
def test_N_no_propa(self): x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = Interval(5.5, 8.5) intv_y = Interval(2., 5.5) self.ctc_eval_nopropa.contract(intv_t, intv_y, x, xdot) self.assertEqual(intv_t, Interval(6.5, 8.5)) self.assertEqual(intv_y, Interval(2., 4.)) self.assertEqual(x.nb_slices(), 12) self.assertEqual(x(0), Interval(-5.5, 3.)) self.assertEqual(x(1), Interval(-4.5, 2.5)) self.assertEqual(x(2), Interval(-3.5, 2.)) self.assertEqual(x(3), Interval(-2.5, 1.5)) self.assertEqual(x(4), Interval(-1.5, 1.)) self.assertEqual(x(5), Interval(-1., 1.5)) self.assertEqual(x(6), Interval(-1.5, 2.5)) self.assertEqual(x(6.5), Interval(0., 2.)) self.assertEqual(x(7), Interval(-1.5, 2.5)) self.assertEqual(x(8), Interval(-2., 3.5)) self.assertEqual(x(9), Interval(-2.5, 4.5)) self.assertEqual(x(8.5), Interval(1., 4.)) self.assertEqual(x(10), Interval(-2.5, 4.5)) self.assertEqual(x(11), Interval(-3., 5.5))
def test_Tube_nb_slices2(self): tube_b = Tube(Interval(0., 12.), 0.5, Interval(-3., -2.)) self.assertEqual(tube_b.nb_slices(), 24) self.assertEqual(tube_b.tdomain(), Interval(0., 12.)) self.assertEqual(tube_b(3), Interval(-3., -2.)) self.assertEqual(tube_b.codomain(), Interval(-3., -2.))
def Test_CtcEval_non_zero_derivative_negative_case(self): # SECTION("Test CtcEval, non-zero derivative (negative case)") x = Tube(Interval(0., 11.), 1.) v = Tube(x) v.set(Interval(-1.5, -1.)) x.set(Interval(6., 8.), 0) ctc_eval = CtcEval ctc_deriv = CtcDeriv ctc_deriv.contract(x, v) self.assertEqual(x(0), Interval(6., 8.)) self.assertEqual(x(1), Interval(4.5, 7.)) self.assertEqual(x(2), Interval(3., 6.)) self.assertEqual(x(3), Interval(1.5, 5.)) self.assertEqual(x(4), Interval(-0., 4.)) self.assertEqual(x(5), Interval(-1.5, 3.)) self.assertEqual(x(6), Interval(-3., 2.)) self.assertEqual(x(7), Interval(-4.5, 1.)) self.assertEqual(x(8), Interval(-6., 0.)) self.assertEqual(x(9), Interval(-7.5, -1.)) self.assertEqual(x(10), Interval(-9., -2.))
def setUp(self): tube = Tube(Interval(0., 46.), 0.1, Interval(10., 11.)) self.tube = tube
def test_A__propa(self): # Test A_propa x = Tube(self.x_raw) xdot = Tube(self.xdot_raw) intv_t = 1. intv_y = Interval(-0.5, 1.) self.assertEqual(x(1.), Interval(-4.5, 2.5)) self.ctc_eval_propa.contract(intv_t, intv_y, x, xdot) self.assertEqual(x.nb_slices(), 10) self.assertEqual(intv_t, 1.) self.assertEqual(intv_y, Interval(-0.5, 1.)) self.assertEqual(x(0), Interval(-1.5, 1.5)) self.assertEqual(x(1.), intv_y) self.assertEqual(x(1), Interval(-1., 2.)) self.assertEqual(x(2), Interval(-1.5, 2.)) self.assertApproxIntv(x(3), Interval(-1.5 - 1. / 3., 1.5)) self.assertEqual(x(4), Interval(-1.5, 1.)) self.assertEqual(x(5), Interval(-1., 1.5)) self.assertEqual(x(6), Interval(-1.5, 2.5)) self.assertEqual(x(7), Interval(-2., 3.5)) self.assertEqual(x(8), Interval(-2.5, 4.5)) self.assertEqual(x(9), Interval(-3., 5.5))
def test_is_disjoint(self): a = IntervalVector(2, Interval(-2, 4)) b = IntervalVector(2, Interval(1, 3)) c = IntervalVector(2, Interval(-4, -2.5)) self.assertFalse(a.is_disjoint(b)) self.assertTrue(a.is_disjoint(c))