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.
- codac4matlab/__init__.py +4 -0
- codac4matlab/_core.cpython-314-aarch64-linux-gnu.so +0 -0
- codac4matlab/_graphics.cpython-314-aarch64-linux-gnu.so +0 -0
- codac4matlab/_unsupported.cpython-314-aarch64-linux-gnu.so +0 -0
- codac4matlab/core/__init__.py +588 -0
- codac4matlab/empty.cpython-314-aarch64-linux-gnu.so +0 -0
- codac4matlab/graphics/__init__.py +1 -0
- codac4matlab/tests/__init__.py +1 -0
- codac4matlab/tests/test_AnalyticFunction.py +442 -0
- codac4matlab/tests/test_AnalyticTraj.py +62 -0
- codac4matlab/tests/test_Approx.py +27 -0
- codac4matlab/tests/test_BoolInterval.py +96 -0
- codac4matlab/tests/test_Color.py +77 -0
- codac4matlab/tests/test_ConvexPolygon.py +300 -0
- codac4matlab/tests/test_CtcAction.py +30 -0
- codac4matlab/tests/test_CtcCartProd.py +39 -0
- codac4matlab/tests/test_CtcCtcBoundary.py +48 -0
- codac4matlab/tests/test_CtcDeriv.py +434 -0
- codac4matlab/tests/test_CtcEval.py +214 -0
- codac4matlab/tests/test_CtcFixpoint.py +65 -0
- codac4matlab/tests/test_CtcInter.py +39 -0
- codac4matlab/tests/test_CtcInverse.py +213 -0
- codac4matlab/tests/test_CtcInverseNotIn.py +129 -0
- codac4matlab/tests/test_CtcLazy.py +50 -0
- codac4matlab/tests/test_CtcPolygon.py +91 -0
- codac4matlab/tests/test_CtcSegment.py +104 -0
- codac4matlab/tests/test_Ellipsoid.py +20 -0
- codac4matlab/tests/test_GaussJordan.py +34 -0
- codac4matlab/tests/test_IntFullPivLU.py +84 -0
- codac4matlab/tests/test_Interval.py +254 -0
- codac4matlab/tests/test_IntervalMatrix.py +664 -0
- codac4matlab/tests/test_IntervalVector.py +657 -0
- codac4matlab/tests/test_Interval_operations.py +293 -0
- codac4matlab/tests/test_Matrix.py +81 -0
- codac4matlab/tests/test_OctaSym.py +41 -0
- codac4matlab/tests/test_Parallelepiped.py +35 -0
- codac4matlab/tests/test_Parallelepiped_eval.py +62 -0
- codac4matlab/tests/test_Polygon.py +120 -0
- codac4matlab/tests/test_SampledTraj.py +135 -0
- codac4matlab/tests/test_Segment.py +138 -0
- codac4matlab/tests/test_SepCartProd.py +34 -0
- codac4matlab/tests/test_SepCtcBoundary.py +52 -0
- codac4matlab/tests/test_SepInverse.py +104 -0
- codac4matlab/tests/test_SepPolygon.py +102 -0
- codac4matlab/tests/test_SepProj.py +39 -0
- codac4matlab/tests/test_SepTransform.py +41 -0
- codac4matlab/tests/test_Slice.py +78 -0
- codac4matlab/tests/test_Slice_polygon.py +208 -0
- codac4matlab/tests/test_SlicedTube.py +562 -0
- codac4matlab/tests/test_SlicedTube_integral.py +380 -0
- codac4matlab/tests/test_TDomain.py +115 -0
- codac4matlab/tests/test_Vector.py +41 -0
- codac4matlab/tests/test_arithmetic_add.py +54 -0
- codac4matlab/tests/test_arithmetic_div.py +46 -0
- codac4matlab/tests/test_arithmetic_mul.py +114 -0
- codac4matlab/tests/test_arithmetic_sub.py +54 -0
- codac4matlab/tests/test_capd.py +19 -0
- codac4matlab/tests/test_cart_prod.py +38 -0
- codac4matlab/tests/test_eigen.py +19 -0
- codac4matlab/tests/test_geometry.py +136 -0
- codac4matlab/tests/test_hull.py +35 -0
- codac4matlab/tests/test_ibex.py +19 -0
- codac4matlab/tests/test_inversion.py +57 -0
- codac4matlab/tests/test_linear_ctc.py +77 -0
- codac4matlab/tests/test_operators.py +377 -0
- codac4matlab/tests/test_peibos.py +83 -0
- codac4matlab/tests/test_predefined_tubes.py +193 -0
- codac4matlab/tests/test_serialization.py +30 -0
- codac4matlab/tests/test_transformations.py +61 -0
- codac4matlab/tests/test_trunc.py +95 -0
- codac4matlab/unsupported/__init__.py +1 -0
- codac4matlab/version.py +1 -0
- codac4matlab-2.0.0.dev25.dist-info/METADATA +23 -0
- codac4matlab-2.0.0.dev25.dist-info/RECORD +76 -0
- codac4matlab-2.0.0.dev25.dist-info/WHEEL +6 -0
- codac4matlab-2.0.0.dev25.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,380 @@
|
|
|
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
|
+
import math
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '.')))
|
|
17
|
+
import codac2_tests_predefined_tubes as predef
|
|
18
|
+
|
|
19
|
+
class TestSlicedTube_integral(unittest.TestCase):
|
|
20
|
+
|
|
21
|
+
def test_computing_integration_from_0_double_argument__tube1(self):
|
|
22
|
+
|
|
23
|
+
x = predef.tube_test_1()
|
|
24
|
+
x.set_ith_slice(Interval(-4,2), 14)
|
|
25
|
+
|
|
26
|
+
self.assertTrue(Approx(x.integral(0)) == Interval(0))
|
|
27
|
+
self.assertTrue(Approx(x.integral(0.1)) == Interval(0.4,0.8))
|
|
28
|
+
self.assertTrue(Approx(x.integral(1.1)) == Interval(4.2,8.7))
|
|
29
|
+
self.assertTrue(Approx(x.integral(0.5)) == Interval(2,4))
|
|
30
|
+
self.assertTrue(Approx(x.integral(1.0)) == Interval(4,8))
|
|
31
|
+
self.assertTrue(Approx(x.integral(1.5)) == Interval(5,11.5))
|
|
32
|
+
self.assertTrue(Approx(x.integral(2.0)) == Interval(6,15))
|
|
33
|
+
self.assertTrue(Approx(x.integral(2.5)) == Interval(6.5,18))
|
|
34
|
+
self.assertTrue(Approx(x.integral(2.9),1e-8) == Interval(6.9,20.4))
|
|
35
|
+
self.assertTrue(Approx(x.integral(3.0)) == Interval(7,21))
|
|
36
|
+
self.assertTrue(Approx(x.integral(3.1),1e-8) == Interval(6.6,21.4))
|
|
37
|
+
self.assertTrue(Approx(x.integral(4.0),1e-8) == Interval(3,25))
|
|
38
|
+
|
|
39
|
+
def test_computing_integration_from_0_double_argument__tube1_01(self):
|
|
40
|
+
|
|
41
|
+
x = predef.tube_test_1_01()
|
|
42
|
+
x.set_ith_slice(Interval(-4,2), 14)
|
|
43
|
+
|
|
44
|
+
self.assertTrue(Approx(x.integral(0)) == Interval(0))
|
|
45
|
+
self.assertTrue(Approx(x.integral(0.1)) == Interval(0.4,0.8))
|
|
46
|
+
self.assertTrue(Approx(x.integral(1.1)) == Interval(4.2,8.7))
|
|
47
|
+
self.assertTrue(Approx(x.integral(0.5)) == Interval(2,4))
|
|
48
|
+
self.assertTrue(Approx(x.integral(1.0)) == Interval(4,8))
|
|
49
|
+
self.assertTrue(Approx(x.integral(1.5)) == Interval(5,11.5))
|
|
50
|
+
self.assertTrue(Approx(x.integral(2.0)) == Interval(6,15))
|
|
51
|
+
self.assertTrue(Approx(x.integral(2.5)) == Interval(6.5,18))
|
|
52
|
+
self.assertTrue(Approx(x.integral(2.9),1e-8) == Interval(6.9,20.4))
|
|
53
|
+
self.assertTrue(Approx(x.integral(3.0)) == Interval(7,21))
|
|
54
|
+
self.assertTrue(Approx(x.integral(3.1),1e-8) == Interval(6.6,21.4))
|
|
55
|
+
self.assertTrue(Approx(x.integral(4.0)) == Interval(3,25))
|
|
56
|
+
|
|
57
|
+
def test_computing_integration_from_0_double_argument__tube4(self):
|
|
58
|
+
|
|
59
|
+
x = predef.tube_test4()
|
|
60
|
+
x.set(Interval(-1,1), Interval(10,11))
|
|
61
|
+
|
|
62
|
+
self.assertTrue(Approx(x.integral(0.0)) == Interval(0.0))
|
|
63
|
+
self.assertTrue(Approx(x.integral(0.1)) == Interval(0.1,0.2))
|
|
64
|
+
self.assertTrue(Approx(x.integral(0.9)) == Interval(0.9,1.8))
|
|
65
|
+
self.assertTrue(Approx(x.integral(1.0)) == Interval(1,2))
|
|
66
|
+
self.assertTrue(Approx(x.integral(1.2)) == Interval(1.2,2.4))
|
|
67
|
+
self.assertTrue(Approx(x.integral(2.0)) == Interval(2.0,4.0))
|
|
68
|
+
self.assertTrue(Approx(x.integral(3.0)) == Interval(3.0,6.0))
|
|
69
|
+
self.assertTrue(Approx(x.integral(5.0)) == Interval(5.0,10.0))
|
|
70
|
+
self.assertTrue(Approx(x.integral(7.0)) == Interval(7.0,14.0))
|
|
71
|
+
self.assertTrue(Approx(x.integral(9.0)) == Interval(9.0,18.0))
|
|
72
|
+
self.assertTrue(Approx(x.integral(10.0)) == Interval(9.5,19.5))
|
|
73
|
+
self.assertTrue(Approx(x.integral(10.1)) == Interval(9.4,19.6))
|
|
74
|
+
self.assertTrue(Approx(x.integral(11.0),1e-8) == Interval(8.5,20.5))
|
|
75
|
+
self.assertTrue(Approx(x.integral(11.5),1e-8) == Interval(7.75,20.25))
|
|
76
|
+
self.assertTrue(Approx(x.integral(12.5),1e-8) == Interval(6.5,20.5))
|
|
77
|
+
self.assertTrue(Approx(x.integral(12.6),1e-8) == Interval(6.4,20.6))
|
|
78
|
+
self.assertTrue(Approx(x.integral(14.5),1e-8) == Interval(7,23.5))
|
|
79
|
+
|
|
80
|
+
def test_computing_integration_from_0_interval_argument__tube1(self):
|
|
81
|
+
|
|
82
|
+
x = predef.tube_test_1()
|
|
83
|
+
x.set_ith_slice(Interval(-4,2), 14)
|
|
84
|
+
|
|
85
|
+
self.assertTrue(Approx(x.integral(Interval(0))) == Interval(0))
|
|
86
|
+
self.assertTrue(Approx(x.integral(Interval(0.1))) == Interval(0.4,0.8))
|
|
87
|
+
self.assertTrue(Approx(x.integral(Interval(0.5))) == Interval(2,4))
|
|
88
|
+
self.assertTrue(Approx(x.integral(Interval(1.0))) == Interval(4,8))
|
|
89
|
+
self.assertTrue(Approx(x.integral(Interval(1.5))) == Interval(5,11.5))
|
|
90
|
+
self.assertTrue(Approx(x.integral(Interval(2.0))) == Interval(6,15))
|
|
91
|
+
self.assertTrue(Approx(x.integral(Interval(2.5))) == Interval(6.5,18))
|
|
92
|
+
self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
|
|
93
|
+
self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
|
|
94
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,0.0))) == Interval(0,0))
|
|
95
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,0.5))) == Interval(0,4))
|
|
96
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,1.0))) == Interval(0,8))
|
|
97
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,1.5))) == Interval(0,11.5))
|
|
98
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,2.0))) == Interval(0,15))
|
|
99
|
+
self.assertTrue(Approx(x.integral(Interval(1.0,1.0))) == Interval(4,8))
|
|
100
|
+
self.assertTrue(Approx(x.integral(Interval(1.0,1.5))) == Interval(4,11.5))
|
|
101
|
+
self.assertTrue(Approx(x.integral(Interval(1.0,2.0))) == Interval(4,15))
|
|
102
|
+
self.assertTrue(Approx(x.integral(Interval(1.1,1.9))) == Interval(4.2,14.3))
|
|
103
|
+
self.assertTrue(Approx(x.integral(Interval(1.1,2.1)),1e-8) == Interval(4.2,15.6))
|
|
104
|
+
self.assertTrue(Approx(x.integral(Interval(6,7))) == Interval(-23,19))
|
|
105
|
+
self.assertTrue(Approx(x.integral(Interval(0,46)),1e-8) == Interval(-85,194))
|
|
106
|
+
|
|
107
|
+
def test_computing_integration_from_0_interval_argument__tube1_01(self):
|
|
108
|
+
|
|
109
|
+
x = predef.tube_test_1_01()
|
|
110
|
+
|
|
111
|
+
self.assertTrue(Approx(x.integral(Interval(0))) == Interval(0))
|
|
112
|
+
self.assertTrue(Approx(x.integral(Interval(0.1))) == Interval(0.4,0.8))
|
|
113
|
+
self.assertTrue(Approx(x.integral(Interval(0.5))) == Interval(2,4))
|
|
114
|
+
self.assertTrue(Approx(x.integral(Interval(1.0))) == Interval(4,8))
|
|
115
|
+
self.assertTrue(Approx(x.integral(Interval(1.5))) == Interval(5,11.5))
|
|
116
|
+
self.assertTrue(Approx(x.integral(Interval(2.0))) == Interval(6,15))
|
|
117
|
+
self.assertTrue(Approx(x.integral(Interval(2.5))) == Interval(6.5,18))
|
|
118
|
+
self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
|
|
119
|
+
self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
|
|
120
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,0.0))) == Interval(0,0))
|
|
121
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,0.5))) == Interval(0,4))
|
|
122
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,1.0))) == Interval(0,8))
|
|
123
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,1.5))) == Interval(0,11.5))
|
|
124
|
+
self.assertTrue(Approx(x.integral(Interval(0.0,2.0))) == Interval(0,15))
|
|
125
|
+
self.assertTrue(Approx(x.integral(Interval(1.0,1.0))) == Interval(4,8))
|
|
126
|
+
self.assertTrue(Approx(x.integral(Interval(1.0,1.5))) == Interval(4,11.5))
|
|
127
|
+
self.assertTrue(Approx(x.integral(Interval(1.0,2.0))) == Interval(4,15))
|
|
128
|
+
self.assertTrue(Approx(x.integral(Interval(1.1,1.9)),1e-8) == Interval(4.2,14.3))
|
|
129
|
+
self.assertTrue(Approx(x.integral(Interval(1.1,2.1)),1e-8) == Interval(4.2,15.6))
|
|
130
|
+
self.assertTrue(Approx(x.integral(Interval(6,7))) == Interval(-23,19))
|
|
131
|
+
self.assertTrue(x.tdomain().t0_tf() == Interval(0,46))
|
|
132
|
+
self.assertTrue(x.codomain() == Interval(-11,13))
|
|
133
|
+
self.assertTrue(Approx(x.integral(Interval(0,46))) == Interval(-85,194))
|
|
134
|
+
|
|
135
|
+
def test_computing_integration_from_0_interval_argument__tube4(self):
|
|
136
|
+
|
|
137
|
+
x = predef.tube_test4()
|
|
138
|
+
x.set(Interval(-1,1), Interval(10,11))
|
|
139
|
+
|
|
140
|
+
self.assertTrue(Approx(x.integral(Interval(12.5)),1e-8) == Interval(6.5,20.5))
|
|
141
|
+
self.assertTrue(Approx(x.integral(Interval(14.5)),1e-8) == Interval(7,23.5))
|
|
142
|
+
p_intv = x.partial_integral(Interval(12.5,14.5))
|
|
143
|
+
self.assertTrue(Approx(p_intv[0],1e-8) == Interval(6.,7.))
|
|
144
|
+
self.assertTrue(Approx(p_intv[1],1e-8) == Interval(20.5,23.5))
|
|
145
|
+
self.assertTrue(Approx(x.integral(Interval(12.5,14.5)),1e-8) == Interval(6.0,23.5))
|
|
146
|
+
self.assertTrue(Approx(x.integral(Interval(0)),1e-8) == Interval(0))
|
|
147
|
+
self.assertTrue(Approx(x.integral(Interval(10.2)),1e-8) == Interval(9.3,19.7))
|
|
148
|
+
self.assertTrue(Approx(x.integral(Interval(1.5,3.5)),1e-8) == Interval(1.5,7))
|
|
149
|
+
self.assertTrue(Approx(x.integral(Interval(9,21)),1e-8) == Interval(6,36.5))
|
|
150
|
+
|
|
151
|
+
def test_computing_integration_from_0_interval_argument__tube4_05(self):
|
|
152
|
+
|
|
153
|
+
x = predef.tube_test4_05()
|
|
154
|
+
x.set(Interval(-1,1), Interval(10,11))
|
|
155
|
+
|
|
156
|
+
self.assertTrue(Approx(x.integral(Interval(12.5))) == Interval(6.5,20.5))
|
|
157
|
+
self.assertTrue(Approx(x.integral(Interval(14.5))) == Interval(7,23.5))
|
|
158
|
+
p_intv = x.partial_integral(Interval(12.5,14.5))
|
|
159
|
+
self.assertTrue(p_intv[0] == Interval(6.,7.))
|
|
160
|
+
self.assertTrue(p_intv[1] == Interval(20.5,23.5))
|
|
161
|
+
self.assertTrue(Approx(x.integral(Interval(12.5,14.5))) == Interval(6.0,23.5))
|
|
162
|
+
self.assertTrue(Approx(x.integral(Interval(0))) == Interval(0))
|
|
163
|
+
self.assertTrue(Approx(x.integral(Interval(10.2))) == Interval(9.3,19.7))
|
|
164
|
+
self.assertTrue(Approx(x.integral(Interval(1.5,3.5))) == Interval(1.5,7))
|
|
165
|
+
self.assertTrue(Approx(x.integral(Interval(9,21))) == Interval(6,36.5))
|
|
166
|
+
|
|
167
|
+
def test_computing_integration_from_0_partial_integration__tube4(self):
|
|
168
|
+
|
|
169
|
+
x = predef.tube_test4()
|
|
170
|
+
x.set(Interval(-1,1), Interval(10,11))
|
|
171
|
+
|
|
172
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0))) == (Interval(0.), Interval(0.)))
|
|
173
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.2))) == (Interval(0.2), Interval(0.4)))
|
|
174
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.1))) == (Interval(0.1), Interval(0.2)))
|
|
175
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.9))) == (Interval(0.9), Interval(1.8)))
|
|
176
|
+
self.assertTrue(Approx(x.partial_integral(Interval(1.0))) == (Interval(1), Interval(2)))
|
|
177
|
+
self.assertTrue(Approx(x.partial_integral(Interval(1.2))) == (Interval(1.2), Interval(2.4)))
|
|
178
|
+
self.assertTrue(Approx(x.partial_integral(Interval(2.0))) == (Interval(2.0), Interval(4.0)))
|
|
179
|
+
self.assertTrue(Approx(x.partial_integral(Interval(3.0))) == (Interval(3.0), Interval(6.0)))
|
|
180
|
+
self.assertTrue(Approx(x.partial_integral(Interval(5.0))) == (Interval(5.0), Interval(10.0)))
|
|
181
|
+
self.assertTrue(Approx(x.partial_integral(Interval(7.0))) == (Interval(7.0), Interval(14.0)))
|
|
182
|
+
self.assertTrue(Approx(x.partial_integral(Interval(9.0))) == (Interval(9.0), Interval(18.0)))
|
|
183
|
+
self.assertTrue(Approx(x.partial_integral(Interval(10.0))) == (Interval(9.5), Interval(19.5)))
|
|
184
|
+
self.assertTrue(Approx(x.partial_integral(Interval(10.1)),1e-8) == (Interval(9.4), Interval(19.6)))
|
|
185
|
+
self.assertTrue(Approx(x.partial_integral(Interval(11.0)),1e-8) == (Interval(8.5), Interval(20.5)))
|
|
186
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.5)),1e-8) == (Interval(6.5), Interval(20.5)))
|
|
187
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.6)),1e-8) == (Interval(6.4), Interval(20.6)))
|
|
188
|
+
self.assertTrue(Approx(x.partial_integral(Interval(14.5)),1e-8) == (Interval(7), Interval(23.5)))
|
|
189
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.5,13)),1e-8) == (Interval(6,6.5), Interval(20.5,21)))
|
|
190
|
+
self.assertTrue(Approx(x.partial_integral(Interval(13,14)),1e-8) == (Interval(6,6.5), Interval(21,22.5)))
|
|
191
|
+
self.assertTrue(Approx(x.partial_integral(Interval(14,14.5)),1e-8) == (Interval(6.5,7), Interval(22.5,23.5)))
|
|
192
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.5,14.5)),1e-8) == (Interval(6.0,7.0), Interval(20.5,23.5)))
|
|
193
|
+
self.assertTrue(Approx(x.partial_integral(Interval(1.5,3.5)),1e-8) == (Interval(1.5,3.5), Interval(3,7)))
|
|
194
|
+
self.assertTrue(Approx(x.partial_integral(Interval(9,21)),1e-8) == (Interval(6,13.5), Interval(18,36.5)))
|
|
195
|
+
|
|
196
|
+
def test_computing_integration_from_0_partial_integration__tube4_05(self):
|
|
197
|
+
|
|
198
|
+
x = predef.tube_test4_05()
|
|
199
|
+
|
|
200
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0))) == (Interval(0.), Interval(0.)))
|
|
201
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.2))) == (Interval(0.2), Interval(0.4)))
|
|
202
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.1))) == (Interval(0.1), Interval(0.2)))
|
|
203
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.9))) == (Interval(0.9), Interval(1.8)))
|
|
204
|
+
self.assertTrue(Approx(x.partial_integral(Interval(1.0))) == (Interval(1), Interval(2)))
|
|
205
|
+
self.assertTrue(Approx(x.partial_integral(Interval(1.2))) == (Interval(1.2), Interval(2.4)))
|
|
206
|
+
self.assertTrue(Approx(x.partial_integral(Interval(2.0))) == (Interval(2.0), Interval(4.0)))
|
|
207
|
+
self.assertTrue(Approx(x.partial_integral(Interval(3.0))) == (Interval(3.0), Interval(6.0)))
|
|
208
|
+
self.assertTrue(Approx(x.partial_integral(Interval(5.0))) == (Interval(5.0), Interval(10.0)))
|
|
209
|
+
self.assertTrue(Approx(x.partial_integral(Interval(7.0))) == (Interval(7.0), Interval(14.0)))
|
|
210
|
+
self.assertTrue(Approx(x.partial_integral(Interval(9.0))) == (Interval(9.0), Interval(18.0)))
|
|
211
|
+
self.assertTrue(Approx(x.partial_integral(Interval(10.0))) == (Interval(9.5), Interval(19.5)))
|
|
212
|
+
self.assertTrue(Approx(x.partial_integral(Interval(10.1)),1e-8) == (Interval(9.4), Interval(19.6)))
|
|
213
|
+
self.assertTrue(Approx(x.partial_integral(Interval(11.0))) == (Interval(8.5), Interval(20.5)))
|
|
214
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.5))) == (Interval(6.5), Interval(20.5)))
|
|
215
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.6)),1e-8) == (Interval(6.4), Interval(20.6)))
|
|
216
|
+
self.assertTrue(Approx(x.partial_integral(Interval(14.5))) == (Interval(7), Interval(23.5)))
|
|
217
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.5,13))) == (Interval(6,6.5), Interval(20.5,21)))
|
|
218
|
+
self.assertTrue(Approx(x.partial_integral(Interval(13,14))) == (Interval(6,6.5), Interval(21,22.5)))
|
|
219
|
+
self.assertTrue(Approx(x.partial_integral(Interval(14,14.5))) == (Interval(6.5,7), Interval(22.5,23.5)))
|
|
220
|
+
self.assertTrue(Approx(x.partial_integral(Interval(12.5,14.5))) == (Interval(6.0,7.0), Interval(20.5,23.5)))
|
|
221
|
+
self.assertTrue(Approx(x.partial_integral(Interval(1.5,3.5))) == (Interval(1.5,3.5), Interval(3,7)))
|
|
222
|
+
self.assertTrue(Approx(x.partial_integral(Interval(9,21))) == (Interval(6,13.5), Interval(18,36.5)))
|
|
223
|
+
|
|
224
|
+
def test_computing_integration_from_0_partial_integration__tube1(self):
|
|
225
|
+
|
|
226
|
+
x = predef.tube_test_1()
|
|
227
|
+
x.set_ith_slice(Interval(-4,2), 14)
|
|
228
|
+
|
|
229
|
+
self.assertTrue(Approx(x.partial_integral(x.tdomain().t0_tf())) == (Interval(-85,7), Interval(-16,194)))
|
|
230
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.,46.))) == (Interval(-85,7), Interval(-16,194)))
|
|
231
|
+
self.assertTrue(Approx(x.partial_integral(Interval(7.))) == (Interval(-23), Interval(13)))
|
|
232
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.,7.))) == (Interval(-23,7.0), Interval(0,25)))
|
|
233
|
+
self.assertTrue(Approx(x.partial_integral(Interval(2.,6.))) == (Interval(-13,7), Interval(15,25)))
|
|
234
|
+
self.assertTrue(Approx(x.partial_integral(Interval(6.,7.))) == (Interval(-23,-13), Interval(13,19)))
|
|
235
|
+
|
|
236
|
+
integrale_lb = Interval.empty()
|
|
237
|
+
integrale_ub = Interval.empty()
|
|
238
|
+
|
|
239
|
+
t = 0.0
|
|
240
|
+
while t <= 46.0:
|
|
241
|
+
integrale_lb |= x.partial_integral(Interval(0, t))[0]
|
|
242
|
+
integrale_ub |= x.partial_integral(Interval(0, t))[1]
|
|
243
|
+
t += 0.2
|
|
244
|
+
|
|
245
|
+
self.assertTrue(integrale_lb.is_subset(Interval(-85,7)))
|
|
246
|
+
self.assertTrue(integrale_ub.is_subset(Interval(-16,194)))
|
|
247
|
+
|
|
248
|
+
def test_computing_integration_from_0_partial_integration__tube1_01(self):
|
|
249
|
+
|
|
250
|
+
x = predef.tube_test_1_01()
|
|
251
|
+
|
|
252
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.,46.))) == (Interval(-85,7), Interval(-16,194)))
|
|
253
|
+
self.assertTrue(Approx(x.partial_integral(Interval(7.))) == (Interval(-23), Interval(13)))
|
|
254
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.,7.))) == (Interval(-23,7.0), Interval(0,25)))
|
|
255
|
+
self.assertTrue(Approx(x.partial_integral(Interval(2.,6.))) == (Interval(-13,7), Interval(15,25)))
|
|
256
|
+
self.assertTrue(Approx(x.partial_integral(Interval(6.,7.))) == (Interval(-23,-13), Interval(13,19)))
|
|
257
|
+
|
|
258
|
+
def test_computing_integration_two_interval_bounds__tube1(self):
|
|
259
|
+
|
|
260
|
+
x = predef.tube_test_1()
|
|
261
|
+
x.set_ith_slice(Interval(-4,2), 14)
|
|
262
|
+
|
|
263
|
+
self.assertTrue(Approx(x.integral(Interval(20), Interval(20))) == Interval(0.))
|
|
264
|
+
self.assertTrue(Approx(x.integral(Interval(2.1), Interval(2.1))) == Interval(0.))
|
|
265
|
+
self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
|
|
266
|
+
self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
|
|
267
|
+
self.assertTrue(Approx(x.integral(Interval(17.), Interval(20.))) == Interval(12,24))
|
|
268
|
+
self.assertTrue(Approx(x.integral(Interval(28.), Interval(33.))) == Interval(17,31))
|
|
269
|
+
self.assertTrue(Approx(x.integral(Interval(20.), Interval(28.))) == Interval(51,88))
|
|
270
|
+
self.assertTrue(Approx(x.integral(Interval(17.), Interval(33.))) == Interval(80,143))
|
|
271
|
+
self.assertTrue(Approx(x.integral(Interval(22.5), Interval(23))) == Interval(4.5,6))
|
|
272
|
+
self.assertTrue(Approx(x.integral(Interval(8.5), Interval(10.5))) == Interval(-18,-9.5))
|
|
273
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(7))) == Interval(-23,13))
|
|
274
|
+
self.assertTrue(Approx(x.integral(Interval(2), Interval(6))) == Interval(-19,4))
|
|
275
|
+
self.assertTrue(Approx(x.integral(Interval(0,2), Interval(6,7))) == Interval(-29,19))
|
|
276
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(17))) == Interval(-85,-4))
|
|
277
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(38))) == Interval(1,161))
|
|
278
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(17,38))) == Interval(-85,161))
|
|
279
|
+
self.assertTrue(Approx(x.integral(Interval(10), Interval(13))) == Interval(-21,-11))
|
|
280
|
+
self.assertTrue(Approx(x.integral(Interval(17), Interval(20))) == Interval(12,24))
|
|
281
|
+
self.assertTrue(Approx(x.integral(Interval(13), Interval(17))) == Interval(-11,11))
|
|
282
|
+
self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17))) == Interval(-32,11))
|
|
283
|
+
self.assertTrue(Approx(x.integral(Interval(13), Interval(17,20))) == Interval(-11,35))
|
|
284
|
+
self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17,20))) == Interval(-32,35))
|
|
285
|
+
self.assertTrue(Approx(x.integral(Interval(5,10), Interval(31,42))) == Interval(-6,180))
|
|
286
|
+
|
|
287
|
+
def test_computing_integration_two_interval_bounds__tube1_01(self):
|
|
288
|
+
|
|
289
|
+
x = predef.tube_test_1_01()
|
|
290
|
+
|
|
291
|
+
self.assertTrue(Approx(x.integral(Interval(20), Interval(20))) == Interval(0.))
|
|
292
|
+
self.assertTrue(Approx(x.integral(Interval(2.1), Interval(2.1))) == Interval(0.))
|
|
293
|
+
self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
|
|
294
|
+
self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
|
|
295
|
+
self.assertTrue(Approx(x.integral(Interval(17.), Interval(20.))) == Interval(12,24))
|
|
296
|
+
self.assertTrue(Approx(x.integral(Interval(28.), Interval(33.))) == Interval(17,31))
|
|
297
|
+
self.assertTrue(Approx(x.integral(Interval(20.), Interval(28.))) == Interval(51,88))
|
|
298
|
+
self.assertTrue(Approx(x.integral(Interval(17.), Interval(33.))) == Interval(80,143))
|
|
299
|
+
self.assertTrue(Approx(x.integral(Interval(22.5), Interval(23))) == Interval(4.5,6))
|
|
300
|
+
self.assertTrue(Approx(x.integral(Interval(8.5), Interval(10.5))) == Interval(-18,-9.5))
|
|
301
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(7))) == Interval(-23,13))
|
|
302
|
+
self.assertTrue(Approx(x.integral(Interval(2), Interval(6))) == Interval(-19,4))
|
|
303
|
+
self.assertTrue(Approx(x.integral(Interval(0,2), Interval(6,7))) == Interval(-29,19))
|
|
304
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(17))) == Interval(-85,-4))
|
|
305
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(38))) == Interval(1,161))
|
|
306
|
+
self.assertTrue(Approx(x.integral(Interval(0), Interval(17,38))) == Interval(-85,161))
|
|
307
|
+
self.assertTrue(Approx(x.integral(Interval(10), Interval(13))) == Interval(-21,-11))
|
|
308
|
+
self.assertTrue(Approx(x.integral(Interval(17), Interval(20))) == Interval(12,24))
|
|
309
|
+
self.assertTrue(Approx(x.integral(Interval(13), Interval(17))) == Interval(-11,11))
|
|
310
|
+
self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17))) == Interval(-32,11))
|
|
311
|
+
self.assertTrue(Approx(x.integral(Interval(13), Interval(17,20))) == Interval(-11,35))
|
|
312
|
+
self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17,20))) == Interval(-32,35))
|
|
313
|
+
self.assertTrue(Approx(x.integral(Interval(5,10), Interval(31,42))) == Interval(-6,180))
|
|
314
|
+
|
|
315
|
+
def test_computing_integration_two_interval_bounds__tube4(self):
|
|
316
|
+
|
|
317
|
+
x = predef.tube_test4()
|
|
318
|
+
x.set(Interval(-1,1), Interval(10,11))
|
|
319
|
+
|
|
320
|
+
self.assertTrue(Approx(x.integral(Interval(0,8), Interval(15,21)),1e-8) == Interval(-0.5,36.5))
|
|
321
|
+
self.assertTrue(Approx(x.integral(Interval(0,8), Interval(9,21)),1e-8) == Interval(-2,36.5))
|
|
322
|
+
|
|
323
|
+
def test_computing_integration_two_interval_bounds__tube4_05(self):
|
|
324
|
+
|
|
325
|
+
x = predef.tube_test4_05()
|
|
326
|
+
|
|
327
|
+
self.assertTrue(Approx(x.integral(Interval(0,8), Interval(15,21))) == Interval(-0.5,36.5))
|
|
328
|
+
self.assertTrue(Approx(x.integral(Interval(0,8), Interval(9,21))) == Interval(-2,36.5))
|
|
329
|
+
|
|
330
|
+
def test_computing_partial_integration_two_interval_bounds__tube1(self):
|
|
331
|
+
|
|
332
|
+
x = predef.tube_test_1()
|
|
333
|
+
x.set_ith_slice(Interval(-4,2), 14)
|
|
334
|
+
|
|
335
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0), Interval(0))) == (Interval(0.), Interval(0.)))
|
|
336
|
+
self.assertTrue(Approx(x.partial_integral(Interval(20), Interval(20))) == (Interval(0.), Interval(0.)))
|
|
337
|
+
self.assertTrue(Approx(x.partial_integral(Interval(22,23), Interval(24,25))) == (Interval(8,24), Interval(13,37)))
|
|
338
|
+
self.assertTrue(Approx(x.partial_integral(Interval(17,20), Interval(28,33))) == (Interval(51,80), Interval(88,143)))
|
|
339
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(7.))) == (Interval(-23), Interval(13)))
|
|
340
|
+
self.assertTrue(Approx(x.partial_integral(Interval(2.), Interval(6.))) == (Interval(-19), Interval(4)))
|
|
341
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0,2), Interval(6,7))) == (Interval(-29,-13), Interval(-2,19)))
|
|
342
|
+
self.assertTrue(Approx(x.partial_integral(Interval(10,13), Interval(17,20))) == (Interval(-32,1), Interval(0,35)))
|
|
343
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(46.))) == (Interval(-3), Interval(194)))
|
|
344
|
+
|
|
345
|
+
def test_computing_partial_integration_two_interval_bounds__tube1_01(self):
|
|
346
|
+
|
|
347
|
+
x = predef.tube_test_1_01()
|
|
348
|
+
|
|
349
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0), Interval(0))) == (Interval(0.), Interval(0.)))
|
|
350
|
+
self.assertTrue(Approx(x.partial_integral(Interval(20), Interval(20))) == (Interval(0.), Interval(0.)))
|
|
351
|
+
self.assertTrue(Approx(x.partial_integral(Interval(22,23), Interval(24,25))) == (Interval(8,24), Interval(13,37)))
|
|
352
|
+
self.assertTrue(Approx(x.partial_integral(Interval(17,20), Interval(28,33))) == (Interval(51,80), Interval(88,143)))
|
|
353
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(7.))) == (Interval(-23), Interval(13)))
|
|
354
|
+
self.assertTrue(Approx(x.partial_integral(Interval(2.), Interval(6.))) == (Interval(-19), Interval(4)))
|
|
355
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0,2), Interval(6,7))) == (Interval(-29,-13), Interval(-2,19)))
|
|
356
|
+
self.assertTrue(Approx(x.partial_integral(Interval(10,13), Interval(17,20))) == (Interval(-32,1), Interval(0,35)))
|
|
357
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(46.))) == (Interval(-3), Interval(194)))
|
|
358
|
+
|
|
359
|
+
def test_computing_partial_integration_two_interval_bounds__tube4(self):
|
|
360
|
+
|
|
361
|
+
x = predef.tube_test4()
|
|
362
|
+
x.set(Interval(-1,1), Interval(10,11))
|
|
363
|
+
|
|
364
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.1,1.1), Interval(2.6,3.2)))
|
|
365
|
+
== (Interval(1.5,3.1), Interval(3.0,6.2)))
|
|
366
|
+
self.assertTrue(Approx(x.partial_integral(Interval(8.6,9.9), Interval(13.2,13.6)),1e-8)
|
|
367
|
+
== (Interval(-3.35,-2.3), Interval(1.95,4.7)))
|
|
368
|
+
|
|
369
|
+
def test_computing_partial_integration_two_interval_bounds__tube4_05(self):
|
|
370
|
+
|
|
371
|
+
x = predef.tube_test4_05()
|
|
372
|
+
|
|
373
|
+
self.assertTrue(Approx(x.partial_integral(Interval(0.1,1.1), Interval(2.6,3.2)))
|
|
374
|
+
== (Interval(1.5,3.1), Interval(3.0,6.2)))
|
|
375
|
+
self.assertTrue(Approx(x.partial_integral(Interval(8.6,9.9), Interval(13.2,13.6)),1e-8)
|
|
376
|
+
== (Interval(-3.35,-2.3), Interval(1.95,4.7)))
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
if __name__ == '__main__':
|
|
380
|
+
unittest.main()
|
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
import math
|
|
14
|
+
|
|
15
|
+
class TestTDomain(unittest.TestCase):
|
|
16
|
+
|
|
17
|
+
def test_tdomain(self):
|
|
18
|
+
|
|
19
|
+
tdomain = create_tdomain()
|
|
20
|
+
tdomain.sample(Interval(0,1), 0.5)
|
|
21
|
+
self.assertTrue(tdomain.nb_tslices() == 4)
|
|
22
|
+
self.assertTrue(tdomain.t0_tf() == Interval(-oo,oo))
|
|
23
|
+
|
|
24
|
+
vector_tslices = tdomain.tslices_vector()
|
|
25
|
+
|
|
26
|
+
self.assertTrue(len(vector_tslices) == 4)
|
|
27
|
+
self.assertTrue(vector_tslices[0] == Interval(-oo,0))
|
|
28
|
+
self.assertTrue(vector_tslices[1] == Interval(0,0.5))
|
|
29
|
+
self.assertTrue(vector_tslices[2] == Interval(0.5,1))
|
|
30
|
+
self.assertTrue(vector_tslices[3] == Interval(1,oo))
|
|
31
|
+
|
|
32
|
+
self.assertTrue(tdomain.tslice(-10.) == Interval(-oo,0))
|
|
33
|
+
self.assertTrue(tdomain.tslice(-120.) == Interval(-oo,0))
|
|
34
|
+
self.assertTrue(tdomain.tslice(0.2) == Interval(0,0.5))
|
|
35
|
+
self.assertTrue(tdomain.tslice(5540.2) == Interval(1,oo))
|
|
36
|
+
|
|
37
|
+
self.assertTrue(tdomain.nb_tubes() == 0)
|
|
38
|
+
x = SlicedTube(tdomain, IntervalVector(2))
|
|
39
|
+
self.assertTrue(tdomain.nb_tubes() == 1)
|
|
40
|
+
|
|
41
|
+
def outside_scope(): # new scope
|
|
42
|
+
v = SlicedTube(tdomain, IntervalVector(3))
|
|
43
|
+
self.assertTrue(tdomain.nb_tubes() == 2)
|
|
44
|
+
# end of scope, removing the tube
|
|
45
|
+
|
|
46
|
+
outside_scope()
|
|
47
|
+
self.assertTrue(tdomain.nb_tubes() == 1)
|
|
48
|
+
|
|
49
|
+
def test_degenerated_tdomain(self):
|
|
50
|
+
|
|
51
|
+
tdomain = create_tdomain(Interval(1))
|
|
52
|
+
self.assertTrue(tdomain.nb_tslices() == 1)
|
|
53
|
+
self.assertTrue(tdomain.t0_tf() == Interval(1))
|
|
54
|
+
self.assertTrue(tdomain.nb_tubes() == 0)
|
|
55
|
+
|
|
56
|
+
vector_tslices = tdomain.tslices_vector()
|
|
57
|
+
|
|
58
|
+
self.assertTrue(len(vector_tslices) == 1)
|
|
59
|
+
self.assertTrue(vector_tslices[0] == Interval(1))
|
|
60
|
+
|
|
61
|
+
def test_tdomain_with_gates(self):
|
|
62
|
+
|
|
63
|
+
tdomain = create_tdomain(Interval(0,1), 0.5, True)
|
|
64
|
+
self.assertTrue(tdomain.nb_tslices() == 5)
|
|
65
|
+
self.assertTrue(tdomain.t0_tf() == Interval(0,1))
|
|
66
|
+
self.assertTrue(tdomain.nb_tubes() == 0)
|
|
67
|
+
|
|
68
|
+
vector_tslices = tdomain.tslices_vector()
|
|
69
|
+
|
|
70
|
+
self.assertTrue(len(vector_tslices) == 5)
|
|
71
|
+
self.assertTrue(vector_tslices[0] == Interval(0))
|
|
72
|
+
self.assertTrue(vector_tslices[1] == Interval(0,0.5))
|
|
73
|
+
self.assertTrue(vector_tslices[2] == Interval(0.5))
|
|
74
|
+
self.assertTrue(vector_tslices[3] == Interval(0.5,1))
|
|
75
|
+
self.assertTrue(vector_tslices[4] == Interval(1,1))
|
|
76
|
+
|
|
77
|
+
self.assertTrue(tdomain.tslice(0.) == Interval(0))
|
|
78
|
+
self.assertTrue(tdomain.tslice(0.1) == Interval(0,0.5))
|
|
79
|
+
self.assertTrue(tdomain.tslice(0.5) == Interval(0.5))
|
|
80
|
+
self.assertTrue(tdomain.tslice(0.6) == Interval(0.5,1))
|
|
81
|
+
self.assertTrue(tdomain.tslice(1.) == Interval(1))
|
|
82
|
+
|
|
83
|
+
def test_tdomain_with_sampling(self):
|
|
84
|
+
|
|
85
|
+
tdomain = create_tdomain()
|
|
86
|
+
tdomain.sample(1.)
|
|
87
|
+
self.assertTrue(tdomain.nb_tslices() == 2)
|
|
88
|
+
tdomain.sample(10.,False) # no gate
|
|
89
|
+
self.assertTrue(tdomain.nb_tslices() == 3)
|
|
90
|
+
tdomain.sample(10.,True) # second sampling with gate
|
|
91
|
+
self.assertTrue(tdomain.nb_tslices() == 4)
|
|
92
|
+
tdomain.sample(10.,True) # no more action
|
|
93
|
+
self.assertTrue(tdomain.nb_tslices() == 4)
|
|
94
|
+
|
|
95
|
+
vector_tslices = tdomain.tslices_vector()
|
|
96
|
+
|
|
97
|
+
self.assertTrue(len(vector_tslices) == 4)
|
|
98
|
+
self.assertTrue(vector_tslices[0] == Interval(-oo,1))
|
|
99
|
+
self.assertTrue(vector_tslices[1] == Interval(1,10))
|
|
100
|
+
self.assertTrue(vector_tslices[2] == Interval(10))
|
|
101
|
+
self.assertTrue(vector_tslices[3] == Interval(10,oo))
|
|
102
|
+
|
|
103
|
+
def test_unbounded_tdomain(self):
|
|
104
|
+
|
|
105
|
+
tdomain = create_tdomain()
|
|
106
|
+
self.assertTrue(tdomain.nb_tslices() == 1)
|
|
107
|
+
self.assertTrue(tdomain.t0_tf() == Interval(-oo,oo))
|
|
108
|
+
|
|
109
|
+
vector_tslices = tdomain.tslices_vector()
|
|
110
|
+
|
|
111
|
+
self.assertTrue(len(vector_tslices) == 1)
|
|
112
|
+
self.assertTrue(vector_tslices[0] == Interval(-oo,oo))
|
|
113
|
+
|
|
114
|
+
if __name__ == '__main__':
|
|
115
|
+
unittest.main()
|
|
@@ -0,0 +1,41 @@
|
|
|
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 TestVector(unittest.TestCase):
|
|
14
|
+
|
|
15
|
+
def test_Vector(self):
|
|
16
|
+
|
|
17
|
+
self.assertTrue(Vector([1,2])+Vector([3,4]) == Vector([4,6]))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_vector_specific_to_python(self):
|
|
21
|
+
|
|
22
|
+
x = Vector([1,2,3])
|
|
23
|
+
y = Vector.zero(3)
|
|
24
|
+
|
|
25
|
+
i = 0
|
|
26
|
+
for xi in x: # using __iter__
|
|
27
|
+
y[i] = xi
|
|
28
|
+
i = i+1
|
|
29
|
+
|
|
30
|
+
self.assertTrue(x == y)
|
|
31
|
+
|
|
32
|
+
a,b,c = x # using __iter__
|
|
33
|
+
self.assertTrue(a == x[0])
|
|
34
|
+
self.assertTrue(b == x[1])
|
|
35
|
+
self.assertTrue(c == x[2])
|
|
36
|
+
|
|
37
|
+
v = Vector([*x, 42]) # using __iter__
|
|
38
|
+
self.assertTrue(v == [1,2,3,42])
|
|
39
|
+
|
|
40
|
+
if __name__ == '__main__':
|
|
41
|
+
unittest.main()
|
|
@@ -0,0 +1,54 @@
|
|
|
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 TestArithmeticAdd(unittest.TestCase):
|
|
14
|
+
|
|
15
|
+
def test_ArithmeticAdd(self):
|
|
16
|
+
|
|
17
|
+
# inline Vector operator+(const Vector& x1, const Vector& x2)
|
|
18
|
+
self.assertTrue(Vector([1,2,3])+Vector([5,6,7]) == Vector([6,8,10]))
|
|
19
|
+
|
|
20
|
+
# inline IntervalVector operator+(const Vector& x1, const IntervalVector& x2)
|
|
21
|
+
self.assertTrue(Vector([1,2,3])+IntervalVector([[-1,1],[-2,2],[-3,3]]) == IntervalVector([[0,2],[0,4],[0,6]]))
|
|
22
|
+
|
|
23
|
+
# Matrix operator+(const M& x1, const M_& x2)
|
|
24
|
+
self.assertTrue(Matrix([[1,2],[3,4]])+Matrix([[3,4],[5,6]]) == Matrix([[4,6],[8,10]]))
|
|
25
|
+
self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+Matrix([[3,4],[5,6]]) == Matrix([[4,6],[8,10]]))
|
|
26
|
+
self.assertTrue(Matrix([[1,2],[3,4]])+Matrix([[3,4],[5,6]]).block(0,0,2,2) == Matrix([[4,6],[8,10]]))
|
|
27
|
+
self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+Matrix([[3,4],[5,6]]).block(0,0,2,2) == Matrix([[4,6],[8,10]]))
|
|
28
|
+
|
|
29
|
+
# IntervalMatrix operator+(const M& x1, const IM& x2)
|
|
30
|
+
self.assertTrue(Matrix([[1,2],[3,4]])+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
31
|
+
self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
32
|
+
self.assertTrue(Matrix([[1,2],[3,4]])+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
33
|
+
self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
34
|
+
|
|
35
|
+
# inline IntervalVector operator+(const IntervalVector& x1, const Vector& x2)
|
|
36
|
+
self.assertTrue(IntervalVector([[-1,1],[-2,2],[-3,3]])+Vector([1,2,3]) == IntervalVector([[0,2],[0,4],[0,6]]))
|
|
37
|
+
|
|
38
|
+
# inline IntervalVector operator+(const IntervalVector& x1, const IntervalVector& x2)
|
|
39
|
+
self.assertTrue(IntervalVector([[-1,1],[-2,2],[-3,3]])+IntervalVector([[1],[2],[3]]) == IntervalVector([[0,2],[0,4],[0,6]]))
|
|
40
|
+
|
|
41
|
+
# IntervalMatrix operator+(const IM& x1, const M& x2)
|
|
42
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+Matrix([[1,2],[3,4]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
43
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+Matrix([[1,2],[3,4]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
44
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+Matrix([[1,2],[3,4]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
45
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+Matrix([[1,2],[3,4]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
46
|
+
|
|
47
|
+
# IntervalMatrix operator+(const IM& x1, const IM_& x2)
|
|
48
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+IntervalMatrix([[[1],[2]],[[3],[4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
49
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+IntervalMatrix([[[1],[2]],[[3],[4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
50
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
51
|
+
self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
|
|
52
|
+
|
|
53
|
+
if __name__ == '__main__':
|
|
54
|
+
unittest.main()
|
|
@@ -0,0 +1,46 @@
|
|
|
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 TestArithmeticDiv(unittest.TestCase):
|
|
14
|
+
|
|
15
|
+
def test_ArithmeticDiv(self):
|
|
16
|
+
|
|
17
|
+
#inline Vector operator/(const Vector& x1, double x2)
|
|
18
|
+
self.assertTrue(Approx(Vector([1,2,3])/10.) == Vector([.1,.2,.3]))
|
|
19
|
+
|
|
20
|
+
#inline IntervalVector operator/(const Vector& x1, const Interval& x2)
|
|
21
|
+
self.assertTrue(Approx(Vector([1,2,3])/Interval(10.,oo)) == IntervalVector([[0,.1],[0,.2],[0,.3]]))
|
|
22
|
+
|
|
23
|
+
#Matrix operator/(const M& x1, double x2)
|
|
24
|
+
self.assertTrue(Approx(Matrix([[1,2],[3,4]])/10.) == Matrix([[.1,.2],[.3,.4]]))
|
|
25
|
+
self.assertTrue(Approx(Matrix([[1,2],[3,4]]).block(0,0,2,2)/10.) == Matrix([[.1,.2],[.3,.4]]))
|
|
26
|
+
|
|
27
|
+
#IntervalMatrix operator/(const M& x1, const Interval& x2)
|
|
28
|
+
self.assertTrue(Approx(Matrix([[1,2],[3,4]])/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
|
|
29
|
+
self.assertTrue(Approx(Matrix([[1,2],[3,4]]).block(0,0,2,2)/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
|
|
30
|
+
|
|
31
|
+
#inline IntervalVector operator/(const IntervalVector& x1, double x2)
|
|
32
|
+
self.assertTrue(Approx(IntervalVector([[1],[2],[3]])/10.) == IntervalVector([[.1],[.2],[.3]]))
|
|
33
|
+
|
|
34
|
+
#inline IntervalVector operator/(const IntervalVector& x1, const Interval& x2)
|
|
35
|
+
self.assertTrue(Approx(IntervalVector([[1],[2],[3]])/Interval(10.,oo)) == IntervalVector([[0,.1],[0,.2],[0,.3]]))
|
|
36
|
+
|
|
37
|
+
#IntervalMatrix operator/(const IM& x1, double x2)
|
|
38
|
+
self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]])/10.) == IntervalMatrix([[[.1],[.2]],[[.3],[.4]]]))
|
|
39
|
+
self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2)/10.) == IntervalMatrix([[[.1],[.2]],[[.3],[.4]]]))
|
|
40
|
+
|
|
41
|
+
#IntervalMatrix operator/(const IM& x1, const Interval& x2)
|
|
42
|
+
self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]])/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
|
|
43
|
+
self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2)/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
|
|
44
|
+
|
|
45
|
+
if __name__ == '__main__':
|
|
46
|
+
unittest.main()
|