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,377 @@
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_bwd(unittest.TestCase):
21
+
22
+ def CHECK_bwd_trigo(self, y, x, expected_x):
23
+ _x = Interval()
24
+ _x = x; SinOp.bwd(y,_x); self.assertTrue(Approx(_x, 1e-5) == expected_x)
25
+ _x = -x; SinOp.bwd(-y,_x); self.assertTrue(Approx(_x, 1e-5) == -expected_x)
26
+ _x = x-Interval.half_pi(); CosOp.bwd(y,_x); self.assertTrue(Approx(_x, 1e-5) == expected_x-Interval.half_pi())
27
+ _x = x+Interval.half_pi(); CosOp.bwd(-y,_x); self.assertTrue(Approx(_x, 1e-5) == expected_x+Interval.half_pi())
28
+
29
+ def CHECK_bwd_pow(self, y, x, expected_x, p):
30
+ _x = Interval()
31
+ _x = x; PowOp.bwd(y,_x,p); self.assertTrue(Approx(_x,1e-5) == expected_x)
32
+ _x = -x;
33
+ if p%2 == 0:
34
+ PowOp.bwd(y,_x,p);
35
+ else:
36
+ PowOp.bwd(-y,_x,p);
37
+ self.assertTrue(Approx(_x,1e-5) == -expected_x)
38
+
39
+ def CHECK_bwd_mul(self, y, x1, x2, expected_x1, expected_x2):
40
+ _x1 = Interval(); _x2 = Interval()
41
+
42
+ _x1 = x1; _x2 = x2; MulOp.bwd(y,_x1,_x2)
43
+ self.assertTrue(Approx(_x1) == expected_x1)
44
+ self.assertTrue(Approx(_x2) == expected_x2)
45
+
46
+ _x1 = x1; _x2 = x2; MulOp.bwd(y,_x2,_x1)
47
+ self.assertTrue(Approx(_x1) == expected_x1)
48
+ self.assertTrue(Approx(_x2) == expected_x2)
49
+
50
+ _x1 = -x1; _x2 = x2; MulOp.bwd(-y,_x2,_x1)
51
+ self.assertTrue(Approx(_x1) == -expected_x1)
52
+ self.assertTrue(Approx(_x2) == expected_x2)
53
+
54
+ _x1 = x1; _x2 = -x2; MulOp.bwd(-y,_x2,_x1)
55
+ self.assertTrue(Approx(_x1) == expected_x1)
56
+ self.assertTrue(Approx(_x2) == -expected_x2)
57
+
58
+ def CHECK_bwd_div(self, y, x1, x2, expected_x1, expected_x2):
59
+ _x1 = Interval(); _x2 = Interval()
60
+
61
+ _x1 = x1; _x2 = x2; DivOp.bwd(y,_x1,_x2)
62
+ self.assertTrue(Approx(_x1) == expected_x1)
63
+ self.assertTrue(Approx(_x2) == expected_x2)
64
+
65
+ _x1 = -x1; _x2 = -x2; DivOp.bwd(y,_x1,_x2)
66
+ self.assertTrue(Approx(_x1) == -expected_x1)
67
+ self.assertTrue(Approx(_x2) == -expected_x2)
68
+
69
+ _x1 = -x1; _x2 = x2; DivOp.bwd(-y,_x1,_x2)
70
+ self.assertTrue(Approx(_x1) == -expected_x1)
71
+ self.assertTrue(Approx(_x2) == expected_x2)
72
+
73
+ _x1 = x1; _x2 = -x2; DivOp.bwd(-y,_x1,_x2)
74
+ self.assertTrue(Approx(_x1) == expected_x1)
75
+ self.assertTrue(Approx(_x2) == -expected_x2)
76
+
77
+ def CHECK_bwd_max(self, y, x1, x2, expected_x1, expected_x2):
78
+ _x1 = Interval(); _x2 = Interval()
79
+
80
+ _x1 = x1; _x2 = x2; MaxOp.bwd(y,_x1,_x2)
81
+ self.assertTrue(_x1 == expected_x1)
82
+ self.assertTrue(_x2 == expected_x2)
83
+
84
+ _x1 = x1; _x2 = x2; MaxOp.bwd(y,_x2,_x1)
85
+ self.assertTrue(_x1 == expected_x1)
86
+ self.assertTrue(_x2 == expected_x2)
87
+
88
+ _x1 = -x1; _x2 = -x2; MinOp.bwd(-y,_x1,_x2)
89
+ self.assertTrue(_x1 == -expected_x1)
90
+ self.assertTrue(_x2 == -expected_x2)
91
+
92
+ _x1 = -x1; _x2 = -x2; MinOp.bwd(-y,_x2,_x1)
93
+ self.assertTrue(_x1 == -expected_x1)
94
+ self.assertTrue(_x2 == -expected_x2)
95
+
96
+ def CHECK_bwd_atan(self, y, x, expected_x):
97
+ _x = Interval()
98
+
99
+ _x = x; AtanOp.bwd(y,_x)
100
+ self.assertTrue(_x == expected_x)
101
+
102
+ _x = -x; AtanOp.bwd(-y,_x)
103
+ self.assertTrue(_x == -expected_x)
104
+
105
+ def CHECK_bwd_add(self, y, x1, x2, expected_x1, expected_x2):
106
+ _x1 = Interval(); _x2 = Interval()
107
+
108
+ _x1 = x1; _x2 = x2; AddOp.bwd(y,_x1,_x2)
109
+ self.assertTrue(_x1 == expected_x1)
110
+ self.assertTrue(_x2 == expected_x2)
111
+
112
+ _x1 = x1; _x2 = x2; AddOp.bwd(y,_x2,_x1)
113
+ self.assertTrue(_x1 == expected_x1)
114
+ self.assertTrue(_x2 == expected_x2)
115
+
116
+ _x1 = -x1; _x2 = -x2; AddOp.bwd(-y,_x1,_x2)
117
+ self.assertTrue(_x1 == -expected_x1)
118
+ self.assertTrue(_x2 == -expected_x2)
119
+
120
+ _x1 = -x1; _x2 = -x2; AddOp.bwd(-y,_x2,_x1)
121
+ self.assertTrue(_x1 == -expected_x1)
122
+ self.assertTrue(_x2 == -expected_x2)
123
+
124
+ def CHECK_bwd_sub(self, y, x1, x2, expected_x1, expected_x2):
125
+ _x1 = Interval(); _x2 = Interval()
126
+
127
+ _x1 = x1; _x2 = x2; SubOp.bwd(y,_x1,_x2)
128
+ self.assertTrue(_x1 == expected_x1)
129
+ self.assertTrue(_x2 == expected_x2)
130
+
131
+ _x1 = -x1; _x2 = -x2; SubOp.bwd(-y,_x1,_x2)
132
+ self.assertTrue(_x1 == -expected_x1)
133
+ self.assertTrue(_x2 == -expected_x2)
134
+
135
+ _x1 = x1; _x2 = x2; SubOp.bwd(-y,_x2,_x1)
136
+ self.assertTrue(_x1 == expected_x1)
137
+ self.assertTrue(_x2 == expected_x2)
138
+
139
+ _x1 = -x1; _x2 = -x2; SubOp.bwd(y,_x2,_x1)
140
+ self.assertTrue(_x1 == -expected_x1)
141
+ self.assertTrue(_x2 == -expected_x2)
142
+
143
+ def CHECK_bwd_imod(self, p, x1, x2, expected_x1, expected_x2):
144
+ _x1 = Interval(); _x2 = Interval()
145
+ _x1 = x1; _x2 = x2; ModOp.bwd(_x1,_x2,p)
146
+ self.assertTrue(Approx(_x1) == expected_x1)
147
+ self.assertTrue(Approx(_x2) == expected_x2)
148
+
149
+ def test_interval_bwd(self):
150
+
151
+ pi_lb = Interval.pi().lb()
152
+ pi_ub = Interval.pi().ub()
153
+
154
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(0,pi_ub/2.0), Interval(0.5,1.5))
155
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(0,5*pi_ub/2.0), Interval(0.5,2*pi_ub+1.5))
156
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-2*pi_ub,pi_ub/2.0), Interval(-2*pi_ub+0.5,1.5))
157
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-2*pi_ub,5*pi_ub/2.0), Interval(-2*pi_ub+0.5,2*pi_ub+1.5))
158
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-pi_lb-0.4,pi_ub/2.0), Interval(0.5,1.5))
159
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-pi_ub-0.5,pi_ub/2.0), Interval(-pi_ub-0.5,1.5))
160
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-3*pi_ub/2,pi_ub/2.0), Interval(-pi_ub-1.5,1.5))
161
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(0.5,pi_lb-1.6), Interval(0.5,1.5))
162
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(0.5,pi_ub-1.5), Interval(0.5,pi_ub-1.5))
163
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(0.5,pi_ub), Interval(0.5,pi_ub-0.5))
164
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-pi_ub-0.5,pi_ub-1.5), Interval(-pi_ub-0.5,pi_ub-1.5))
165
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-3*pi_ub/2,pi_ub), Interval(-pi_ub-1.5,pi_ub-0.5))
166
+ self.CHECK_bwd_trigo(sin(Interval(0.5,1.5)), Interval(-pi_ub/2,pi_ub/2.0), Interval(0.5,1.5))
167
+ self.CHECK_bwd_trigo(Interval(2,3), Interval(-oo,oo), Interval.empty())
168
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(0,pi_ub/2.0), Interval(0.5,pi_ub/2.0))
169
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(0,5*pi_ub/2.0), Interval(0.5,5*pi_ub/2.0))
170
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(-2*pi_ub,pi_ub/2.0), Interval(-2*pi_ub+0.5,pi_ub/2.0))
171
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(-2*pi_ub,5*pi_ub/2.0), Interval(-2*pi_ub+0.5,5*pi_ub/2.0))
172
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(-pi_lb-0.4,pi_ub/2.0), Interval(0.5,pi_ub/2.0))
173
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(-pi_ub-0.5,pi_ub/2.0), Interval(-pi_ub-0.5,pi_ub/2.0))
174
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(-3*pi_ub/2,pi_ub/2.0), Interval(-3*pi_ub/2,pi_ub/2.0))
175
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(0.5,pi_ub), Interval(0.5,pi_ub-0.5))
176
+ self.CHECK_bwd_trigo(Interval(math.sin(0.5),1.0), Interval(-3*pi_ub/2,pi_ub), Interval(-3*pi_ub/2,pi_ub-0.5))
177
+ self.CHECK_bwd_trigo(Interval(1.0), Interval(4.0,6.0), Interval.empty())
178
+
179
+ x = Interval()
180
+
181
+ x = Interval(0,4); SqrOp.bwd(Interval(1,9),x); self.assertTrue(x == Interval(1,3))
182
+ x = Interval(0,2); SqrOp.bwd(Interval(1,9),x); self.assertTrue(x == Interval(1,2))
183
+ x = Interval(-4,2); SqrOp.bwd(Interval(1,9),x); self.assertTrue(x == Interval(-3,2))
184
+ x = Interval(-4,-3); SqrOp.bwd(Interval(1,9),x); self.assertTrue(x == Interval(-3,-3))
185
+ x = Interval(-4,1); SqrOp.bwd(Interval(-oo,9),x); self.assertTrue(x == Interval(-3,1))
186
+ x = Interval(-1,5); SqrOp.bwd(Interval(4,9),x); self.assertTrue(x == Interval(2,3))
187
+ x = Interval(-oo,oo); SqrOp.bwd(Interval(-4,-2),x); self.assertTrue(x == Interval.empty())
188
+
189
+ x = Interval(-oo,oo); LogOp.bwd(Interval(-oo,oo),x); self.assertTrue(x == Interval(0,oo))
190
+ x = Interval(-oo,oo); LogOp.bwd(Interval(-oo,0),x); self.assertTrue(x == Approx(Interval(0,1)))
191
+ x = Interval(0,1); LogOp.bwd(Interval(0,oo),x); self.assertTrue(x == Approx(Interval(1)))
192
+ x = Interval(-1,3); LogOp.bwd(Interval(0,1),x); self.assertTrue(x == Approx(Interval(1,math.exp(1.))))
193
+ x = Interval(-1,3); LogOp.bwd(Interval(-oo,1),x); self.assertTrue(x == Approx(Interval(0,math.exp(1.))))
194
+ x = Interval(-1,2); LogOp.bwd(Interval(-oo,1),x); self.assertTrue(x == Interval(0,2))
195
+ x = Interval(3,4); LogOp.bwd(Interval(-oo,1),x); self.assertTrue(x == Interval.empty())
196
+ x = Interval(-0.01,0.01); LogOp.bwd(Interval(-1,1),x); self.assertTrue(x == Interval.empty())
197
+
198
+ self.CHECK_bwd_pow(Interval(16,81), Interval(1,4), Interval(2,3), 4)
199
+ self.CHECK_bwd_pow(Interval(16,81), Interval(3,4), Interval(3,3), 4)
200
+ self.CHECK_bwd_pow(Interval(16,81), Interval(-1,4), Interval(2,3), 4)
201
+ self.CHECK_bwd_pow(Interval(16,81), Interval(-2,4), Interval(-2,3), 4)
202
+ self.CHECK_bwd_pow(Interval(16,81), Interval(-5,4), Interval(-3,3), 4)
203
+ self.CHECK_bwd_pow(Interval(16,81), Interval(1,1), Interval.empty(), 4)
204
+ self.CHECK_bwd_pow(Interval(16,81), Interval(4,4), Interval.empty(), 4)
205
+ self.CHECK_bwd_pow(Interval(8,27), Interval(1,4), Interval(2,3), 3)
206
+ self.CHECK_bwd_pow(Interval(8,27), Interval(3,4), Interval(3,3), 3)
207
+ self.CHECK_bwd_pow(Interval(8,27), Interval(-5,4), Interval(2,3), 3)
208
+ self.CHECK_bwd_pow(Interval(-8,27), Interval(-5,4), Interval(-2,3), 3)
209
+ self.CHECK_bwd_pow(Interval(-27,27), Interval(-5,4), Interval(-3,3), 3)
210
+ self.CHECK_bwd_pow(Interval(8,27), Interval(1,1), Interval.empty(), 3)
211
+ self.CHECK_bwd_pow(Interval(8,27), Interval(4,4), Interval.empty(), 3)
212
+ self.CHECK_bwd_pow(Interval(-27,-8), Interval(-1,-1), Interval.empty(), 3)
213
+ self.CHECK_bwd_pow(Interval(-27,-8), Interval(-4,-4), Interval.empty(), 3)
214
+ self.CHECK_bwd_pow(Interval(0,1), Interval(-10,10), Interval(-10,10), -2)
215
+
216
+ self.CHECK_bwd_mul(Interval(1,2),Interval(0.1,2.0),Interval(-10,2),Interval(0.5,2.0),Interval(0.5,2))
217
+ self.CHECK_bwd_mul(Interval.empty(),Interval(0.1,2.0),Interval(-10,2),Interval.empty(),Interval.empty())
218
+ self.CHECK_bwd_mul(Interval(0,0),Interval(0.1,2.0),Interval(-10,2),Interval(0.1,2.0),Interval(0,0))
219
+ self.CHECK_bwd_mul(Interval(0,0),Interval(-1,1),Interval(-1,1),Interval(-1,1),Interval(-1,1))
220
+ self.CHECK_bwd_mul(Interval(1,1),Interval(0,10),Interval(0,10),Interval(0.1,10.0),Interval(0.1,10.0))
221
+
222
+ self.CHECK_bwd_div(Interval(1,2), Interval(0,1), Interval(2,3), Interval.empty(), Interval.empty())
223
+ self.CHECK_bwd_div(Interval(1,2), Interval(0,1), Interval(1,3), 1., 1.)
224
+ self.CHECK_bwd_div(Interval(1,2), Interval(1,3), Interval(0,1), Interval(1,2), Interval(0.5,1))
225
+ self.CHECK_bwd_div(Interval(-1,1), Interval(-2,2), Interval(0,1), Interval(-1,1), Interval(0,1))
226
+ self.CHECK_bwd_div(Interval(-1,1), Interval(-2,2), 0., 0., 0.)
227
+ self.CHECK_bwd_div(0, Interval(-2,2), Interval(-2,2), 0, Interval(-2,2))
228
+ self.CHECK_bwd_div(Interval(0,oo), Interval(0,1), Interval(-1,0), 0, Interval(-1,0))
229
+ self.CHECK_bwd_div(Interval(next_float(0.),oo), Interval(0,1), Interval(-1,0), 0, 0)
230
+ self.CHECK_bwd_div(Interval(0,oo), Interval(next_float(0.),1), Interval(-1,0), Interval.empty(), Interval.empty())
231
+
232
+ self.CHECK_bwd_max(Interval.empty(), Interval(-2,-1), Interval(-2,3), Interval.empty(), Interval.empty())
233
+ self.CHECK_bwd_max(Interval(0,1), Interval(-2,-1), Interval(-2,3), Interval(-2,-1), Interval(0,1))
234
+ self.CHECK_bwd_max(Interval(0,1), Interval(-2,-1), Interval(2,3), Interval.empty(), Interval.empty())
235
+ self.CHECK_bwd_max(Interval(0,1), Interval(-2,0), Interval(-2,3), Interval(-2,0), Interval(-2,1))
236
+ self.CHECK_bwd_max(Interval(0,1), Interval(-2,2), Interval(-2,3), Interval(-2,1), Interval(-2,1))
237
+
238
+ a = Interval(); y = Interval()
239
+
240
+ a = Interval(math.pi/6.,math.pi/3.); y = Interval(.5,10.); x = Interval(.5,2.);
241
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(.5,2.*math.sqrt(3.))); self.assertTrue(Approx(x) == Interval(.5,2.))
242
+ a = Interval(math.pi/6.,math.pi/3.); y = Interval(.5,2.); x = Interval(.5,10.);
243
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(.5,2.)); self.assertTrue(Approx(x) == Interval(.5,2.*math.sqrt(3.)))
244
+ a = Interval(-math.pi/4.,math.pi/4.); y = Interval(1.,2.); x = Interval(.5,2.);
245
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(1.,2.)); self.assertTrue(Approx(x) == Interval(1.,2.))
246
+ a = Interval(-math.pi/2.,0.); y = Interval(.5,2.); x = Interval(.5,10.);
247
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval.empty()); self.assertTrue(Approx(x) == Interval.empty())
248
+ a = Interval(2.*math.pi,3.*math.pi); y = Interval(-.5,2.); x = Interval(.5,10.);
249
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval.empty()); self.assertTrue(Approx(x) == Interval.empty())
250
+ a = Interval(2*math.pi/3.,5.*math.pi/6.); y = Interval(0.,100.); x = Interval(-20.,-math.sqrt(3.)/2.);
251
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y,1e-10) == Interval(.5,20.*math.sqrt(3.))); self.assertTrue(Approx(x) == Interval(-20.,-math.sqrt(3.)/2))
252
+ a = Interval(-3*math.pi/4.,-2*math.pi/3.); y = Interval(-math.sqrt(3.)/2.,2.); x = Interval(-math.sqrt(2.)/2.,0.);
253
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(-math.sqrt(3.)/2.,0.)); self.assertTrue(Approx(x) == Interval(-math.sqrt(2.)/2.,0.))
254
+ a = Interval(-3*math.pi/4.,-2*math.pi/3.); y = Interval(-math.sqrt(3.)/2.,2.); x = Interval(-1.,-.5);
255
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(-math.sqrt(3.)/2.,-.5)); self.assertTrue(Approx(x) == Interval(-math.sqrt(3.)/2.,-.5))
256
+ a = Interval(-3*math.pi/4.,-math.pi/4.); y = Interval(-5.,-.5); x = Interval(-oo,oo);
257
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(-5.,-.5)); self.assertTrue(Approx(x) == Interval(-5.,5.))
258
+ a = Interval(-math.pi/3.,math.pi/4.); y = Interval(-oo,oo); x = Interval(sqrt(3.)/2.);
259
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == Interval(-1.5,math.sqrt(3.)/2.)); self.assertTrue(Approx(x) == Interval(math.sqrt(3.)/2.))
260
+ a = Interval.half_pi(); y = Interval(1); x = 0.;
261
+ Atan2Op.bwd(a,y,x); self.assertTrue(Approx(y) == 1.); self.assertTrue(Approx(x) == 0.)
262
+
263
+ x = Interval(0,15); SqrtOp.bwd(Interval(1,3), x); self.assertTrue(x == Interval(1,9))
264
+ x = Interval(0,2); SqrtOp.bwd(Interval(1,3), x); self.assertTrue(x == Interval(1,2))
265
+ x = Interval(-4,2); SqrtOp.bwd(Interval(1,3), x); self.assertTrue(x == Interval(1,2))
266
+ x = Interval(-4,-3); SqrtOp.bwd(Interval(1,3), x); self.assertTrue(x == Interval.empty())
267
+ x = Interval(-4,1); SqrtOp.bwd(Interval(-oo,9), x); self.assertTrue(x == Interval(0,1))
268
+ x = Interval(-1,5); SqrtOp.bwd(Interval(2,5), x); self.assertTrue(x == Interval(4,5))
269
+ x = Interval(-oo,oo); SqrtOp.bwd(Interval(-4,-2), x); self.assertTrue(x == Interval.empty())
270
+
271
+ x = Interval(-1.,3.); AtanOp.bwd(Interval(0.,math.pi/6.),x); self.assertTrue(x == tan(Interval(0.,math.pi/6.)))
272
+ x = Interval(0,5*math.pi/2.0); AtanOp.bwd(Interval(-math.pi,1.5),x); self.assertTrue(x == Interval(0,5*math.pi/2.0))
273
+ x = Interval(.2,.5); AtanOp.bwd(Interval(0.,math.pi/6.),x); self.assertTrue(x == Interval(.2,.5))
274
+ x = Interval(-100,100); AtanOp.bwd(Interval(-math.pi/2-0.1,math.pi/2+0.1),x); self.assertTrue(x == Interval(-100,100))
275
+ x = Interval(-100,100); AtanOp.bwd(Interval(math.pi/2+0.1,math.pi),x); self.assertTrue(x == Interval.empty())
276
+ x = Interval(-100,100); AtanOp.bwd(Interval(-math.pi,-math.pi/2-0.1),x); self.assertTrue(x == Interval.empty())
277
+
278
+
279
+ x = Interval(-oo,oo); AtanOp.bwd(Interval(-math.pi/4,math.pi/2.), x); self.assertTrue(x.lb() == -1); self.assertTrue(x.ub() > 1000)
280
+ x = Interval(-oo,oo); AtanOp.bwd(Interval(-math.pi/2,math.pi/4.), x); self.assertTrue(x.ub() == +1); self.assertTrue(x.lb() < -1000)
281
+
282
+ self.CHECK_bwd_add(Interval(1,3),Interval(1,2),Interval(-10,5),Interval(1,2),Interval(-1,2))
283
+ self.CHECK_bwd_add(Interval.empty(),Interval(0.1,2.0),Interval(-10,2),Interval.empty(),Interval.empty())
284
+ self.CHECK_bwd_add(Interval(0,0),Interval(0,0),Interval(.1,5),Interval.empty(),Interval.empty())
285
+ self.CHECK_bwd_add(Interval(0,0),Interval(-1,1),Interval(-1,1),Interval(-1,1),Interval(-1,1))
286
+ self.CHECK_bwd_add(Interval(-1,1),Interval(1,2),Interval(-10,5),Interval(1,2),Interval(-3,0))
287
+
288
+ self.CHECK_bwd_sub(Interval(1,3),Interval(1,2),Interval(-10,5),Interval(1,2),Interval(-2,1))
289
+ self.CHECK_bwd_sub(Interval.empty(),Interval(0.1,2.0),Interval(-10,2),Interval.empty(),Interval.empty())
290
+ self.CHECK_bwd_sub(Interval(0,0),Interval(0,0),Interval(.1,5),Interval.empty(),Interval.empty())
291
+ self.CHECK_bwd_sub(Interval(0,0),Interval(-1,1),Interval(-1,1),Interval(-1,1),Interval(-1,1))
292
+ self.CHECK_bwd_sub(Interval(-1,1),Interval(1,2),Interval(-10,5),Interval(1,2),Interval(0,3))
293
+
294
+ self.CHECK_bwd_imod(3.,Interval(3.,5.),Interval(1.,2.),Interval(4.,5.),Interval(1.,2.))
295
+ self.CHECK_bwd_imod(2.,Interval(7.,8.),Interval(.5,2.),Interval(7.,8.),Interval(1.,2.))
296
+ self.CHECK_bwd_imod(2.,Interval(7.,8.),Interval(0.,2.),Interval(7.,8.),Interval(0.,2.))
297
+ self.CHECK_bwd_imod(2.*math.pi,Interval(2.*math.pi,3.*math.pi),Interval(math.pi/6,math.pi/2.),Interval(13.*math.pi/6.,5.*math.pi/2.),Interval(math.pi/6,math.pi/2.))
298
+ self.CHECK_bwd_imod(2.*math.pi,Interval(3.*math.pi,4.*math.pi),Interval(math.pi/3,math.pi/2.),Interval.empty(),Interval.empty())
299
+ self.CHECK_bwd_imod(2.*math.pi,Interval(3.*math.pi,4.*math.pi),Interval(0.,math.pi/2.),Interval(4*math.pi),Interval(0.))
300
+ self.CHECK_bwd_imod(2.*math.pi,Interval(2.*math.pi,4.*math.pi),Interval(-math.pi/6,math.pi/2.),Interval(2.*math.pi,4.*math.pi),Interval(-math.pi/6,math.pi/2.))
301
+ self.CHECK_bwd_imod(2.*math.pi,Interval(7.*math.pi/4.,8.*math.pi/3),Interval(-math.pi/2,math.pi/2.),Interval(7.*math.pi/4.,5.*math.pi/2.),Interval(-math.pi/4,math.pi/2.))
302
+
303
+ x = Interval(-oo,oo); FloorOp.bwd(Interval.empty(),x); self.assertTrue(x == Interval.empty())
304
+ x = Interval(-oo,-0.000001); FloorOp.bwd(Interval(-oo,-1),x); self.assertTrue(x == Interval(-oo,-0.000001))
305
+ x = Interval(-oo, 0.000001); FloorOp.bwd(Interval(-oo,-1),x); self.assertTrue(x == Interval(-oo,0))
306
+ x = Interval(-oo, 0.000001); FloorOp.bwd(Interval(-oo,-0.000001),x); self.assertTrue(x == Interval(-oo,0))
307
+ x = Interval(0.000001,oo); FloorOp.bwd(Interval(1,oo),x); self.assertTrue(x == Interval(1,oo))
308
+ x = Interval(-0.000001,oo); FloorOp.bwd(Interval(1,oo),x); self.assertTrue(x == Interval(1,oo))
309
+ x = Interval(-0.000001,oo); FloorOp.bwd(Interval(0.000001,oo),x); self.assertTrue(x == Interval(1,oo))
310
+ x = Interval(0.01,2.99); FloorOp.bwd(Interval(1,2),x); self.assertTrue(x == Interval(1,2.99))
311
+ x = Interval(2.99,3.01); FloorOp.bwd(Interval(1,2),x); self.assertTrue(x == Interval(2.99,3))
312
+ x = Interval(3.01,3.99); FloorOp.bwd(Interval(1,2),x); self.assertTrue(x == Interval.empty())
313
+ x = Interval(0.01,2.99); FloorOp.bwd(Interval(0.01,2.99),x); self.assertTrue(x == Interval(1,2.99))
314
+
315
+ x = Interval(-oo,oo); CeilOp.bwd(Interval.empty(),x); self.assertTrue(x == Interval.empty())
316
+ x = Interval(-oo,-0.000001); CeilOp.bwd(Interval(-oo,-1),x); self.assertTrue(x == Interval(-oo,-1))
317
+ x = Interval(-oo,0.000001); CeilOp.bwd(Interval(-oo,-1),x); self.assertTrue(x == Interval(-oo,-1))
318
+ x = Interval(-oo,0.000001); CeilOp.bwd(Interval(-oo,-0.000001),x); self.assertTrue(x == Interval(-oo,-1))
319
+ x = Interval(0.000001,oo); CeilOp.bwd(Interval(1,oo),x); self.assertTrue(x == Interval(0.000001,oo))
320
+ x = Interval(-0.000001,oo); CeilOp.bwd(Interval(1,oo),x); self.assertTrue(x == Interval(0,oo))
321
+ x = Interval(-0.000001,oo); CeilOp.bwd(Interval(0.000001,oo),x); self.assertTrue(x == Interval(0,oo))
322
+ x = Interval(0.01,2.99); CeilOp.bwd(Interval(1,2),x); self.assertTrue(x == Interval(0.01,2))
323
+ x = Interval(-0.01,0.01); CeilOp.bwd(Interval(1,2),x); self.assertTrue(x == Interval(0,0.01))
324
+ x = Interval(-1.01,-0.01); CeilOp.bwd(Interval(1,2),x); self.assertTrue(x == Interval.empty())
325
+ x = Interval(0.01,2.99); CeilOp.bwd(Interval(0.01,2.99),x); self.assertTrue(x == Interval(0.01,2))
326
+
327
+ x = Interval(-1.57079632679489678, 1.1780972450961728626)
328
+ self.assertFalse(tan(x).is_empty())
329
+
330
+ def test_chi_op(self):
331
+ self.assertTrue(
332
+ ChiOp.fwd(Interval(0.2,0.4),Interval(-2.0,-1.0),Interval(1.0,2.0)) == Interval(1.0,2.0))
333
+ self.assertTrue(
334
+ ChiOp.fwd(Interval(-0.2,0.2),IntervalVector([[-2.0,-1.0],[-1.0,0.0]]),IntervalVector([0.0,1.0])) == IntervalVector([[-2.0,0.0],[-1.0,1.0]]))
335
+ self.assertTrue(
336
+ ChiOp.fwd(
337
+ Interval(-0.2,0.0),
338
+ IntervalMatrix([[[-2.0,-1.0],[-1.0,0.0]],[[-2.0,-1.0],[-1.0,0.0]]]),
339
+ IntervalMatrix([[[2.0,3.0],[0.0,3.0]],[[2.0,3.0],[1.0,2.0]]]))
340
+ == IntervalMatrix([[[-2.0,-1.0],[-1.0,0.0]],[[-2.0,-1.0],[-1.0,0.0]]]))
341
+
342
+ def test_cross_prod(self):
343
+
344
+ self.assertTrue(
345
+ CrossProdOp.fwd(Vector([1,0,0]),Vector([0,1,0])) == Vector([0,0,1]))
346
+ self.assertTrue(
347
+ CrossProdOp.fwd(Vector([0,1,0]),Vector([0,0,1])) == Vector([1,0,0]))
348
+ self.assertTrue(
349
+ CrossProdOp.fwd(Vector([0,0,1]),Vector([1,0,0])) == Vector([0,1,0]))
350
+ self.assertTrue(
351
+ CrossProdOp.fwd(Vector([1,2,3]),Vector([2,4,6])) == Vector([0,0,0]))
352
+
353
+ def test_mat_operator(self):
354
+
355
+ x1,x2,x3 = IntervalVector([2,3]), IntervalVector([4,5]), IntervalVector([6,7])
356
+ self.assertTrue(MatrixOp.fwd(x1,x2,x3) == IntervalMatrix([[2,4,6],[3,5,7]]))
357
+ self.assertTrue(MatrixOp.fwd(x1) == IntervalMatrix([[2],[3]]))
358
+
359
+ def test_transpose_operator(self):
360
+ M = IntervalMatrix([[[1,1.5],[2,2.5],[3,3.5]],[[4,4.5],[5,5.5],[6,6.5]]])
361
+ N = IntervalMatrix([[[0.8,1.2],[3.5,4]],[[2.0,2.2],[4.8,5.2]],
362
+ [[2.8,3.2],[5.8,6.2]]])
363
+ self.assertTrue(TransposeOp.fwd(M)==M.transpose())
364
+ TransposeOp.bwd(N,M)
365
+ self.assertTrue(M == IntervalMatrix([[[1,1.2],[2,2.2],[3,3.2]],[4.0,[5,5.2],[6,6.2]]]))
366
+
367
+ def test_flatten_operator(self):
368
+ M = IntervalMatrix([[[1,1.5],[2,2.5],[3,3.5]],[[4,4.5],[5,5.5],[6,6.5]]])
369
+ N = IntervalVector([[0.8,1.2],[3.5,4],[2.0,2.2],[4.8,5.2],
370
+ [2.8,3.2],[5.8,6.2]])
371
+ self.assertTrue(FlattenOp.fwd(M)==IntervalVector([[1,1.5],[4,4.5],[2,2.5],[5,5.5],[3,3.5],[6,6.5]]))
372
+ FlattenOp.bwd(N,M)
373
+ self.assertTrue(M == IntervalMatrix([[[1,1.2],[2,2.2],[3,3.2]],[4.0,[5,5.2],[6,6.2]]]))
374
+
375
+
376
+ if __name__ == '__main__':
377
+ unittest.main()
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2025
6
+ # \author Maël Godard
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+ import sys
13
+ import math
14
+
15
+ class TestPeibos(unittest.TestCase):
16
+
17
+ def test_peibos(self):
18
+
19
+ # 2D checks of the PEIBOS algorithm
20
+
21
+ y_2d = VectorVar(2)
22
+ f_2d = AnalyticFunction([y_2d],[sqr(y_2d[0])-sqr(y_2d[1])+y_2d[0],2.*y_2d[0]*y_2d[1] + y_2d[1]])
23
+
24
+ X_2d = VectorVar(1)
25
+ psi0_2d = AnalyticFunction([X_2d],[cos(X_2d[0]*PI/4.),sin(X_2d[0]*PI/4.)])
26
+
27
+ id_2d = OctaSym([1, 2])
28
+ s = OctaSym([-2, 1])
29
+
30
+ v_par_2d = PEIBOS(f_2d,psi0_2d,[id_2d,s,s*s,s.invert()],0.25,[-0.2,0.])
31
+
32
+ b0 = Vector([-0.5,0.0])
33
+ b1 = Vector([0.0,1.45])
34
+ b2 = Vector([-1.165,0.0])
35
+
36
+ count_b0, count_b1, count_b2 = 0, 0, 0
37
+
38
+ for p in v_par_2d:
39
+ if (p.contains(b0))==BoolInterval.TRUE:
40
+ count_b0 += 1
41
+ if (p.contains(b1))==BoolInterval.TRUE:
42
+ count_b1 += 1
43
+ if (p.contains(b2))==BoolInterval.TRUE:
44
+ count_b2 += 1
45
+
46
+ self.assertTrue(count_b0 == 0)
47
+ self.assertTrue(count_b1 == 1)
48
+ self.assertTrue(count_b2 == 2)
49
+
50
+ # 3D checks of the PEIBOS algorithm
51
+
52
+ y_3d = VectorVar(3)
53
+ f_3d = AnalyticFunction([y_3d],[y_3d[0],y_3d[1],y_3d[2]])
54
+
55
+ X_3d = VectorVar(2)
56
+ psi0_3d = AnalyticFunction([X_3d],[1/sqrt(1+sqr(X_3d[0])+sqr(X_3d[1])),X_3d[0]/sqrt(1+sqr(X_3d[0])+sqr(X_3d[1])),X_3d[1]/sqrt(1+sqr(X_3d[0])+sqr(X_3d[1]))])
57
+
58
+ id_3d = OctaSym([1, 2, 3])
59
+ s1 = OctaSym([-2, 1, 3])
60
+ s2 = OctaSym([3, 2, -1])
61
+
62
+ v_par_3d = PEIBOS(f_3d,psi0_3d,[id_3d,s1,s1*s1,s1.invert(),s2,s2.invert()],2.0)
63
+
64
+ self.assertTrue(len(v_par_3d) == 6)
65
+
66
+ self.assertTrue(Approx(v_par_3d[0].z,1e-6) == Vector([1.,0.,0.]))
67
+ self.assertTrue(Approx(v_par_3d[1].z,1e-6) == Vector([0.,1.,0.]))
68
+ self.assertTrue(Approx(v_par_3d[2].z,1e-6) == Vector([-1,0.,0.]))
69
+ self.assertTrue(Approx(v_par_3d[3].z,1e-6) == Vector([0.,-1.,0.]))
70
+ self.assertTrue(Approx(v_par_3d[4].z,1e-6) == Vector([0.,0.,-1.]))
71
+ self.assertTrue(Approx(v_par_3d[5].z,1e-6) == Vector([0.,0.,1.]))
72
+
73
+ a = 4.35066
74
+
75
+ self.assertTrue(Approx(v_par_3d[0].A,1e-5) == Matrix([[0.,0.,a],[a+1,0.,0.],[0.,a+1,0.]]))
76
+ self.assertTrue(Approx(v_par_3d[1].A,1e-5) == Matrix([[-(a+1),0.,0.],[0.,0.,a],[0.,a+1,0.]]))
77
+ self.assertTrue(Approx(v_par_3d[2].A,1e-5) == Matrix([[0.,0.,a],[-(a+1),0.,0.],[0.,a+1,0.]]))
78
+ self.assertTrue(Approx(v_par_3d[3].A,1e-5) == Matrix([[a+1,0.,0.],[0.,0.,a],[0.,a+1,0.]]))
79
+ self.assertTrue(Approx(v_par_3d[4].A,1e-5) == Matrix([[0.,a+1,0.],[a+1,0.,0.],[0.,0.,a]]))
80
+ self.assertTrue(Approx(v_par_3d[5].A,1e-5) == Matrix([[0.,-(a+1),0.],[a+1,0.,0.],[0.,0.,a]]))
81
+
82
+ if __name__ == '__main__':
83
+ unittest.main()
@@ -0,0 +1,193 @@
1
+ from codac import *
2
+
3
+ def tube_test_1():
4
+
5
+ x = SlicedTube(create_tdomain([0.,46.], 1., False), Interval())
6
+ x.set_ith_slice([4,8], 0)
7
+ x.set_ith_slice([2,7], 1)
8
+ x.set_ith_slice([1,6], 2)
9
+ x.set_ith_slice([-4,4], 3)
10
+ x.set_ith_slice([-7,-1], 4)
11
+ x.set_ith_slice([-9,-5], 5)
12
+ x.set_ith_slice([-10,-6], 6)
13
+ x.set_ith_slice([-11,-7], 7)
14
+ x.set_ith_slice([-10,-6], 8)
15
+ x.set_ith_slice([-9,-4], 9)
16
+ x.set_ith_slice([-8,-5], 10)
17
+ x.set_ith_slice([-7,-4], 11)
18
+ x.set_ith_slice([-6,-2], 12)
19
+ x.set_ith_slice([-5,-1], 13)
20
+ x.set_ith_slice([-5,3], 14) # to be updated
21
+ x.set_ith_slice([-2,4], 15)
22
+ x.set_ith_slice([0,6], 16)
23
+ x.set_ith_slice([2,7], 17)
24
+ x.set_ith_slice([4,8], 18)
25
+ x.set_ith_slice([6,9], 19)
26
+ x.set_ith_slice([7,10], 20)
27
+ x.set_ith_slice([8,11], 21)
28
+ x.set_ith_slice([9,12], 22)
29
+ x.set_ith_slice([8,13], 23)
30
+ x.set_ith_slice([7,12], 24)
31
+ x.set_ith_slice([5,11], 25)
32
+ x.set_ith_slice([3,10], 26)
33
+ x.set_ith_slice([4,9], 27)
34
+ x.set_ith_slice([5,8], 28)
35
+ x.set_ith_slice([4,7], 29)
36
+ x.set_ith_slice([3,6], 30)
37
+ x.set_ith_slice([3,5], 31)
38
+ x.set_ith_slice([2,5], 32)
39
+ x.set_ith_slice([2,5], 33)
40
+ x.set_ith_slice([1,5], 34)
41
+ x.set_ith_slice([2,4], 35)
42
+ x.set_ith_slice([1,4], 36)
43
+ x.set_ith_slice([0,4], 37)
44
+ x.set_ith_slice([-1,3], 38)
45
+ x.set_ith_slice([-1,3], 39)
46
+ x.set_ith_slice([-1,4], 40)
47
+ x.set_ith_slice([0,5], 41)
48
+ x.set_ith_slice([1,6], 42)
49
+ x.set_ith_slice([0,5], 43)
50
+ x.set_ith_slice([-1,4], 44)
51
+ x.set_ith_slice([-1,3], 45)
52
+ return x
53
+
54
+ def tube_test_1_01():
55
+
56
+ x = SlicedTube(create_tdomain([0.,46.], 0.5, False), Interval())
57
+
58
+ x.set([4,8], [0,1])
59
+ x.set([2,7], [1,2])
60
+ x.set([1,6], [2,3])
61
+ x.set([-4,4], [3,4])
62
+ x.set([-7,-1], [4,5])
63
+ x.set([-9,-5], [5,6])
64
+ x.set([-10,-6], [6,7])
65
+ x.set([-11,-7], [7,8])
66
+ x.set([-10,-6], [8,9])
67
+ x.set([-9,-4], [9,10])
68
+ x.set([-8,-5], [10,11])
69
+ x.set([-7,-4], [11,12])
70
+ x.set([-6,-2], [12,13])
71
+ x.set([-5,-1], [13,14])
72
+ x.set([-4,2], [14,15])
73
+ x.set([-2,4], [15,16])
74
+ x.set([0,6], [16,17])
75
+ x.set([2,7], [17,18])
76
+ x.set([4,8], [18,19])
77
+ x.set([6,9], [19,20])
78
+ x.set([7,10], [20,21])
79
+ x.set([8,11], [21,22])
80
+ x.set([9,12], [22,23])
81
+ x.set([8,13], [23,24])
82
+ x.set([7,12], [24,25])
83
+ x.set([5,11], [25,26])
84
+ x.set([3,10], [26,27])
85
+ x.set([4,9], [27,28])
86
+ x.set([5,8], [28,29])
87
+ x.set([4,7], [29,30])
88
+ x.set([3,6], [30,31])
89
+ x.set([3,5], [31,32])
90
+ x.set([2,5], [32,33])
91
+ x.set([2,5], [33,34])
92
+ x.set([1,5], [34,35])
93
+ x.set([2,4], [35,36])
94
+ x.set([1,4], [36,37])
95
+ x.set([0,4], [37,38])
96
+ x.set([-1,3], [38,39])
97
+ x.set([-1,3], [39,40])
98
+ x.set([-1,4], [40,41])
99
+ x.set([0,5], [41,42])
100
+ x.set([1,6], [42,43])
101
+ x.set([0,5], [43,44])
102
+ x.set([-1,4], [44,45])
103
+ x.set([-1,3], [45,46])
104
+ return x
105
+
106
+ def tube_test2():
107
+
108
+ x = SlicedTube(create_tdomain([0.,46.], 1., False), Interval())
109
+
110
+ x.set_ith_slice([-2,0], 0)
111
+ x.set_ith_slice([-3,1], 1)
112
+ x.set_ith_slice([-1,3], 2)
113
+ x.set_ith_slice([2,4], 3)
114
+ x.set_ith_slice([3,5], 4)
115
+ x.set_ith_slice([2,6], 5)
116
+ x.set_ith_slice([2,5], 6)
117
+ x.set_ith_slice([1,4], 7)
118
+ x.set_ith_slice([1,3], 8)
119
+ x.set_ith_slice([2,3], 9)
120
+ x.set_ith_slice([2,4], 10)
121
+ x.set_ith_slice([1,3], 11)
122
+ x.set_ith_slice([0,2], 12)
123
+ x.set_ith_slice([-1,2], 13)
124
+ x.set_ith_slice([-2,1], 14)
125
+ x.set_ith_slice([-3,0], 15)
126
+ x.set_ith_slice([-2,0], 16)
127
+ x.set_ith_slice([-1,1], 17)
128
+ x.set_ith_slice([0,2], 18)
129
+ x.set_ith_slice([1,3], 19)
130
+ x.set_ith_slice([1,4], 20)
131
+ x.set_ith_slice([2,5], 21)
132
+ x.set_ith_slice([2,4], 22)
133
+ x.set_ith_slice([1,3], 23)
134
+ x.set_ith_slice([0,2], 24)
135
+ x.set_ith_slice([0,2], 25)
136
+ x.set_ith_slice([0,2], 26)
137
+ x.set_ith_slice([1,2], 27)
138
+ x.set_ith_slice([1,3], 28)
139
+ x.set_ith_slice([0,3], 29)
140
+ x.set_ith_slice([-1,2], 30)
141
+ x.set_ith_slice([-2,1], 31)
142
+ x.set_ith_slice([-3,0], 32)
143
+ x.set_ith_slice([-4,-1], 33)
144
+ x.set_ith_slice([-4,-2], 34)
145
+ x.set_ith_slice([-3,-1], 35)
146
+ x.set_ith_slice([-4,-2], 36)
147
+ x.set_ith_slice([-4,-2], 37)
148
+ x.set_ith_slice([-4,-2], 38)
149
+ x.set_ith_slice([-3,-1], 39)
150
+ x.set_ith_slice([-3,-1], 40)
151
+ x.set_ith_slice([-2,-1], 41)
152
+ x.set_ith_slice([-1,1], 42)
153
+ x.set_ith_slice([-1,1], 43)
154
+ x.set_ith_slice([0,2], 44)
155
+ x.set_ith_slice([1,3], 45)
156
+ return x
157
+
158
+ def tube_test3():
159
+
160
+ x = SlicedTube(create_tdomain([0.,5.], 1., False), Interval())
161
+
162
+ x.set_ith_slice([1,3], 0)
163
+ x.set_ith_slice([0,2], 1)
164
+ x.set_ith_slice([-1,1], 2)
165
+ x.set_ith_slice([-2,0], 3)
166
+ x.set_ith_slice([-3,-1], 4)
167
+ return x
168
+
169
+ def tube_test4():
170
+
171
+ x = SlicedTube(create_tdomain([0.,21.], 1., False), Interval())
172
+
173
+ x.set([1,2], [0,9])
174
+ x.set([0.5,1.5], [9,11])
175
+ x.set([-1,1], [10.2]) # degenerate time interval
176
+ x.set([-1.5,-0.5], [11,12])
177
+ x.set([-1,1], [12,13])
178
+ x.set([0.5,1.5], [13,14])
179
+ x.set([1,2], [14,21])
180
+ return x
181
+
182
+ def tube_test4_05():
183
+
184
+ x = SlicedTube(create_tdomain([0.,21.], 0.5, False), Interval())
185
+
186
+ x.set([1,2], [0,9])
187
+ x.set([0.5,1.5], [9,10])
188
+ x.set([-1,1], [10,11])
189
+ x.set([-1.5,-0.5], [11,12])
190
+ x.set([-1,1], [12,13])
191
+ x.set([0.5,1.5], [13,14])
192
+ x.set([1,2], [14,21])
193
+ return x
@@ -0,0 +1,30 @@
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
+ import sys
13
+
14
+ class TestSerialization(unittest.TestCase):
15
+
16
+ def test_serialization(self):
17
+
18
+ v = Vector([2,3,6])
19
+
20
+ with open("data.cdc", "wb") as f:
21
+ serialize(f, v)
22
+
23
+ v_deserialized = Vector(1)
24
+ with open("data.cdc", "rb") as f:
25
+ deserialize(f, v_deserialized)
26
+
27
+ self.assertTrue(v == v_deserialized)
28
+
29
+ if __name__ == '__main__':
30
+ unittest.main()