codac4matlab 2.0.0.dev25__cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.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 (76) hide show
  1. codac4matlab/__init__.py +4 -0
  2. codac4matlab/_core.cpython-314-aarch64-linux-gnu.so +0 -0
  3. codac4matlab/_graphics.cpython-314-aarch64-linux-gnu.so +0 -0
  4. codac4matlab/_unsupported.cpython-314-aarch64-linux-gnu.so +0 -0
  5. codac4matlab/core/__init__.py +588 -0
  6. codac4matlab/empty.cpython-314-aarch64-linux-gnu.so +0 -0
  7. codac4matlab/graphics/__init__.py +1 -0
  8. codac4matlab/tests/__init__.py +1 -0
  9. codac4matlab/tests/test_AnalyticFunction.py +442 -0
  10. codac4matlab/tests/test_AnalyticTraj.py +62 -0
  11. codac4matlab/tests/test_Approx.py +27 -0
  12. codac4matlab/tests/test_BoolInterval.py +96 -0
  13. codac4matlab/tests/test_Color.py +77 -0
  14. codac4matlab/tests/test_ConvexPolygon.py +300 -0
  15. codac4matlab/tests/test_CtcAction.py +30 -0
  16. codac4matlab/tests/test_CtcCartProd.py +39 -0
  17. codac4matlab/tests/test_CtcCtcBoundary.py +48 -0
  18. codac4matlab/tests/test_CtcDeriv.py +434 -0
  19. codac4matlab/tests/test_CtcEval.py +214 -0
  20. codac4matlab/tests/test_CtcFixpoint.py +65 -0
  21. codac4matlab/tests/test_CtcInter.py +39 -0
  22. codac4matlab/tests/test_CtcInverse.py +213 -0
  23. codac4matlab/tests/test_CtcInverseNotIn.py +129 -0
  24. codac4matlab/tests/test_CtcLazy.py +50 -0
  25. codac4matlab/tests/test_CtcPolygon.py +91 -0
  26. codac4matlab/tests/test_CtcSegment.py +104 -0
  27. codac4matlab/tests/test_Ellipsoid.py +20 -0
  28. codac4matlab/tests/test_GaussJordan.py +34 -0
  29. codac4matlab/tests/test_IntFullPivLU.py +84 -0
  30. codac4matlab/tests/test_Interval.py +254 -0
  31. codac4matlab/tests/test_IntervalMatrix.py +664 -0
  32. codac4matlab/tests/test_IntervalVector.py +657 -0
  33. codac4matlab/tests/test_Interval_operations.py +293 -0
  34. codac4matlab/tests/test_Matrix.py +81 -0
  35. codac4matlab/tests/test_OctaSym.py +41 -0
  36. codac4matlab/tests/test_Parallelepiped.py +35 -0
  37. codac4matlab/tests/test_Parallelepiped_eval.py +62 -0
  38. codac4matlab/tests/test_Polygon.py +120 -0
  39. codac4matlab/tests/test_SampledTraj.py +135 -0
  40. codac4matlab/tests/test_Segment.py +138 -0
  41. codac4matlab/tests/test_SepCartProd.py +34 -0
  42. codac4matlab/tests/test_SepCtcBoundary.py +52 -0
  43. codac4matlab/tests/test_SepInverse.py +104 -0
  44. codac4matlab/tests/test_SepPolygon.py +102 -0
  45. codac4matlab/tests/test_SepProj.py +39 -0
  46. codac4matlab/tests/test_SepTransform.py +41 -0
  47. codac4matlab/tests/test_Slice.py +78 -0
  48. codac4matlab/tests/test_Slice_polygon.py +208 -0
  49. codac4matlab/tests/test_SlicedTube.py +562 -0
  50. codac4matlab/tests/test_SlicedTube_integral.py +380 -0
  51. codac4matlab/tests/test_TDomain.py +115 -0
  52. codac4matlab/tests/test_Vector.py +41 -0
  53. codac4matlab/tests/test_arithmetic_add.py +54 -0
  54. codac4matlab/tests/test_arithmetic_div.py +46 -0
  55. codac4matlab/tests/test_arithmetic_mul.py +114 -0
  56. codac4matlab/tests/test_arithmetic_sub.py +54 -0
  57. codac4matlab/tests/test_capd.py +19 -0
  58. codac4matlab/tests/test_cart_prod.py +38 -0
  59. codac4matlab/tests/test_eigen.py +19 -0
  60. codac4matlab/tests/test_geometry.py +136 -0
  61. codac4matlab/tests/test_hull.py +35 -0
  62. codac4matlab/tests/test_ibex.py +19 -0
  63. codac4matlab/tests/test_inversion.py +57 -0
  64. codac4matlab/tests/test_linear_ctc.py +77 -0
  65. codac4matlab/tests/test_operators.py +377 -0
  66. codac4matlab/tests/test_peibos.py +83 -0
  67. codac4matlab/tests/test_predefined_tubes.py +193 -0
  68. codac4matlab/tests/test_serialization.py +30 -0
  69. codac4matlab/tests/test_transformations.py +61 -0
  70. codac4matlab/tests/test_trunc.py +95 -0
  71. codac4matlab/unsupported/__init__.py +1 -0
  72. codac4matlab/version.py +1 -0
  73. codac4matlab-2.0.0.dev25.dist-info/METADATA +23 -0
  74. codac4matlab-2.0.0.dev25.dist-info/RECORD +76 -0
  75. codac4matlab-2.0.0.dev25.dist-info/WHEEL +6 -0
  76. codac4matlab-2.0.0.dev25.dist-info/top_level.txt +1 -0
@@ -0,0 +1,657 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ #
5
+ # Most of these tests come from the IBEX library (Gilles Chabert)
6
+ # See more: https://ibex-lib.readthedocs.io
7
+ # They have been revised to fit with Codac (v2)
8
+ #
9
+ # ----------------------------------------------------------------------------
10
+ # \date 2024
11
+ # \author Gilles Chabert, Simon Rohou
12
+ # \copyright Copyright 2024 Codac Team
13
+ # \license GNU Lesser General Public License (LGPL)
14
+
15
+ import unittest
16
+ from codac import *
17
+ import sys
18
+ import math
19
+
20
+ class TestIntervalVector(unittest.TestCase):
21
+
22
+ def CHECK_diff(self, x, y, compactness, result):
23
+ x=IntervalVector(x)
24
+ y=IntervalVector(y)
25
+ result_=IntervalMatrix(result)
26
+ c = x.diff(y, compactness)
27
+
28
+ if not c:
29
+ return not result
30
+
31
+ for ci in c:
32
+ found = False
33
+ for i in range(0,result_.rows()):
34
+ if IntervalMatrix(ci).transpose() == IntervalMatrix(result_.row(i)):
35
+ found = True
36
+ break
37
+ if(not found):
38
+ return False
39
+ return True
40
+
41
+ def test_intervalvector(self):
42
+
43
+ x = IntervalVector(2)
44
+ x[0] = Interval(-oo,oo)
45
+ x[1] = Interval(-oo,oo)
46
+ self.assertTrue(x == IntervalVector(2))
47
+ self.assertTrue(x == IntervalVector(x))
48
+ #self.assertTrue(x == (IntervalVector(2)=x))
49
+
50
+ x = IntervalVector(2)
51
+ x[0] = Interval(0,1)
52
+ x[1] = Interval(0,1)
53
+ self.assertTrue(x == IntervalVector([[0,1],[0,1]]))
54
+ self.assertTrue(x == IntervalVector(x))
55
+ #self.assertTrue(x == (IntervalVector(2)=x))
56
+
57
+ x = IntervalVector(2)
58
+ x[0] = Interval(0,1)
59
+ x[1] = Interval(2,3)
60
+ self.assertTrue(x == IntervalVector(x))
61
+ #self.assertTrue(x == (IntervalVector(2)=x))
62
+
63
+ x = IntervalVector(2)
64
+ x[0] = Interval(0,1)
65
+ x[1] = Interval(2,3)
66
+ self.assertTrue(x == IntervalVector([[0,1],[2,3]]))
67
+ #self.assertTrue(x == (IntervalVector(2)=x))
68
+
69
+ x = IntervalVector(2)
70
+ x[0].set_empty()
71
+ x[1].set_empty()
72
+ self.assertTrue(x == IntervalVector.empty(2))
73
+ self.assertTrue(x.is_empty())
74
+ #self.assertTrue((IntervalVector(2)=x).is_empty())
75
+
76
+ x = IntervalVector([
77
+ [1.0, 2.0],
78
+ [2.0, 3.0],
79
+ [4]
80
+ ])
81
+ self.assertTrue(x.size() == 3)
82
+ self.assertTrue(x[0] == Interval(1.0, 2.0))
83
+ self.assertTrue(x[1] == Interval(2.0, 3.0))
84
+ self.assertTrue(x[2] == Interval(4.0, 4.0))
85
+
86
+ x = IntervalVector(2)
87
+ self.assertTrue(not x.is_empty())
88
+ x.set_empty()
89
+ self.assertTrue(x.is_empty())
90
+ self.assertTrue(IntervalVector.empty(2).is_empty())
91
+ self.assertTrue(not IntervalVector(2).is_empty())
92
+
93
+ x = IntervalVector(1)
94
+ x[0] = Interval(1,2)
95
+ x.resize_save_values(3)
96
+ self.assertTrue(x.size() == 3)
97
+ self.assertTrue(x[0] == Interval(1,2))
98
+ self.assertTrue(x[1] == Interval(-oo,oo))
99
+ self.assertTrue(x[2] == Interval(-oo,oo))
100
+
101
+ x = IntervalVector(1)
102
+ x[0] = Interval(1,2)
103
+ x.resize_save_values(1)
104
+ self.assertTrue(x.size() == 1)
105
+ self.assertTrue(x[0] == Interval(1,2))
106
+
107
+ x = IntervalVector(2)
108
+ x[0] = Interval(1,2)
109
+ x.set_empty()
110
+ x.resize_save_values(3)
111
+ self.assertTrue(x.size() == 3)
112
+ self.assertTrue(x.is_empty())
113
+ self.assertTrue(x[2] == Interval(-oo,oo))
114
+
115
+ x = IntervalVector(5)
116
+ x[0] = Interval(1,2)
117
+ x[1] = Interval(3,4)
118
+ x.resize_save_values(2)
119
+ self.assertTrue(x.size() == 2)
120
+ self.assertTrue(x[0] == Interval(1,2))
121
+ self.assertTrue(x[1] == Interval(3,4))
122
+
123
+ xi = Interval(-5,6)
124
+ x = IntervalVector([xi])
125
+ self.assertTrue(x.size() == 1)
126
+ self.assertTrue(x[0] == Interval(-5,6))
127
+
128
+ x = IntervalVector([Interval(4.0397,5.40),Interval(1.9089,2.45)])
129
+ self.assertTrue(x[0] == Interval(4.0397,5.40))
130
+ self.assertTrue(x[1] == Interval(1.9089,2.45))
131
+
132
+ x = IntervalVector([[4.0397,5.40],[1.9089,2.45]])
133
+ self.assertTrue(x[0] == Interval(4.0397,5.40))
134
+ self.assertTrue(x[1] == Interval(1.9089,2.45))
135
+
136
+ self.assertTrue(True)
137
+
138
+ self.assertTrue(IntervalVector([[0,1],[2,3],[4,5]]).subvector(0,1) == IntervalVector([[0,1],[2,3]]))
139
+ self.assertTrue(IntervalVector([[0,1],[2,3],[4,5]]).subvector(1,2) == IntervalVector([[2,3],[4,5]]))
140
+ self.assertTrue(IntervalVector([[0,1],[2,3],[4,5]]).subvector(1,1) == IntervalVector([[2,3]]))
141
+ self.assertTrue(IntervalVector([[0,1],[2,3],[4,5]]).subvector(2,2) == IntervalVector([[4,5]]))
142
+ self.assertTrue(IntervalVector([[0,1],[2,3],[4,5]]).subvector(0,2) == IntervalVector([[0,1],[2,3],[4,5]]))
143
+ self.assertTrue(IntervalVector.empty(3).subvector(1,2).is_empty())
144
+
145
+ x1_ = IntervalVector([[0,2],[4,6]]) ; x1_ &= IntervalVector([[1,3],[5,7]])
146
+ self.assertTrue(x1_ == IntervalVector([[1,2],[5,6]]))
147
+ self.assertTrue(((IntervalVector([[0,2],[4,6]])) & IntervalVector([[1,3],[5,7]])) == IntervalVector([[1,2],[5,6]]))
148
+
149
+ x1_ = IntervalVector([[0,2],[4,6]]) ; x1_ &= IntervalVector([[1,3],[7,8]])
150
+ self.assertTrue(x1_.is_empty())
151
+ self.assertTrue(((IntervalVector([[0,2],[4,6]])) & IntervalVector([[1,3],[7,8]])).is_empty())
152
+
153
+ x1_ = IntervalVector([[0,2],[4,6]]) ; x1_ &= IntervalVector.empty(2)
154
+ self.assertTrue(x1_.is_empty())
155
+ self.assertTrue(((IntervalVector([[0,2],[4,6]])) & IntervalVector.empty(2)).is_empty())
156
+
157
+ x1_ = IntervalVector.empty(2) ; x1_ &= IntervalVector([[0,2],[4,6]])
158
+ self.assertTrue(x1_.is_empty())
159
+ self.assertTrue(((IntervalVector.empty(2)) & IntervalVector([[0,2],[4,6]])).is_empty())
160
+
161
+ x1_ = IntervalVector([[0,1],[4,5]]) ; x1_ |= IntervalVector([[2,3],[6,7]])
162
+ self.assertTrue(x1_ == IntervalVector([[0,3],[4,7]]))
163
+ self.assertTrue(((IntervalVector([[0,1],[4,5]])) | IntervalVector([[2,3],[6,7]])) == IntervalVector([[0,3],[4,7]]))
164
+
165
+ x = IntervalVector(3)
166
+ x1 = IntervalVector(2)
167
+ x2 = IntervalVector(2)
168
+ x3 = IntervalVector(2)
169
+
170
+ x1 = IntervalVector([[0,1],[4,5]])
171
+ x1_ = IntervalVector(x1) ; x1_ |= x1
172
+ self.assertTrue(x1_ == x1)
173
+ self.assertTrue((x1 | x1) == x1)
174
+
175
+ x1 = IntervalVector([[0,2],[4,6]])
176
+ x1_ = IntervalVector(x1) ; x1_ |= IntervalVector.empty(2)
177
+ self.assertTrue(x1_ == x1)
178
+ self.assertTrue((x1 | IntervalVector.empty(2)) == x1)
179
+
180
+ x1 = IntervalVector([[0,2],[4,6]])
181
+ x1_ = IntervalVector.empty(2) ; x1_ |= x1
182
+ self.assertTrue(x1_ == x1)
183
+ self.assertTrue(((IntervalVector.empty(2)) | x1) == x1)
184
+
185
+ x = IntervalVector([[0,1],[2,3],[4,5]])
186
+ self.assertTrue(x == x)
187
+ self.assertTrue(not (x!=x))
188
+
189
+ x = IntervalVector([[0,1],[2,3],[4,5]])
190
+ x1 = IntervalVector([[0,1],[2,3]])
191
+ self.assertTrue(not (x == x1))
192
+ self.assertTrue(x!=x1)
193
+
194
+ x1 = IntervalVector([[0,1],[4,5]])
195
+ x2 = IntervalVector([[2,3],[6,7]])
196
+ x1.set_empty()
197
+ x2.set_empty()
198
+ self.assertTrue(x1 == x2)
199
+ self.assertTrue(not (x1!=x2))
200
+
201
+ self.assertTrue(IntervalVector.empty(2) == IntervalVector.empty(2))
202
+ self.assertTrue(IntervalVector.empty(2) != IntervalVector.empty(3))
203
+ x = IntervalVector(2)
204
+ x.set_empty()
205
+ self.assertTrue(IntervalVector.empty(2) == x)
206
+
207
+ x = IntervalVector([[0,1],[2,3],[4,5]])
208
+ m = x.mid()
209
+ self.assertTrue(m[0] == 0.5)
210
+ self.assertTrue(m[1] == 2.5)
211
+ self.assertTrue(m[2] == 4.5)
212
+
213
+ self.assertTrue(not IntervalVector([[0,1],[2,3],[4,5]]).is_flat())
214
+ self.assertTrue(IntervalVector.empty(3).is_flat())
215
+ self.assertTrue(IntervalVector([[0,0]]).is_flat())
216
+ self.assertTrue(not IntervalVector([[0,1]]).is_flat())
217
+ self.assertTrue(IntervalVector([[0,1],[2,2],[3,4]]).is_flat())
218
+ self.assertTrue(IntervalVector([[0,1],[2,3],[4,4]]).is_flat())
219
+ self.assertTrue(not IntervalVector.empty(3).is_unbounded())
220
+ self.assertTrue(IntervalVector([[0,1],[0,2],[-oo,0]]).is_unbounded())
221
+ self.assertTrue(not IntervalVector([[0,1],[0,2]]).is_unbounded())
222
+ self.assertTrue(IntervalVector(1).is_unbounded())
223
+
224
+ x1 = IntervalVector([[0,2],[2,4]])
225
+ x2 = IntervalVector([[0,1],[3,4]])
226
+
227
+ self.assertTrue(x1.is_superset(x2))
228
+ self.assertTrue(x2.is_subset(x1))
229
+ self.assertTrue(x1.is_strict_superset(x2))
230
+ self.assertTrue(not x2.is_strict_interior_subset(x1))
231
+
232
+ x1 = IntervalVector([[0,2],[2,4]])
233
+ x2 = IntervalVector([[1,1],[3,4]])
234
+
235
+ self.assertTrue(x1.is_superset(x2))
236
+ self.assertTrue(x2.is_subset(x1))
237
+ self.assertTrue(x1.is_strict_superset(x2))
238
+ self.assertTrue(not x2.is_strict_interior_subset(x1))
239
+
240
+ x1 = IntervalVector([[0,2],[2,4]])
241
+ x2 = IntervalVector([[0,1],[3,3]])
242
+
243
+ self.assertTrue(x1.is_superset(x2))
244
+ self.assertTrue(x2.is_subset(x1))
245
+ self.assertTrue(x1.is_strict_superset(x2))
246
+ self.assertTrue(not x2.is_strict_interior_subset(x1))
247
+
248
+ x1 = IntervalVector([[0,2],[2,4]])
249
+ x2 = IntervalVector([[1,1],[3,3]])
250
+
251
+ self.assertTrue(x1.is_superset(x2))
252
+ self.assertTrue(x2.is_subset(x1))
253
+ self.assertTrue(x1.is_strict_superset(x2))
254
+ self.assertTrue(x2.is_strict_interior_subset(x1))
255
+
256
+ x1 = IntervalVector([[0,2],[2,4]])
257
+ x2 = IntervalVector(IntervalVector.empty(2))
258
+
259
+ self.assertTrue(x1.is_superset(x2))
260
+ self.assertTrue(x2.is_subset(x1))
261
+ self.assertTrue(x1.is_strict_superset(x2))
262
+ self.assertTrue(x2.is_strict_interior_subset(x1))
263
+
264
+ x1 = IntervalVector(IntervalVector.empty(2))
265
+ x2 = IntervalVector([[1,1],[3,3]])
266
+
267
+ self.assertTrue(not x1.is_superset(x2))
268
+ self.assertTrue(not x2.is_subset(x1))
269
+ self.assertTrue(not x1.is_strict_superset(x2))
270
+ self.assertTrue(not x2.is_strict_interior_subset(x1))
271
+
272
+ x1 = IntervalVector([[0,2],[2,4]])
273
+ x2 = IntervalVector([[1,1],[3,5]])
274
+
275
+ self.assertTrue(not x1.is_superset(x2))
276
+ self.assertTrue(not x2.is_subset(x1))
277
+ self.assertTrue(not x1.is_strict_superset(x2))
278
+ self.assertTrue(not x2.is_strict_interior_subset(x1))
279
+
280
+ x1 = IntervalVector([[0,2],[0,1],[0,3]])
281
+ self.assertTrue(x1.extr_diam_index(True) == 1)
282
+ self.assertTrue(x1.extr_diam_index(False) == 2)
283
+ self.assertTrue(x1.min_diam() == 1)
284
+ self.assertTrue(x1.max_diam() == 3)
285
+
286
+ x1 = IntervalVector([[0,1],[0,3],[0,2]])
287
+ self.assertTrue(x1.extr_diam_index(True) == 0)
288
+ self.assertTrue(x1.extr_diam_index(False) == 1)
289
+ self.assertTrue(x1.min_diam() == 1)
290
+ self.assertTrue(x1.max_diam() == 3)
291
+
292
+ x1 = IntervalVector([[0,3],[0,2],[0,1]])
293
+ self.assertTrue(x1.extr_diam_index(True) == 2)
294
+ self.assertTrue(x1.extr_diam_index(False) == 0)
295
+ self.assertTrue(x1.min_diam() == 1)
296
+ self.assertTrue(x1.max_diam() == 3)
297
+
298
+ x1 = IntervalVector([[0,1],[0,2],[-oo,0]])
299
+ self.assertTrue(x1.extr_diam_index(True) == 0)
300
+ self.assertTrue(x1.extr_diam_index(False) == 2)
301
+ self.assertTrue(x1.min_diam() == 1)
302
+ self.assertTrue(x1.max_diam() == oo)
303
+
304
+ x1 = IntervalVector([[-oo,0]])
305
+ self.assertTrue(x1.extr_diam_index(True) == 0)
306
+ self.assertTrue(x1.extr_diam_index(False) == 0)
307
+ self.assertTrue(x1.min_diam() == oo)
308
+ self.assertTrue(x1.max_diam() == oo)
309
+
310
+ x1 = IntervalVector([[-oo,0],[0,1],[-oo,1],[1,3]])
311
+ self.assertTrue(x1.extr_diam_index(True) == 1)
312
+ self.assertTrue(x1.extr_diam_index(False) == 2)
313
+ self.assertTrue(x1.min_diam() == 1)
314
+ self.assertTrue(x1.max_diam() == oo)
315
+
316
+ x1 = IntervalVector([[-oo,0],[-2,oo],[-oo,1]])
317
+ self.assertTrue(x1.extr_diam_index(True) == 0)
318
+ self.assertTrue(x1.extr_diam_index(False) == 1)
319
+ self.assertTrue(x1.min_diam() == oo)
320
+ self.assertTrue(x1.max_diam() == oo)
321
+
322
+ x1 = IntervalVector([[-oo,0],[-oo,1],[-2,oo]])
323
+ self.assertTrue(x1.extr_diam_index(True) == 0)
324
+ self.assertTrue(x1.extr_diam_index(False) == 2)
325
+ self.assertTrue(x1.min_diam() == oo)
326
+ self.assertTrue(x1.max_diam() == oo)
327
+
328
+ x1 = IntervalVector([[-2,oo],[-oo,0],[-oo,1]])
329
+ self.assertTrue(x1.extr_diam_index(True) == 1)
330
+ self.assertTrue(x1.extr_diam_index(False) == 0)
331
+ self.assertTrue(x1.min_diam() == oo)
332
+ self.assertTrue(x1.max_diam() == oo)
333
+
334
+ x1 = IntervalVector([[-2,oo],[-oo,1],[-oo,0]])
335
+ self.assertTrue(x1.extr_diam_index(True) == 2)
336
+ self.assertTrue(x1.extr_diam_index(False) == 0)
337
+ self.assertTrue(x1.min_diam() == oo)
338
+ self.assertTrue(x1.max_diam() == oo)
339
+
340
+ self.assertTrue(IntervalVector([[0,1],[0,oo]]).volume() == oo)
341
+ self.assertTrue(IntervalVector([[0,1],[1,1]]).volume() == 0)
342
+ self.assertTrue(Approx(Interval(24.0),1e-10) == IntervalVector([[0,2],[2,5],[4,8]]).volume())
343
+ self.assertTrue((-IntervalVector([[0,3],[0,2],[0,1]])) == IntervalVector([[-3,0],[-2,0],[-1,0]]))
344
+
345
+ self.assertTrue(-IntervalVector([[0,1],[0,oo]]) == IntervalVector([[-1,0],[-oo,0]]))
346
+ self.assertTrue(-IntervalVector.empty(2) == IntervalVector.empty(2))
347
+
348
+ x1 = IntervalVector([[0,3],[0,2],[0,1]])
349
+ x2 = IntervalVector([[0,1],[0,1],[0,1]])
350
+ x3 = IntervalVector([[0,4],[0,3],[0,2]])
351
+ e = IntervalVector.empty(3)
352
+
353
+ self.assertTrue(x1+x2 == x3)
354
+ self.assertTrue(x1+e == e)
355
+ self.assertTrue((x1+e).is_empty())
356
+ x1_ = IntervalVector(x1) ; x1_ += e
357
+ self.assertTrue(x1_ == e)
358
+ self.assertTrue(x1_.is_empty())
359
+ self.assertTrue(e+x1 == e)
360
+ self.assertTrue((e+x1).is_empty())
361
+ e_ = IntervalVector(e) ; e_ += x1
362
+ self.assertTrue(e_ == e)
363
+ self.assertTrue(e_.is_empty())
364
+ self.assertTrue(e+e == e)
365
+ self.assertTrue((e+e).is_empty())
366
+ e_ = IntervalVector(e) ; e_ += e
367
+ self.assertTrue(e_ == e)
368
+ self.assertTrue(e_.is_empty())
369
+ x1_ = IntervalVector(x1) ; x1_ += x2
370
+ self.assertTrue(x1_ == x3)
371
+ x1_ = IntervalVector(x1) ; x1_ += e
372
+ self.assertTrue(x1_ == e)
373
+ x1_ = IntervalVector(x1) ; x1_ += e
374
+ self.assertTrue(x1_.is_empty())
375
+ x2_ = IntervalVector(x2) ; x2_ += x1
376
+ self.assertTrue(x2_ == x3)
377
+
378
+ x1 = IntervalVector([[0,3],[0,2],[0,1]])
379
+ x2 = IntervalVector([[0,1],[0,1],[0,1]])
380
+ x3 = IntervalVector([[-1,3],[-1,2],[-1,1]])
381
+ e = IntervalVector.empty(3)
382
+
383
+ self.assertTrue(x1-x2 == x3)
384
+ self.assertTrue(x2-x1 == -x3)
385
+ self.assertTrue(x1-e == e)
386
+ self.assertTrue((x1-e).is_empty())
387
+ x1_ = IntervalVector(x1) ; x1_ -= e
388
+ self.assertTrue(x1_ == e)
389
+ self.assertTrue(x1_.is_empty())
390
+ self.assertTrue(e-x1 == e)
391
+ self.assertTrue((e-x1).is_empty())
392
+ e_ = IntervalVector(e) ; e_ -= x1
393
+ self.assertTrue(e_ == e)
394
+ self.assertTrue(e_.is_empty())
395
+ self.assertTrue(e-e == e)
396
+ self.assertTrue((e-e).is_empty())
397
+ e_ = IntervalVector(e) ; e_ -= e
398
+ self.assertTrue(e_ == e)
399
+ self.assertTrue(e_.is_empty())
400
+ x1_ = IntervalVector(x1) ; x1_ -= x2
401
+ self.assertTrue(x1_ == x3)
402
+ x2_ = IntervalVector(x2) ; x2_ -= x1
403
+ self.assertTrue(x2_ == -x3)
404
+
405
+ b = IntervalVector([[0,1],[0,1]])
406
+ c = b.complementary()
407
+
408
+ self.assertTrue(len(c) == 4)
409
+ self.assertTrue(c[0].size() == 2)
410
+
411
+ self.assertTrue(c[0][0] == Interval(-oo,0))
412
+ self.assertTrue(c[0][1] == Interval(-oo,oo))
413
+
414
+ self.assertTrue(c[1][0] == Interval(1,oo))
415
+ self.assertTrue(c[1][1] == Interval(-oo,oo))
416
+
417
+ self.assertTrue(c[2][0] == Interval(0,1))
418
+ self.assertTrue(c[2][1] == Interval(-oo,0))
419
+
420
+ self.assertTrue(c[3][0] == Interval(0,1))
421
+ self.assertTrue(c[3][1] == Interval(1,oo))
422
+
423
+ c = IntervalVector.empty(2).complementary()
424
+ self.assertTrue(len(c) == 1)
425
+ self.assertTrue(c[0].size() == 2)
426
+ self.assertTrue(c[0][0] == Interval(-oo,oo))
427
+ self.assertTrue(c[0][1] == Interval(-oo,oo))
428
+
429
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], IntervalVector.empty(3), True,
430
+ [[[-2,2],[-2,2],[-2,2]]]
431
+ )
432
+
433
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], IntervalVector.empty(3), True,
434
+ [[[-2,2],[-2,2],[-2,2]]]
435
+ )
436
+
437
+ self.assertTrue(IntervalVector.empty(3) == IntervalVector([Interval.empty(),Interval.empty(),Interval.empty()]))
438
+
439
+ self.CHECK_diff(IntervalVector.empty(3), [[-2,2],[-2,2],[-2,2]], True,
440
+ [[Interval.empty(),Interval.empty(),Interval.empty()]]
441
+ )
442
+
443
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[3,4],[-1,1]], True,
444
+ [[[-2,2],[-2,2],[-2,2]]]
445
+ )
446
+
447
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-1,-1],[-1,1]], True,
448
+ [[[-2,2],[-2,2],[-2,2]]]
449
+ )
450
+
451
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-1,1],[-1,1]], True,
452
+ [[[-2,-1],[-2,2],[-2,2]],
453
+ [[1,2],[-2,2],[-2,2]],
454
+ [[-1,1],[-2,-1],[-2,2]],
455
+ [[-1,1],[1,2],[-2,2]],
456
+ [[-1,1],[-1,1],[-2,-1]],
457
+ [[-1,1],[-1,1],[1,2]]]
458
+ )
459
+
460
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-1,1],[-2,1]], True,
461
+ [[[-2,-1],[-2,2],[-2,2]],
462
+ [[1,2],[-2,2],[-2,2]],
463
+ [[-1,1],[-2,-1],[-2,2]],
464
+ [[-1,1],[1,2],[-2,2]],
465
+ [[-1,1],[-1,1],[1,2]]]
466
+ )
467
+
468
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-1,1],[-2,2]], True,
469
+ [[[-2,-1],[-2,2],[-2,2]],
470
+ [[1,2],[-2,2],[-2,2]],
471
+ [[-1,1],[-2,-1],[-2,2]],
472
+ [[-1,1],[1,2],[-2,2]]]
473
+ )
474
+
475
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-2,1],[-1,1]], True,
476
+ [[[-2,-1],[-2,2],[-2,2]],
477
+ [[1,2],[-2,2],[-2,2]],
478
+ [[-1,1],[1,2],[-2,2]],
479
+ [[-1,1],[-2,1],[-2,-1]],
480
+ [[-1,1],[-2,1],[1,2]]]
481
+ )
482
+
483
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-2,2],[-1,1]], True,
484
+ [[[-2,-1],[-2,2],[-2,2]],
485
+ [[1,2],[-2,2],[-2,2]],
486
+ [[-1,1],[-2,2],[-2,-1]],
487
+ [[-1,1],[-2,2],[1,2]]]
488
+ )
489
+
490
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-1,1],[-1,1]], True,
491
+ [[[1,2],[-2,2],[-2,2]],
492
+ [[-2,1],[-2,-1],[-2,2]],
493
+ [[-2,1],[1,2],[-2,2]],
494
+ [[-2,1],[-1,1],[-2,-1]],
495
+ [[-2,1],[-1,1],[1,2]]]
496
+ )
497
+
498
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,2],[-1,2],[-1,1]], True,
499
+ [[[-2,2],[-2,-1],[-2,2]],
500
+ [[-2,2],[-1,2],[-2,-1]],
501
+ [[-2,2],[-1,2],[1,2]]]
502
+ )
503
+
504
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-2,1],[-2,1]], True,
505
+ [[[-2,-1],[-2,2],[-2,2]],
506
+ [[1,2],[-2,2],[-2,2]],
507
+ [[-1,1],[1,2],[-2,2]],
508
+ [[-1,1],[-2,1],[1,2]]]
509
+ )
510
+
511
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-1,1],[-2,1],[-2,2]], True,
512
+ [[[-2,-1],[-2,2],[-2,2]],
513
+ [[1,2],[-2,2],[-2,2]],
514
+ [[-1,1],[1,2],[-2,2]]]
515
+ )
516
+
517
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-1,1],[-2,1]], True,
518
+ [[[1,2],[-2,2],[-2,2]],
519
+ [[-2,1],[-2,-1],[-2,2]],
520
+ [[-2,1],[1,2],[-2,2]],
521
+ [[-2,1],[-1,1],[1,2]]]
522
+ )
523
+
524
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-1,1],[-2,2]], True,
525
+ [[[1,2],[-2,2],[-2,2]],
526
+ [[-2,1],[-2,-1],[-2,2]],
527
+ [[-2,1],[1,2],[-2,2]]]
528
+ )
529
+
530
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-2,1],[-1,1]], True,
531
+ [[[1,2],[-2,2],[-2,2]],
532
+ [[-2,1],[1,2],[-2,2]],
533
+ [[-2,1],[-2,1],[-2,-1]],
534
+ [[-2,1],[-2,1],[1,2]]]
535
+ )
536
+
537
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-2,2],[-1,1]], True,
538
+ [[[1,2],[-2,2],[-2,2]],
539
+ [[-2,1],[-2,2],[-2,-1]],
540
+ [[-2,1],[-2,2],[1,2]]]
541
+ )
542
+
543
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-2,1],[-2,1]], True,
544
+ [[[1,2],[-2,2],[-2,2]],
545
+ [[-2,1],[1,2],[-2,2]],
546
+ [[-2,1],[-2,1],[1,2]]]
547
+ )
548
+
549
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-2,1],[-2,2]], True,
550
+ [[[1,2],[-2,2],[-2,2]],
551
+ [[-2,1],[1,2],[-2,2]]]
552
+ )
553
+
554
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-2,2],[-2,1]], True,
555
+ [[[1,2],[-2,2],[-2,2]],
556
+ [[-2,1],[-2,2],[1,2]]]
557
+ )
558
+
559
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,2],[-2,1],[-2,1]], True,
560
+ [[[-2,2],[1,2],[-2,2]],
561
+ [[-2,2],[-2,1],[1,2]]]
562
+ )
563
+
564
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,1],[-2,2],[-2,2]], True,
565
+ [[[1,2],[-2,2],[-2,2]]]
566
+ )
567
+
568
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,2],[-2,2],[-2,1]], True,
569
+ [[[-2,2],[-2,2],[1,2]]]
570
+ )
571
+
572
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,2],[-2,1],[-2,2]], True,
573
+ [[[-2,2],[1,2],[-2,2]]]
574
+ )
575
+
576
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[-2,2],[-2,2],[-2,2]], True,
577
+ [[Interval.empty(),Interval.empty(),Interval.empty()]]
578
+ )
579
+
580
+ self.CHECK_diff([[0,0],[-2,2],[-2,2]], [[0,0],[-1,1],[-1,1]], True,
581
+ [[[0,0],[-2,-1],[-2,2]],
582
+ [[0,0],[1,2],[-2,2]],
583
+ [[0,0],[-1,1],[-2,-1]],
584
+ [[0,0],[-1,1],[1,2]]]
585
+ )
586
+
587
+ self.CHECK_diff([[0,0],[0,0],[-2,2]], [[0,0],[0,0],[-1,1]], True,
588
+ [[[0,0],[0,0],[-2,-1]],
589
+ [[0,0],[0,0],[1,2]]]
590
+ )
591
+
592
+ self.CHECK_diff([[0,0],[-2,2],[0,0]], [[0,0],[-1,1],[0,0]], True,
593
+ [[[0,0],[-2,-1],[0,0]],
594
+ [[0,0],[1,2],[0,0]]]
595
+ )
596
+
597
+ self.CHECK_diff([[-2,2],[0,0],[0,0]], [[-1,1],[0,0],[0,0]], True,
598
+ [[[-2,-1],[0,0],[0,0]],
599
+ [[1,2],[0,0],[0,0]]]
600
+ )
601
+
602
+ self.CHECK_diff([[0,0],[-2,2],[-2,2]], [[-1,1],[-1,1],[-1,1]], True,
603
+ [[[0,0],[-2,-1],[-2,2]],
604
+ [[0,0],[1,2],[-2,2]],
605
+ [[0,0],[-1,1],[-2,-1]],
606
+ [[0,0],[-1,1],[1,2]]]
607
+ )
608
+
609
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[2,4],[-2,2],[-2,2]], True,
610
+ [[[-2,2],[-2,2],[-2,2]]]
611
+ )
612
+
613
+ self.CHECK_diff([[-2,2],[-2,2],[-2,2]], [[2,4],[-1,1],[-1,1]], True,
614
+ [[[-2,2],[-2,2],[-2,2]]]
615
+ )
616
+
617
+ self.CHECK_diff([[-2,2],[-2,2]], [[-2,2],[1,1]], False,
618
+ [[[-2,2],[-2,1]],
619
+ [[-2,2],[1,2]]]
620
+ )
621
+
622
+ self.CHECK_diff([[-2,2],[1,1]], [[0,2],[-2,2]], False,
623
+ [[[-2,0],[1,1]]]
624
+ )
625
+
626
+ self.CHECK_diff([[-1,-1],[-1,1],[-1,1]], [[0,2],[0,2],[0,2]], True,
627
+ [[[-1,-1],[-1,1],[-1,1]]]
628
+ )
629
+
630
+ a = IntervalVector([Interval.empty(),[-1,1]])
631
+ b = IntervalVector([[-1,1],Interval.empty()])
632
+ c = a | b
633
+ self.assertTrue(c.is_empty())
634
+
635
+
636
+ def test_intervalvector_specific_to_python(self):
637
+
638
+ x = IntervalVector([[1,2],[2,3],[3,4]])
639
+ y = IntervalVector(3)
640
+
641
+ i = 0
642
+ for xi in x: # using __iter__
643
+ y[i] = xi
644
+ i = i+1
645
+
646
+ self.assertTrue(x == y)
647
+
648
+ a,b,c = x # using __iter__
649
+ self.assertTrue(a == x[0])
650
+ self.assertTrue(b == x[1])
651
+ self.assertTrue(c == x[2])
652
+
653
+ v = IntervalVector([*x, [3,6]]) # using __iter__
654
+ self.assertTrue(v == [[1,2],[2,3],[3,4],[3,6]])
655
+
656
+ if __name__ == '__main__':
657
+ unittest.main()