codac4matlab 2.0.0.dev20__cp311-cp311-win32.whl → 2.0.0.dev25__cp311-cp311-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. codac4matlab/_core.cp311-win32.pyd +0 -0
  2. codac4matlab/_graphics.cp311-win32.pyd +0 -0
  3. codac4matlab/_unsupported.cp311-win32.pyd +0 -0
  4. codac4matlab/core/__init__.py +39 -14
  5. codac4matlab/tests/test_AnalyticTraj.py +3 -4
  6. codac4matlab/tests/test_BoolInterval.py +57 -1
  7. codac4matlab/tests/test_ConvexPolygon.py +111 -18
  8. codac4matlab/tests/test_CtcCtcBoundary.py +1 -1
  9. codac4matlab/tests/test_CtcDeriv.py +434 -0
  10. codac4matlab/tests/test_CtcEval.py +214 -0
  11. codac4matlab/tests/test_CtcInverse.py +13 -4
  12. codac4matlab/tests/test_CtcPolygon.py +1 -1
  13. codac4matlab/tests/test_GaussJordan.py +34 -0
  14. codac4matlab/tests/test_IntFullPivLU.py +27 -0
  15. codac4matlab/tests/test_Interval.py +30 -6
  16. codac4matlab/tests/test_Interval_operations.py +6 -6
  17. codac4matlab/tests/test_OctaSym.py +9 -0
  18. codac4matlab/tests/test_Parallelepiped.py +35 -0
  19. codac4matlab/tests/test_Parallelepiped_eval.py +62 -0
  20. codac4matlab/tests/test_Polygon.py +14 -2
  21. codac4matlab/tests/test_SampledTraj.py +14 -1
  22. codac4matlab/tests/test_Segment.py +17 -2
  23. codac4matlab/tests/test_SepCtcBoundary.py +1 -1
  24. codac4matlab/tests/test_SepPolygon.py +1 -1
  25. codac4matlab/tests/test_SepTransform.py +5 -5
  26. codac4matlab/tests/test_Slice.py +78 -0
  27. codac4matlab/tests/test_Slice_polygon.py +208 -0
  28. codac4matlab/tests/test_SlicedTube.py +263 -5
  29. codac4matlab/tests/test_cart_prod.py +1 -0
  30. codac4matlab/tests/test_peibos.py +83 -0
  31. codac4matlab/tests/test_predefined_tubes.py +6 -6
  32. codac4matlab/tests/test_trunc.py +95 -0
  33. {codac4matlab-2.0.0.dev20.dist-info → codac4matlab-2.0.0.dev25.dist-info}/METADATA +1 -1
  34. {codac4matlab-2.0.0.dev20.dist-info → codac4matlab-2.0.0.dev25.dist-info}/RECORD +36 -27
  35. {codac4matlab-2.0.0.dev20.dist-info → codac4matlab-2.0.0.dev25.dist-info}/WHEEL +1 -1
  36. {codac4matlab-2.0.0.dev20.dist-info → codac4matlab-2.0.0.dev25.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,434 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+
13
+ class TestCtcDeriv(unittest.TestCase):
14
+
15
+ def test_CtcDeriv(self):
16
+
17
+ # Test slice, envelope contraction
18
+
19
+ tdomain = create_tdomain([-1,3])
20
+ x = SlicedTube(tdomain, Interval(-10,20))
21
+ v = SlicedTube(tdomain, Interval(-1,1))
22
+
23
+ sx = x.first_slice()
24
+ sv = v.first_slice()
25
+
26
+ self.assertTrue(sx.t0_tf() == Interval(-1,3))
27
+ self.assertTrue(sx.codomain() == Interval(-10,20))
28
+ x.set([-1,2],-1)
29
+ x.set([-2,0],3)
30
+
31
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
32
+ ctc_deriv.contract(sx, sv)
33
+
34
+ self.assertTrue(sx.input_gate() == Interval(-1,2))
35
+ self.assertTrue(sx.output_gate() == Interval(-2,0))
36
+ self.assertTrue(sx.codomain() == Interval(-3.5,3))
37
+
38
+ # Test slice, output gate contraction
39
+
40
+ tdomain = create_tdomain([-1,3])
41
+ x = SlicedTube(tdomain, Interval(-5,3))
42
+ v = SlicedTube(tdomain, Interval(-1))
43
+
44
+ sx = x.first_slice()
45
+ sv = v.first_slice()
46
+
47
+ self.assertTrue(sx.t0_tf() == Interval(-1,3))
48
+ self.assertTrue(sx.codomain() == Interval(-5,3))
49
+ x.set([-1,3],-1)
50
+ x.set([-5,0.5],3)
51
+
52
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
53
+ ctc_deriv.contract(sx, sv)
54
+
55
+ self.assertTrue(sx.input_gate() == Interval(-1,3))
56
+ self.assertTrue(sx.output_gate() == Interval(-5,-1))
57
+ self.assertTrue(sx.codomain() == Interval(-5,3))
58
+
59
+ # Test slice, complete contraction (degenerate tube)
60
+
61
+ tdomain = create_tdomain([-1,3])
62
+ x = SlicedTube(tdomain, Interval(-5,3))
63
+ v = SlicedTube(tdomain, Interval(-1,1))
64
+
65
+ sx = x.first_slice()
66
+ sv = v.first_slice()
67
+
68
+ self.assertTrue(sx.t0_tf() == Interval(-1,3))
69
+ self.assertTrue(sx.codomain() == Interval(-5,3))
70
+ x.set([1,3],-1)
71
+ x.set([-4,-3],3)
72
+
73
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
74
+ ctc_deriv.contract(sx, sv)
75
+
76
+ self.assertTrue(sx.input_gate() == Interval(1))
77
+ self.assertTrue(sx.output_gate() == Interval(-3))
78
+ self.assertTrue(sx.codomain() == Interval(-3,1))
79
+ self.assertTrue(sx(-1, sv) == Interval(1))
80
+ self.assertTrue(sx(1, sv) == Interval(-1))
81
+ self.assertTrue(sx(3, sv) == Interval(-3))
82
+ self.assertTrue(sx(0, sv) == Interval(0))
83
+
84
+ # Test slice, empty case
85
+
86
+ tdomain = create_tdomain([-1,3])
87
+ x = SlicedTube(tdomain, Interval(-10,20))
88
+ v = SlicedTube(tdomain, Interval.empty())
89
+
90
+ sx = x.first_slice()
91
+ sv = v.first_slice()
92
+
93
+ self.assertTrue(sx.t0_tf() == Interval(-1,3))
94
+ self.assertTrue(sx.codomain() == Interval(-10,20))
95
+ x.set([-1,2],-1)
96
+ x.set([-2,0],3)
97
+
98
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
99
+ ctc_deriv.contract(sx, sv)
100
+
101
+ self.assertTrue(sx.input_gate().is_empty())
102
+ self.assertTrue(sx.output_gate().is_empty())
103
+ self.assertTrue(sx.codomain().is_empty())
104
+
105
+ # Test slice, empty case (bis)
106
+
107
+ tdomain = create_tdomain([-1,3])
108
+ x = SlicedTube(tdomain, Interval(-10,20))
109
+ v = SlicedTube(tdomain, Interval(-1,1))
110
+
111
+ sx = x.first_slice()
112
+ sv = v.first_slice()
113
+
114
+ self.assertTrue(sx.t0_tf() == Interval(-1,3))
115
+ self.assertTrue(sx.codomain() == Interval(-10,20))
116
+ x.set([-1,2],-1)
117
+ x.set(Interval.empty(),3)
118
+
119
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
120
+ ctc_deriv.contract(sx, sv)
121
+
122
+ self.assertTrue(sx.input_gate().is_empty())
123
+ self.assertTrue(sx.output_gate().is_empty())
124
+ self.assertTrue(sx.codomain().is_empty())
125
+
126
+ # Test slice, unbounded slice
127
+
128
+ tdomain = create_tdomain([-1,3])
129
+ x = SlicedTube(tdomain, Interval())
130
+ v = SlicedTube(tdomain, Interval(0,1))
131
+
132
+ sx = x.first_slice()
133
+ sv = v.first_slice()
134
+
135
+ self.assertTrue(sx.input_gate() == Interval())
136
+ self.assertTrue(sx.output_gate() == Interval())
137
+ self.assertTrue(sx.codomain() == Interval())
138
+
139
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
140
+ ctc_deriv.contract(sx, sv)
141
+
142
+ self.assertTrue(sx.input_gate() == Interval())
143
+ self.assertTrue(sx.output_gate() == Interval())
144
+ self.assertTrue(sx.codomain() == Interval())
145
+
146
+ # Test slice, unbounded derivative (1)
147
+
148
+ tdomain = create_tdomain([-1,3])
149
+ x = SlicedTube(tdomain, Interval())
150
+ v = SlicedTube(tdomain, Interval())
151
+
152
+ sx = x.first_slice()
153
+ sv = v.first_slice()
154
+
155
+ self.assertTrue(sx.input_gate() == Interval())
156
+ self.assertTrue(sx.output_gate() == Interval())
157
+ self.assertTrue(sx.codomain() == Interval())
158
+
159
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
160
+ ctc_deriv.contract(sx, sv)
161
+
162
+ self.assertTrue(sx.input_gate() == Interval())
163
+ self.assertTrue(sx.output_gate() == Interval())
164
+ self.assertTrue(sx.codomain() == Interval())
165
+
166
+ # Test slice, unbounded derivative ([-oo,1])
167
+
168
+ tdomain = create_tdomain([-1,3])
169
+ x = SlicedTube(tdomain, Interval())
170
+ v = SlicedTube(tdomain, Interval(-oo,1))
171
+
172
+ sx = x.first_slice()
173
+ sv = v.first_slice()
174
+
175
+ x.set([-1,2],-1)
176
+ x.set([-2,0],3)
177
+
178
+ self.assertTrue(sx.input_gate() == Interval(-1,2))
179
+ self.assertTrue(sx.output_gate() == Interval(-2,0))
180
+ self.assertTrue(sx.codomain() == Interval())
181
+ self.assertTrue(sv.codomain() == Interval(-oo,1))
182
+
183
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
184
+ ctc_deriv.contract(sx, sv)
185
+
186
+ self.assertTrue(sx.input_gate() == Interval(-1,2))
187
+ self.assertTrue(sx.output_gate() == Interval(-2,0))
188
+ self.assertTrue(sx.codomain() == Interval(-6,6))
189
+ self.assertTrue(sv.codomain() == Interval(-oo,1))
190
+
191
+ # Test slice, unbounded derivative ([1,oo])
192
+
193
+ tdomain = create_tdomain([-1,3])
194
+ x = SlicedTube(tdomain, Interval())
195
+ v = SlicedTube(tdomain, Interval(-1,oo))
196
+
197
+ sx = x.first_slice()
198
+ sv = v.first_slice()
199
+
200
+ x.set([-1,2],-1)
201
+ x.set([-2,0],3)
202
+
203
+ self.assertTrue(sx.input_gate() == Interval(-1,2))
204
+ self.assertTrue(sx.output_gate() == Interval(-2,0))
205
+ self.assertTrue(sx.codomain() == Interval())
206
+ self.assertTrue(sv.codomain() == Interval(-1,oo))
207
+
208
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
209
+ ctc_deriv.contract(sx, sv)
210
+
211
+ self.assertTrue(sx.input_gate() == Interval(-1,2))
212
+ self.assertTrue(sx.output_gate() == Interval(-2,0))
213
+ self.assertTrue(sx.codomain() == Interval(-5,4))
214
+ self.assertTrue(sv.codomain() == Interval(-1,oo))
215
+
216
+ # Test fwd
217
+
218
+ tdomain = create_tdomain([0,6],1.)
219
+ x_fwd = SlicedTube(tdomain, Interval())
220
+ x_fwd.set([-1,1],[0,1])
221
+ v = SlicedTube(tdomain, Interval(-0.5,1))
222
+ x_fwdbwd = SlicedTube(x_fwd)
223
+
224
+ ctc_deriv_fwd = CtcDeriv(TimePropag.FWD, False)
225
+ ctc_deriv_fwdbwd = CtcDeriv(TimePropag.FWD_BWD, False)
226
+
227
+ ctc_deriv_fwd.contract(x_fwd, v)
228
+ ctc_deriv_fwdbwd.contract(x_fwdbwd, v)
229
+
230
+ self.assertTrue(x_fwd == x_fwdbwd)
231
+
232
+ # Checking structure
233
+ sx_fwd = [s for s in x_fwd if not s.is_gate()]
234
+
235
+ self.assertTrue(sx_fwd[0].codomain() == Interval(-1,1))
236
+ self.assertTrue(sx_fwd[1].codomain() == Interval(-1.5,2))
237
+ self.assertTrue(sx_fwd[2].codomain() == Interval(-2,3))
238
+ self.assertTrue(sx_fwd[3].codomain() == Interval(-2.5,4))
239
+ self.assertTrue(sx_fwd[4].codomain() == Interval(-3,5))
240
+ self.assertTrue(sx_fwd[5].codomain() == Interval(-3.5,6))
241
+ self.assertTrue(x_fwd.codomain() == Interval(-3.5,6))
242
+
243
+ # Test bwd
244
+
245
+ tdomain = create_tdomain([0,6],1.)
246
+ x_bwd = SlicedTube(tdomain, Interval())
247
+ x_bwd.set([-1,1],[5,6])
248
+ v = SlicedTube(tdomain, Interval(-1,0.5))
249
+ x_fwdbwd = SlicedTube(x_bwd)
250
+
251
+ ctc_deriv_bwd = CtcDeriv(TimePropag.BWD, False)
252
+ ctc_deriv_fwdbwd = CtcDeriv(TimePropag.FWD_BWD, False)
253
+
254
+ ctc_deriv_bwd.contract(x_bwd, v)
255
+ ctc_deriv_fwdbwd.contract(x_fwdbwd, v)
256
+
257
+ self.assertTrue(x_bwd == x_fwdbwd)
258
+
259
+ # Checking structure
260
+ sx_bwd = [s for s in x_bwd if not s.is_gate()]
261
+ self.assertTrue(sx_bwd[0].codomain() == Interval(-3.5,6))
262
+ self.assertTrue(sx_bwd[1].codomain() == Interval(-3,5))
263
+ self.assertTrue(sx_bwd[2].codomain() == Interval(-2.5,4))
264
+ self.assertTrue(sx_bwd[3].codomain() == Interval(-2,3))
265
+ self.assertTrue(sx_bwd[4].codomain() == Interval(-1.5,2))
266
+ self.assertTrue(sx_bwd[5].codomain() == Interval(-1,1))
267
+ self.assertTrue(x_bwd.codomain() == Interval(-3.5,6))
268
+
269
+ # Test fwd/bwd
270
+
271
+ tdomain = create_tdomain([0,6],1.)
272
+ x = SlicedTube(tdomain, Interval())
273
+ x.set([-1,1],[0,1])
274
+ x.set([-1,1],[5,6])
275
+ v = SlicedTube(tdomain, Interval(-1,0.5))
276
+
277
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
278
+ ctc_deriv.contract(x, v)
279
+
280
+ # Checking structure
281
+ sx = [s for s in x if not s.is_gate()]
282
+ self.assertTrue(sx[0].codomain() == Interval(-1,1))
283
+ self.assertTrue(sx[1].codomain() == Interval(-2,1.5))
284
+ self.assertTrue(Approx(sx[2].codomain()) == Interval(-7./3.,2.))
285
+ self.assertTrue(Approx(sx[3].codomain()) == Interval(-2.,7./3.))
286
+ self.assertTrue(sx[4].codomain() == Interval(-1.5,2.))
287
+ self.assertTrue(sx[5].codomain() == Interval(-1,1))
288
+ self.assertTrue(Approx(x.codomain()) == Interval(-7./3.,7./3.))
289
+
290
+ # Test fwd/bwd (example from tubint paper)
291
+
292
+ tdomain = create_tdomain([0,5],1.)
293
+ x = SlicedTube(tdomain, Interval())
294
+ x.set([0],0)
295
+ x.set([4],5)
296
+ v = SlicedTube(tdomain, Interval())
297
+ v.set([1,2],[0,1])
298
+ v.set([0.5,1.5],[1,2])
299
+ v.set([0,0.5],[2,3])
300
+ v.set([0],[3,4])
301
+ v.set([-0.5,0.5],[4,5])
302
+
303
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
304
+ ctc_deriv.contract(x, v)
305
+
306
+ # Checking structure
307
+ sx = [s for s in x if not s.is_gate()]
308
+ self.assertTrue(sx[0].codomain() == Interval(0,2))
309
+ self.assertTrue(sx[1].codomain() == Interval(1.5,3.5))
310
+ self.assertTrue(sx[2].codomain() == Interval(3,4))
311
+ self.assertTrue(sx[3].codomain() == Interval(3.5,4))
312
+ self.assertTrue(sx[4].codomain() == Interval(3.5,4.25))
313
+ self.assertTrue(x.codomain() == Interval(0,4.25))
314
+
315
+ # Test fwd/bwd (other example)
316
+
317
+ tdomain = create_tdomain([0,26])
318
+ x = SlicedTube(tdomain, Interval(-1,7))
319
+ x.set([2,3],0)
320
+ x.set([3,4],4)
321
+ x.set([1],8)
322
+ x.set([1],12)
323
+ x.set([5.5],14)
324
+ x.set([5.5],16)
325
+ x.set([-1],18)
326
+ x.set([5.5],20)
327
+ x.set([5.5],23)
328
+ x.set([5.5],23) # setting gate again
329
+ v = SlicedTube(tdomain, Interval(-1,1))
330
+
331
+ sx = [s for s in x if not s.is_gate()]
332
+ sv = [s for s in v if not s.is_gate()]
333
+
334
+ sx[8].set([-oo,oo])
335
+
336
+ sv[0].set([-1.5,4])
337
+ sv[1].set([-0.75,-0.5])
338
+ sv[2].set([-1./3,1])
339
+ sv[3].set([4.5/2])
340
+ sv[4].set([0])
341
+ sv[5].set([-oo,-6.5/2])
342
+ sv[6].set([6.5/2,oo])
343
+ sv[7].set([-oo,oo])
344
+ sv[8].set([-oo,oo])
345
+
346
+ self.assertTrue(len(sx) == 9)
347
+ self.assertTrue(len(sv) == 9)
348
+ self.assertTrue(x.nb_slices() == 18)
349
+ self.assertTrue(v.nb_slices() == 18)
350
+
351
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
352
+ ctc_deriv.contract(x, v)
353
+
354
+ self.assertTrue(sx[0].codomain() == Interval(-1,7))
355
+ self.assertTrue(sx[1].codomain() == Interval(1,4))
356
+ self.assertTrue(Approx(sx[2].codomain()) == Interval(0,2))
357
+ self.assertTrue(sx[3].codomain() == Interval(1,5.5))
358
+ self.assertTrue(sx[4].codomain() == Interval(5.5))
359
+ self.assertTrue(x.codomain() == Interval(-oo,oo))
360
+
361
+ ctc_deriv.contract(sx[0], sv[0])
362
+ ctc_deriv.contract(sx[1], sv[1])
363
+ ctc_deriv.contract(sx[2], sv[2])
364
+ ctc_deriv.contract(sx[3], sv[3])
365
+ ctc_deriv.contract(sx[4], sv[4])
366
+ ctc_deriv.contract(sx[5], sv[5])
367
+ ctc_deriv.contract(sx[6], sv[6])
368
+ ctc_deriv.contract(sx[7], sv[7])
369
+ ctc_deriv.contract(sx[8], sv[8])
370
+
371
+ self.assertTrue(x(0.) == Interval(2,3))
372
+ self.assertTrue(sx[0].codomain() == Interval(-1,7))
373
+ self.assertTrue(x(4.) == Interval(3,4))
374
+ self.assertTrue(sx[1].codomain() == Interval(1,4))
375
+ self.assertTrue(x(8.) == Interval(1.))
376
+ self.assertTrue(Approx(sx[2].codomain()) == Interval(0,2))
377
+ self.assertTrue(x(12.) == Interval(1))
378
+ self.assertTrue(sx[3].codomain() == Interval(1,5.5))
379
+ self.assertTrue(x(14.) == Interval(5.5))
380
+ self.assertTrue(sx[4].codomain() == Interval(5.5))
381
+ self.assertTrue(x(16.) == Interval(5.5))
382
+ self.assertTrue(sx[5].codomain() == Interval(-1,5.5))
383
+ self.assertTrue(x(18.) == Interval(-1))
384
+ self.assertTrue(sx[6].codomain() == Interval(-1,5.5))
385
+ self.assertTrue(x(20.) == Interval(5.5))
386
+ self.assertTrue(sx[7].codomain() == Interval(-1,7))
387
+ self.assertTrue(x(23.) == Interval(5.5))
388
+
389
+ self.assertTrue(sx[8].codomain() == Interval())
390
+ self.assertTrue(x(26.) == Interval())
391
+ self.assertTrue(x.codomain() == Interval())
392
+
393
+ # From: Test slice, output gate contraction
394
+
395
+ tdomain = create_tdomain([-1,3])
396
+ x = SlicedTube(tdomain, Interval(-5,3))
397
+ v = SlicedTube(tdomain, Interval(-1,-1))
398
+
399
+ sx = x.first_slice()
400
+ sv = v.first_slice()
401
+
402
+ x.set([-1,3],-1)
403
+ x.set([-5,0.5],3)
404
+
405
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
406
+ ctc_deriv.contract(x,v)
407
+
408
+ self.assertTrue(sx.input_gate() == Interval(-1,3))
409
+ self.assertTrue(sx.output_gate() == Interval(-5,-1))
410
+ self.assertTrue(sx(Interval(2.), sv) == Interval(-4,0))
411
+ self.assertTrue(sx(Interval(-1,3), sv) == Interval(-5,3))
412
+
413
+ # From: Test slice, complete contraction (degenerate tube)
414
+
415
+ tdomain = create_tdomain([-1,3])
416
+ x = SlicedTube(tdomain, Interval(-5,3))
417
+ v = SlicedTube(tdomain, Interval(-1,1))
418
+
419
+ sx = x.first_slice()
420
+ sv = v.first_slice()
421
+
422
+ x.set([1,3],-1)
423
+ x.set([-4,-3],3)
424
+
425
+ ctc_deriv = CtcDeriv(TimePropag.FWD_BWD, False)
426
+ ctc_deriv.contract(x,v)
427
+
428
+ self.assertTrue(sx(Interval(0.5,2), sv) == Interval(-2,-0.5))
429
+ self.assertTrue(sx(Interval(1), sv) == Interval(-1))
430
+ self.assertTrue(sx(Interval(-1,3), sv) == Interval(-3,1))
431
+
432
+
433
+ if __name__ == '__main__':
434
+ unittest.main()
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+
13
+ class TestCtcEval(unittest.TestCase):
14
+
15
+ def test_CtcEval_1(self):
16
+
17
+ tdomain = create_tdomain([-1,7], 2., True)
18
+ x = SlicedTube(tdomain, Interval())
19
+ v = SlicedTube(tdomain, Interval())
20
+
21
+ self.assertTrue(x.nb_slices() == 9)
22
+
23
+ v.set_ith_slice([-1], 0*2+1)
24
+ v.set_ith_slice([-1,1], 1*2+1)
25
+ v.set_ith_slice([-1], 2*2+1)
26
+ v.set_ith_slice([-1,1], 3*2+1)
27
+
28
+ self.assertTrue(not v.is_empty())
29
+
30
+ t = Interval(0,6)
31
+ z = Interval(-1,1)
32
+
33
+ ctc_eval = CtcEval()
34
+ ctc_eval.contract(t, z, x, v)
35
+
36
+ self.assertTrue(x.nb_slices() == 13)
37
+
38
+ self.assertTrue(x(-1) == Interval())
39
+ self.assertTrue(x(0) == Interval(-2,7))
40
+ self.assertTrue(x(1) == Interval(-3,6))
41
+ self.assertTrue(x(3) == Interval(-4,4))
42
+ self.assertTrue(x(5) == Interval(-6,2))
43
+ self.assertTrue(x(6) == Interval(-7,2))
44
+ self.assertTrue(x(7) == Interval())
45
+
46
+ def test_CtcEval_2(self):
47
+
48
+ t = ScalarVar()
49
+ fv = AnalyticFunction([t], -sin(t)+1e-3*Interval(-1,1))
50
+
51
+ tdomain = create_tdomain([0,20],0.1,True)
52
+ x = SlicedTube(tdomain, Interval(-10,10))
53
+ v = SlicedTube(tdomain, fv)
54
+ x.set(1,0)
55
+
56
+ ctc_deriv = CtcDeriv()
57
+ ctc_deriv.contract(x, v)
58
+
59
+ ctc_eval = CtcEval()
60
+ xc = SlicedTube(x)
61
+ vc = SlicedTube(v)
62
+
63
+ y1 = IntervalVector([11.98,1])
64
+ ctc_eval.contract(y1[0], y1[1], xc, vc)
65
+
66
+ y2 = IntervalVector([6.5,1])
67
+ ctc_eval.contract(y2[0], y2[1], xc, vc)
68
+
69
+ ctc_deriv.contract(xc, vc)
70
+
71
+ self.assertTrue(xc(tdomain.t0_tf().lb()) == 1.)
72
+ self.assertTrue(xc(y1[0]) == y1[1])
73
+ self.assertTrue(xc(y2[0]) == y2[1])
74
+ self.assertTrue(Approx(xc(tdomain.t0_tf().ub()),1e-5) == Interval(0.294849,0.857381))
75
+
76
+ def test_CtcEval_3_from_tubeval(self):
77
+
78
+ tdomain = create_tdomain([-PI,PI/2],1e-2,True)
79
+ t = ScalarVar()
80
+ fv = AnalyticFunction([t], cos(t)+Interval(-0.1,0.1))
81
+ v = SlicedTube(tdomain, fv)
82
+ x = v.primitive()
83
+ for sx in x:
84
+ if(not sx.is_gate()):
85
+ sx.set(sx.codomain() + Interval(-0.1,0.1))
86
+ for sx in x:
87
+ if(sx.is_gate()):
88
+ sx.set(sx.codomain() + Interval(-0.1,0.1))
89
+
90
+ ti = Interval(-0.5,0.3)
91
+ yi = Interval(0.3,1.1)
92
+
93
+ #DefaultFigure.plot_tube(x, [Color.light_gray(),Color.light_gray()])
94
+ #DefaultFigure.draw_box(cart_prod(ti,yi), Color.gray())
95
+
96
+ ctc_eval = CtcEval()
97
+ ctc_eval.contract(ti, yi, x, v)
98
+
99
+ #ctc_deriv = CtcDeriv()
100
+ #ctc_deriv.contract(x, v)
101
+
102
+ #DefaultFigure.plot_tube(x, [Color.dark_blue(),Color.blue()])
103
+ #DefaultFigure.draw_box(cart_prod(ti,yi), Color.red())
104
+
105
+ self.assertTrue(Approx(ti,1e-5) == Interval(-0.113064,0.3))
106
+ self.assertTrue(Approx(yi,1e-5) == Interval(0.299999,0.749899))
107
+ self.assertTrue(Approx(x.codomain(),1e-5) == Interval(-1.26758,1.58623))
108
+ self.assertTrue(Approx(v.codomain(),1e-4) == Interval(-1.10001,1.10001))
109
+ self.assertTrue(Approx(ti.lb(),1e-5) == -0.113063)
110
+ self.assertTrue(Approx(x(ti.lb()),1e-5) == Interval(-0.149899,0.300296))
111
+ self.assertTrue(Approx(ti.ub(),1e-5) == 0.3)
112
+ self.assertTrue(Approx(x(ti.ub()),1e-5) == Interval(0.299999,0.749899))
113
+
114
+ def test_CtcEval_4(self):
115
+
116
+ tdomain = create_tdomain([0,11],1,True)
117
+ x = SlicedTube(tdomain, Interval())
118
+ v = SlicedTube(tdomain, Interval(-1.5,-1))
119
+
120
+ sx = []
121
+ for s in x:
122
+ if(not s.is_gate()):
123
+ sx.append(s)
124
+
125
+ sx[0].set([6,8])
126
+
127
+ ctc_eval = CtcEval()
128
+ ctc_deriv = CtcDeriv()
129
+ ctc_deriv.contract(x, v)
130
+
131
+ self.assertTrue(sx[0].codomain() == Interval(6,8))
132
+ self.assertTrue(sx[1].codomain() == Interval(4.5,7))
133
+ self.assertTrue(sx[2].codomain() == Interval(3,6))
134
+ self.assertTrue(sx[3].codomain() == Interval(1.5,5))
135
+ self.assertTrue(sx[4].codomain() == Interval(-0,4))
136
+ self.assertTrue(sx[5].codomain() == Interval(-1.5,3))
137
+ self.assertTrue(sx[6].codomain() == Interval(-3,2))
138
+ self.assertTrue(sx[7].codomain() == Interval(-4.5,1))
139
+ self.assertTrue(sx[8].codomain() == Interval(-6,0))
140
+ self.assertTrue(sx[9].codomain() == Interval(-7.5,-1))
141
+ self.assertTrue(sx[10].codomain() == Interval(-9,-2))
142
+
143
+ t = Interval()
144
+ y = Interval()
145
+ x_raw = SlicedTube(x)
146
+ v_raw = SlicedTube(v)
147
+
148
+ x = SlicedTube(x_raw)
149
+ v = SlicedTube(v_raw)
150
+ t = Interval(3.5,6)
151
+ y = Interval(3.5,6)
152
+ ctc_eval.contract(t, y, x, v)
153
+
154
+ sx.clear()
155
+ for s in x:
156
+ if(not s.is_gate()):
157
+ sx.append(s)
158
+
159
+ self.assertTrue(t == Interval(3.5,4.5))
160
+ self.assertTrue(y == Interval(3.5,4.5))
161
+ self.assertTrue(sx[0].codomain() == Interval(6,8))
162
+ self.assertTrue(sx[1].codomain() == Interval(4.5,7))
163
+ self.assertTrue(sx[2].codomain() == Interval(3,6))
164
+ self.assertTrue(sx[3].codomain() == Interval(1.5,5))
165
+ self.assertTrue(sx[3].t0_tf() == Interval(3,3.5))
166
+ self.assertTrue(sx[4].codomain() == Interval(2.75,4.75))
167
+ self.assertTrue(sx[4].t0_tf() == Interval(3.5,4))
168
+ self.assertTrue(sx[5].codomain() == Interval(2,4))
169
+ self.assertTrue(sx[5].t0_tf() == Interval(4,4.5))
170
+ self.assertTrue(sx[6].codomain() == Interval(0,4))
171
+ self.assertTrue(sx[6].t0_tf() == Interval(4.5,5))
172
+ self.assertTrue(sx[7].codomain() == Interval(-1.5,3))
173
+ self.assertTrue(sx[7].t0_tf() == Interval(5,6))
174
+
175
+ #ctc_deriv.contract(x, v)
176
+
177
+ #DefaultFigure.plot_tube(x_raw, [Color.light_gray(),Color.light_gray()])
178
+ #DefaultFigure.plot_tube(x, [Color.dark_blue(),Color.light_blue()])
179
+ #DefaultFigure.draw_line(Segment([[3.5,4.5],[11,4.5-1*(11-3.5)]]), Color.purple())
180
+ #DefaultFigure.draw_line(Segment([[3.5,3.5],[11,3.5-1.5*(11-3.5)]]), Color.purple())
181
+ #DefaultFigure.draw_box([[3.5,6],[3.5,6]], Color.light_gray())
182
+ #DefaultFigure.draw_box(cart_prod(t,y), Color.red())
183
+
184
+ def test_CtcEval_5_multi(self):
185
+
186
+ tdomain = create_tdomain([0,10*PI],1e-1,True)
187
+ t = ScalarVar()
188
+ fv = AnalyticFunction([t], cos(t))
189
+ fx = AnalyticFunction([t], sin(t)+Interval(-0.1,0.1))
190
+ v = SlicedTube(tdomain, fv)
191
+ x = SlicedTube(tdomain, fx)
192
+
193
+ ctc_deriv = CtcDeriv()
194
+ ctc_deriv.contract(x, v)
195
+
196
+ #DefaultFigure.plot_tube(x, [Color.light_gray(),Color.light_gray()])
197
+
198
+ ti = Interval(11.42,23.15)
199
+ yi = Interval(-1.2,-1)
200
+ #DefaultFigure.draw_box(cart_prod(ti,yi), Color.gray())
201
+
202
+ ctc_eval = CtcEval()
203
+ ctc_eval.contract(ti,yi,x,v)
204
+ ctc_deriv.contract(x, v)
205
+
206
+ #DefaultFigure.plot_tube(x, [Color.blue(),Color.light_blue()])
207
+ #DefaultFigure.draw_box(cart_prod(ti,yi), Color.red())
208
+
209
+ self.assertTrue(ti == Interval(11.42,23.15))
210
+ self.assertTrue(Approx(yi) == Interval(-1.1,-1))
211
+ self.assertTrue(Approx(x(17.27),1e-4) == Interval(-1.10001,-0.897816))
212
+
213
+ if __name__ == '__main__':
214
+ unittest.main()
@@ -20,10 +20,17 @@ class TestCtcInverse(unittest.TestCase):
20
20
 
21
21
  def test_CtcInverse_1(self):
22
22
 
23
+ x = VectorVar(1)
24
+ f = AnalyticFunction([x], x[0]-42)
25
+ c = CtcInverse(f, Interval(0.))
26
+ a = IntervalVector(1)
27
+ c.contract(a)
28
+ self.assertTrue(a == IntervalVector([[42]]))
29
+
23
30
  x = VectorVar(2)
24
31
  f = AnalyticFunction([x], x[0]-x[1])
25
32
  c = CtcInverse(f, 0)
26
- self.assertTrue(c.function().input_size() == 2)
33
+ self.assertTrue(c.fnc().input_size() == 2)
27
34
 
28
35
  b = IntervalVector(2)
29
36
 
@@ -147,11 +154,13 @@ class TestCtcInverse(unittest.TestCase):
147
154
 
148
155
  ctc = CtcInverse(h, [0,0,0])
149
156
  x0 = [[0,1],[0,1],[0.05,0.18],[0.05,0.18]]
150
- #draw_while_paving(x0, ctc, 0.001)
157
+ #DefaultFigure.pave(x0, ctc, 0.001)
151
158
  p = pave(x0, ctc, 0.01)
152
159
  cs = p.connected_subsets()
153
160
  self.assertTrue(len(cs) == 1)
154
- self.assertTrue(Approx(cs[0].box(),1e-4) == [[0.149199,0.182388],[0.148306,0.1826],[0.148054,0.18],[0.148732,0.18]])
161
+ hull = IntervalVector([[0.149199,0.182388],[0.148306,0.1826],[0.148054,0.18],[0.148732,0.18]])
162
+ hull.inflate(1e-4)
163
+ self.assertTrue(hull.is_superset(cs[0].box()))
155
164
 
156
165
  def test_automatic_deduction_issue245(self):
157
166
 
@@ -201,4 +210,4 @@ class TestCtcInverse(unittest.TestCase):
201
210
  self.assertTrue(x == IntervalVector([[-1,1],[-1,1]]))
202
211
 
203
212
  if __name__ == '__main__':
204
- unittest.main()
213
+ unittest.main()
@@ -44,7 +44,7 @@ class TestCtcPolygon(unittest.TestCase):
44
44
  [[-3,-3], [-2,3]]
45
45
  ])
46
46
 
47
- #draw_while_paving(IntervalVector([[-10,10],[-10,10]]), c, 0.1)
47
+ #DefaultFigure.pave(IntervalVector([[-10,10],[-10,10]]), c, 0.1)
48
48
 
49
49
  # Check a box inside the hole
50
50