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,84 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Damien Massé
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+
11
+ import unittest
12
+ from codac import *
13
+
14
+ class TestIntvFullPivLU(unittest.TestCase):
15
+
16
+
17
+ # bindings not implemented
18
+ def test_IntvFullPivLU_1(self):
19
+ M = Matrix([
20
+ [ 1, -4, 3, 7 ],
21
+ [ 2, 1, -4, 6 ],
22
+ [ 5, 2, 1 , 9 ],
23
+ [ -1, 0, 3, 2 ]
24
+ ])
25
+
26
+ LUdec = IntvFullPivLU(M)
27
+ self.assertTrue(LUdec.is_injective()==BoolInterval.TRUE)
28
+ self.assertTrue(LUdec.is_surjective()==BoolInterval.TRUE)
29
+ self.assertTrue(LUdec.rank()==Interval(4))
30
+ self.assertTrue((LUdec.determinant()+602).mag()<=1e-10)
31
+ self.assertTrue((LUdec.reconstructed_matrix()-M).norm().ub()<=1e-10)
32
+ I1 = LUdec.solve(IntervalMatrix.eye(4,4));
33
+ self.assertTrue((I1*M-Matrix.eye(4,4)).norm().ub()<1e-10)
34
+
35
+ def test_IntvFullPivLU_2(self):
36
+ M = Matrix([
37
+ [ 1, -4, 6, 7 ],
38
+ [ 2, 1, 3, 6 ],
39
+ [ 5, 2, 8 , 9 ],
40
+ [ -1, 0, -2, 2 ]
41
+ ])
42
+
43
+ LUdec = IntvFullPivLU(M)
44
+ self.assertTrue(LUdec.is_injective()==BoolInterval.UNKNOWN)
45
+ self.assertTrue(LUdec.is_surjective()==BoolInterval.UNKNOWN)
46
+ self.assertTrue(LUdec.rank()==Interval([3,4]))
47
+ self.assertTrue((LUdec.determinant()).mag()<=1e-10)
48
+ self.assertTrue((LUdec.reconstructed_matrix()-M).norm().ub()<=1e-10)
49
+ K = LUdec.kernel()
50
+ self.assertTrue(K.cols()==1)
51
+ self.assertTrue((M*K).norm().ub()<1e-10)
52
+ coK = LUdec.cokernel()
53
+ self.assertTrue(coK.rows()==1)
54
+ self.assertTrue((coK*M).norm().ub()<1e-10)
55
+ Im = LUdec.image(M)
56
+ self.assertTrue(Im.cols()==3)
57
+ coIm = LUdec.coimage(M)
58
+ self.assertTrue(coIm.rows()==3)
59
+
60
+ def test_IntvFullPivLU_3(self):
61
+ M = Matrix([
62
+ [ 1, -4, 6, 7, 6 ],
63
+ [ 2, 1, 3, 6, -2 ],
64
+ [ 5, 2, 8 , 9, -1 ]
65
+ ])
66
+ LUdec = IntvFullPivLU(M)
67
+ self.assertTrue(LUdec.is_injective()==BoolInterval.FALSE)
68
+ self.assertTrue(LUdec.is_surjective()==BoolInterval.TRUE)
69
+ self.assertTrue(LUdec.rank()==Interval(3))
70
+ self.assertTrue((LUdec.reconstructed_matrix()-M).norm().ub()<=1e-10)
71
+ K = LUdec.kernel()
72
+ self.assertTrue(K.cols()==2)
73
+ self.assertTrue((M*K).norm().ub()<1e-10)
74
+ Im = LUdec.image(M)
75
+ self.assertTrue(Im.cols()==3)
76
+ I1 = LUdec.solve(IntervalMatrix.eye(3,3));
77
+ self.assertTrue((M*I1-Matrix.eye(3,3)).norm().ub()<1e-10)
78
+ A = IntervalMatrix([ [1], [[-20,20]], [2], [[-20,20]], [[-20,20]] ])
79
+ B = IntervalMatrix([ [2.0], [1.0], [4.0] ])
80
+ LUdec.solve(B,A)
81
+ self.assertTrue((M*A-B).norm().ub()<=1e-10)
82
+
83
+ if __name__ == '__main__':
84
+ unittest.main()
@@ -0,0 +1,254 @@
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 TestInterval(unittest.TestCase):
21
+
22
+ def test_interval(self):
23
+
24
+ self.assertTrue(Interval() == Interval(-oo,oo))
25
+ self.assertTrue(Interval(1.0) == Interval(1.0,1.0))
26
+ self.assertTrue(Interval(-oo) == Interval.empty())
27
+ self.assertTrue(Interval(oo) == Interval.empty())
28
+ self.assertTrue(Interval(1,0) == Interval.empty())
29
+
30
+ self.assertTrue(Interval(-oo,oo) == Interval(-oo,oo))
31
+ self.assertTrue(Interval(-oo,oo) != Interval(0,oo))
32
+ self.assertTrue(Interval(0,1) == Interval(0,1))
33
+ self.assertTrue(Interval(0,2) != Interval(0,1))
34
+ self.assertTrue(Interval(0,2) != Interval(1,3))
35
+ self.assertTrue(Interval(0,oo) == Interval(0,oo))
36
+ self.assertTrue(Interval.empty() == Interval.empty())
37
+ self.assertTrue(Interval(0,0) == Interval(0,0))
38
+
39
+ self.assertTrue(Interval([1.]) == Interval(1.));
40
+ self.assertTrue(Interval([2,3]) == Interval(2,3));
41
+ self.assertTrue(Interval([3,2]) == Interval.empty());
42
+ self.assertTrue(Interval([-oo]) == Interval.empty());
43
+ self.assertTrue(Interval([oo]) == Interval.empty());
44
+ self.assertTrue(Interval([oo,0]) == Interval.empty());
45
+ self.assertTrue(Interval([-oo,oo]) == Interval(-oo,oo));
46
+ self.assertTrue(Interval([oo,-oo]) == Interval.empty());
47
+
48
+ x = Interval() ; y = Interval() ; z = Interval()
49
+
50
+ x = Interval(0,1); x.set_empty()
51
+ self.assertTrue(x == Interval.empty())
52
+ self.assertTrue(x.is_empty())
53
+
54
+ x = Interval(Interval.empty()); x.set_empty()
55
+ self.assertTrue(x == Interval.empty())
56
+
57
+ x = Interval(0,1); y = Interval(2,3); z = Interval(0,3)
58
+ self.assertTrue((x|y) == z); self.assertTrue((y|x) == z)
59
+ x_ = x; x_|=y; self.assertTrue(x_ == z); y_ = y; y_|=x; self.assertTrue(y_ == z)
60
+
61
+ x = Interval(0,1); y = Interval.empty(); z = Interval(0,1)
62
+ self.assertTrue((x|y) == z); self.assertTrue((y|x) == z)
63
+ x_ = x; x_|=y; self.assertTrue(x_ == z); y_ = y; y_|=x; self.assertTrue(y_ == z)
64
+
65
+ x = Interval(-1); y = Interval(0,oo); z = Interval(-1,oo)
66
+ self.assertTrue((x|y) == z); self.assertTrue((y|x) == z)
67
+ x_ = x; x_|=y; self.assertTrue(x_ == z); y_ = y; y_|=x; self.assertTrue(y_ == z)
68
+
69
+ x = Interval(0,1); y = Interval(2,3); z = Interval.empty()
70
+ self.assertTrue((x&y) == z); self.assertTrue((y&x) == z)
71
+ x_ = x; x_&=y; self.assertTrue(x_ == z); y_ = y; y_&=x; self.assertTrue(y_ == z)
72
+
73
+ x = Interval(0,1); y = Interval.empty(); z = Interval.empty()
74
+ self.assertTrue((x&y) == z); self.assertTrue((y&x) == z)
75
+ x_ = x; x_&=y; self.assertTrue(x_ == z); y_ = y; y_&=x; self.assertTrue(y_ == z)
76
+
77
+ x = Interval(0,2); y = Interval(-1,1); z = Interval(0,1)
78
+ self.assertTrue((x&y) == z); self.assertTrue((y&x) == z)
79
+ x_ = x; x_&=y; self.assertTrue(x_ == z); y_ = y; y_&=x; self.assertTrue(y_ == z)
80
+
81
+ x = Interval(0,1); y = Interval(0,oo); z = Interval(0,1)
82
+ self.assertTrue((x&y) == z); self.assertTrue((y&x) == z)
83
+ x_ = x; x_&=y; self.assertTrue(x_ == z); y_ = y; y_&=x; self.assertTrue(y_ == z)
84
+
85
+ x = Interval(0,1); y = Interval(-oo,0); z = Interval(0)
86
+ self.assertTrue((x&y) == z); self.assertTrue((y&x) == z)
87
+ x_ = x; x_&=y; self.assertTrue(x_ == z); y_ = y; y_&=x; self.assertTrue(y_ == z)
88
+
89
+ x = Interval(0,1); y = Interval(1,2); z = Interval(1,1)
90
+ self.assertTrue((x&y) == z); self.assertTrue((y&x) == z)
91
+ x_ = x; x_&=y; self.assertTrue(x_ == z); y_ = y; y_&=x; self.assertTrue(y_ == z)
92
+
93
+ x = Interval(0,2)
94
+
95
+ self.assertTrue(x.lb() == 0)
96
+ self.assertTrue(x.ub() == 2)
97
+ self.assertTrue(x.mid() == 1)
98
+ self.assertTrue(x.rad() == 1)
99
+ self.assertTrue(x.diam() == 2)
100
+ self.assertTrue(x.mag() == 2)
101
+ self.assertTrue(x.mig() == 0)
102
+ self.assertTrue(x.smag() == 2)
103
+ self.assertTrue(x.smig() == 0)
104
+
105
+ x = Interval(-3,-1)
106
+
107
+ self.assertTrue(x.lb() == -3)
108
+ self.assertTrue(x.ub() == -1)
109
+ self.assertTrue(x.mid() == -2)
110
+ self.assertTrue(x.rad() == 1)
111
+ self.assertTrue(x.diam() == 2)
112
+ self.assertTrue(x.mag() == 3)
113
+ self.assertTrue(x.mig() == 1)
114
+ self.assertTrue(x.smag() == -3)
115
+ self.assertTrue(x.smig() == -1)
116
+
117
+ x = Interval(-3,1)
118
+
119
+ self.assertTrue(x.lb() == -3)
120
+ self.assertTrue(x.ub() == 1)
121
+ self.assertTrue(x.mid() == -1)
122
+ self.assertTrue(x.rad() == 2)
123
+ self.assertTrue(x.diam() == 4)
124
+ self.assertTrue(x.mag() == 3)
125
+ self.assertTrue(x.mig() == 0)
126
+ self.assertTrue(x.smag() == -3)
127
+ self.assertTrue(x.smig() == 0)
128
+
129
+ x = Interval(-oo,0)
130
+
131
+ self.assertTrue(x.lb() == -oo)
132
+ self.assertTrue(x.ub() == 0)
133
+ self.assertTrue(x.mid() == -sys.float_info.max)
134
+ self.assertTrue(x.rad() == oo)
135
+ self.assertTrue(x.diam() == oo)
136
+ self.assertTrue(x.mag() == oo)
137
+ self.assertTrue(x.mig() == 0)
138
+ self.assertTrue(x.smag() == -oo)
139
+ self.assertTrue(x.smig() == 0)
140
+
141
+ x = Interval(-oo,oo)
142
+
143
+ self.assertTrue(x.lb() == -oo)
144
+ self.assertTrue(x.ub() == oo)
145
+ self.assertTrue(x.mid() == 0)
146
+ self.assertTrue(x.rad() == oo)
147
+ self.assertTrue(x.diam() == oo)
148
+ self.assertTrue(x.mag() == oo)
149
+ self.assertTrue(x.mig() == 0)
150
+ self.assertTrue(x.smag() == oo)
151
+ self.assertTrue(x.smig() == 0)
152
+
153
+ x = Interval(sys.float_info.max,oo)
154
+
155
+ self.assertTrue(x.lb() == sys.float_info.max)
156
+ self.assertTrue(x.ub() == oo)
157
+ self.assertTrue(x.mid() == sys.float_info.max)
158
+ self.assertTrue(x.rad() == oo)
159
+ self.assertTrue(x.diam() == oo)
160
+ self.assertTrue(x.mag() == oo)
161
+ self.assertTrue(x.mig() == sys.float_info.max)
162
+ self.assertTrue(x.smag() == oo)
163
+ self.assertTrue(x.smig() == sys.float_info.max)
164
+
165
+ x = Interval(-1,1)
166
+ for i in range(10):
167
+ self.assertTrue(x.contains(x.rand()))
168
+ x = Interval(-oo,0)
169
+ for i in range(10):
170
+ self.assertTrue(x.contains(x.rand()))
171
+ x = Interval(0,oo)
172
+ for i in range(10):
173
+ self.assertTrue(x.contains(x.rand()))
174
+ x = Interval(-oo,oo)
175
+ for i in range(10):
176
+ self.assertTrue(x.contains(x.rand()))
177
+ x = Interval.empty()
178
+ self.assertTrue(math.isnan(x.rand()))
179
+
180
+ self.assertTrue(Interval(0,1).is_subset(Interval(0,2)))
181
+ self.assertTrue(not Interval(0,1).is_subset(Interval(1,2)))
182
+ self.assertTrue(not Interval(0,1).is_strict_interior_subset(Interval(0,2)))
183
+ self.assertTrue(Interval(-oo,0).is_strict_interior_subset(Interval(-oo,oo)))
184
+ self.assertTrue(Interval.empty().is_strict_interior_subset(Interval(0,1)))
185
+ self.assertTrue(Interval(0,2).is_superset(Interval(0,1)))
186
+ self.assertTrue(not Interval(1,2).is_superset(Interval(0,1)))
187
+ self.assertTrue(not Interval(0,2).is_strict_superset(Interval(0,2)))
188
+ self.assertTrue(Interval(-oo,oo).is_strict_superset(Interval(-oo,0)))
189
+ self.assertTrue(not Interval.empty().is_strict_superset(Interval.empty()))
190
+ self.assertTrue(Interval(0,2).contains(0))
191
+ self.assertTrue(Interval(-oo,oo).contains(oo))
192
+ self.assertTrue(not Interval(0,2).interior_contains(0))
193
+ self.assertTrue(Interval(0,2).interior_contains(1))
194
+ self.assertTrue(not Interval(-oo,0).is_disjoint(Interval(0,oo)))
195
+ self.assertTrue(Interval(0,1).is_disjoint(Interval(2,3)))
196
+ self.assertTrue(Interval(oo).is_empty())
197
+ self.assertTrue(not Interval(0,1).is_empty())
198
+ self.assertTrue(Interval(0).is_degenerated())
199
+ self.assertTrue(Interval.empty().is_degenerated())
200
+ self.assertTrue(not Interval.empty().is_unbounded())
201
+ self.assertTrue(not Interval(0,1).is_unbounded())
202
+ self.assertTrue(Interval(-oo,0).is_unbounded())
203
+ self.assertTrue(Interval(0,oo).is_unbounded())
204
+ self.assertTrue(not Interval.empty().is_bisectable())
205
+ self.assertTrue(not Interval(sys.float_info.max,oo).is_bisectable())
206
+ self.assertTrue(not Interval(-oo,-sys.float_info.max).is_bisectable())
207
+ self.assertTrue(not Interval(0,next_float(0)).is_bisectable())
208
+ self.assertTrue(Interval(0,next_float(next_float(0))).is_bisectable())
209
+ self.assertTrue(Interval(10,next_float(next_float(10))).is_bisectable())
210
+ self.assertTrue(Interval(prev_float(prev_float(0)),0).is_bisectable())
211
+ self.assertTrue(Interval(prev_float(prev_float(10)),10).is_bisectable())
212
+ self.assertTrue(not Interval(10,next_float(10)).is_bisectable())
213
+ self.assertTrue(not Interval(prev_float(0),0).is_bisectable())
214
+
215
+ self.assertTrue(Interval(0,2).mid() == 1.0)
216
+ self.assertTrue(Interval(-oo,oo).mid() == 0)
217
+ self.assertTrue(Interval(0,oo).mid() == sys.float_info.max)
218
+ self.assertTrue(Interval(-oo,0).mid() == -sys.float_info.max)
219
+ d = Interval(sys.float_info.max,oo).mid()
220
+ self.assertTrue((d == sys.float_info.max) or (d == -sys.float_info.max))
221
+ self.assertTrue(Interval(0).mid() == 0.0)
222
+
223
+ x = Interval(2.7629416257693772963,2.7629416257693835135)
224
+ y = x
225
+ m = x.mid()
226
+ x2 = x+m
227
+ x3 = x2-m
228
+ self.assertTrue(x3.is_superset(y))
229
+
230
+ self.assertTrue(Interval(0).diff(Interval(0)) == [])
231
+ self.assertTrue(Interval(0,0).diff(Interval(1,2)) == [Interval(0)])
232
+ self.assertTrue(Interval(0,0).diff(Interval(0,1)) == [])
233
+ self.assertTrue(Interval(0,0).diff(Interval.empty()) == [Interval(0)])
234
+ self.assertTrue(Interval.empty().diff(Interval(0.)) == [])
235
+ self.assertTrue(Interval(0,1).diff(Interval(0,1)) == [])
236
+ self.assertTrue(Interval(0,1).diff(Interval.empty()) == [Interval(0,1)])
237
+ self.assertTrue(Interval(0,1).diff(Interval(1,2)) == [Interval(0,1)])
238
+ self.assertTrue(Interval(0,1).diff(Interval(-1,1)) == [])
239
+ self.assertTrue(Interval(0,1).diff(Interval(0,0)) == [Interval(0,1)])
240
+ self.assertTrue(Interval(0,1).diff(Interval(1,1)) == [Interval(0,1)])
241
+ self.assertTrue(Interval(0,1).diff(Interval(2,3)) == [Interval(0,1)])
242
+ self.assertTrue(Interval(0,3).diff(Interval(1,2)) == [Interval(0,1),Interval(2,3)]) # order may not be respected
243
+ self.assertTrue(Interval(0,2).diff(Interval(1,4)) == [Interval(0,1)])
244
+ self.assertTrue(Interval(0,2).diff(Interval(-1,1)) == [Interval(1,2)])
245
+ self.assertTrue(Interval(0,2).diff(Interval(1,1), False) == [Interval(0,1),Interval(1,2)]) # order may not be respected
246
+ self.assertTrue(Interval(1,1).diff(Interval(0,2), False) == [])
247
+
248
+ a = Interval(3,8)
249
+ b = Interval(1,3) & Interval(6,7) # [b] is empty
250
+ c = a+b
251
+ self.assertTrue(c.is_empty())
252
+
253
+ if __name__ == '__main__':
254
+ unittest.main()