metrolopy 0.6.3__py3-none-any.whl → 0.6.5__py3-none-any.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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # module test_misc
4
4
 
5
- # Copyright (C) 2019 National Research Council Canada
5
+ # Copyright (C) 2025 National Research Council Canada
6
6
  # Author: Harold Parks
7
7
 
8
8
  # This file is part of MetroloPy.
@@ -25,644 +25,646 @@ Simple unit tests for the gummy module
25
25
 
26
26
  import metrolopy as uc
27
27
  import numpy as np
28
+ import unittest
28
29
 
29
- def test_ku():
30
- from metrolopy.gummy import _ku
31
- from decimal import Decimal
32
-
33
- assert _ku(2.1,3.3) == 2.1*3.3
34
- assert _ku(2.1,Decimal(3.3)) == Decimal(float(2.1))*Decimal(3.3)
35
-
36
- def test_lg10():
37
- from metrolopy.gummy import _lg10
38
- from mpmath import mpf,log10
39
- from decimal import Decimal
40
- from fractions import Fraction
41
- import math
42
-
43
- assert _lg10(mpf(2.2)) == log10(mpf(2.2))
44
- assert _lg10(Decimal(2.2)) == Decimal(2.2).log10()
45
- assert _lg10(2.2) == np.log10(2.2)
46
- assert _lg10(Fraction(2,3)) == math.log10(float(Fraction(2,3)))
47
-
48
- def test_meta_properties():
49
- a = uc.gummy.cimethod
50
- assert isinstance(a,str)
51
- uc.gummy.cimethod = 'symmetric'
52
- assert uc.gummy.cimethod == 'symmetric'
53
- g = uc.gummy(1,1)
54
- assert g.cimethod == 'symmetric'
55
-
56
- try:
57
- uc.gummy.cimethod = 'asdfkjhasd'
58
- assert False
59
- except ValueError:
60
- pass
61
-
62
- uc.gummy.cimethod = a
63
-
64
- b = uc.gummy.bayesian
65
- assert isinstance(b,bool)
66
- uc.gummy.bayesian = not b
67
- assert uc.gummy.bayesian is not b
68
- g = uc.gummy(1,1)
69
- assert g.bayesian is not b
70
-
71
- uc.gummy.bayesian = b
72
-
73
- b = uc.gummy.style
74
- assert isinstance(b,str)
75
- uc.gummy.style = 'xf'
76
- assert uc.gummy.style == 'xf'
77
- g = uc.gummy(1,1)
78
- assert g.style == 'xf'
79
-
80
- try:
81
- uc.gummy.style = 'asdfjkhasdf'
82
- assert False
83
- except ValueError:
84
- pass
85
-
86
- uc.gummy.style = b
87
-
88
- k = uc.gummy.cmp_k
89
- p = uc.gummy.cmp_p
90
- if p is None:
91
- assert k >= 0
92
- else:
93
- assert k is None
94
- assert p >= 0
95
- assert p <= 1
30
+ class TestGummy(unittest.TestCase):
31
+ def test_ku(self):
32
+ from metrolopy.gummy import _ku
33
+ from decimal import Decimal
34
+
35
+ self.assertTrue(_ku(2.1,3.3) == 2.1*3.3)
36
+ self.assertTrue(_ku(2.1,Decimal(3.3)) == Decimal(float(2.1))*Decimal(3.3))
37
+
38
+ def test_lg10(self):
39
+ from metrolopy.gummy import _lg10
40
+ from mpmath import mpf,log10
41
+ from decimal import Decimal
42
+ from fractions import Fraction
43
+ import math
44
+
45
+ self.assertTrue(_lg10(mpf(2.2)) == log10(mpf(2.2)))
46
+ self.assertTrue(_lg10(Decimal(2.2)) == Decimal(2.2).log10())
47
+ self.assertTrue(_lg10(2.2) == np.log10(2.2))
48
+ self.assertTrue(_lg10(Fraction(2,3)) == math.log10(float(Fraction(2,3))))
49
+
50
+ def test_meta_properties(self):
51
+ a = uc.gummy.cimethod
52
+ self.assertTrue(isinstance(a,str))
53
+ uc.gummy.cimethod = 'symmetric'
54
+ self.assertTrue(uc.gummy.cimethod == 'symmetric')
55
+ g = uc.gummy(1,1)
56
+ self.assertTrue(g.cimethod == 'symmetric')
57
+
58
+ try:
59
+ uc.gummy.cimethod = 'asdfkjhasd'
60
+ self.assertTrue(False)
61
+ except ValueError:
62
+ pass
63
+
64
+ uc.gummy.cimethod = a
65
+
66
+ b = uc.gummy.bayesian
67
+ self.assertTrue(isinstance(b,bool))
68
+ uc.gummy.bayesian = not b
69
+ self.assertTrue(uc.gummy.bayesian is not b)
70
+ g = uc.gummy(1,1)
71
+ self.assertTrue(g.bayesian is not b)
72
+
73
+ uc.gummy.bayesian = b
74
+
75
+ b = uc.gummy.style
76
+ self.assertTrue(isinstance(b,str))
77
+ uc.gummy.style = 'xf'
78
+ self.assertTrue(uc.gummy.style == 'xf')
79
+ g = uc.gummy(1,1)
80
+ self.assertTrue(g.style == 'xf')
81
+
82
+ try:
83
+ uc.gummy.style = 'asdfjkhasdf'
84
+ self.assertTrue(False)
85
+ except ValueError:
86
+ pass
87
+
88
+ uc.gummy.style = b
89
+
90
+ k = uc.gummy.cmp_k
91
+ p = uc.gummy.cmp_p
92
+ if p is None:
93
+ self.assertTrue(k >= 0)
94
+ else:
95
+ self.assertTrue(k is None)
96
+ self.assertTrue(p >= 0)
97
+ self.assertTrue(p <= 1)
98
+
99
+
100
+ uc.gummy.cmp_k = 2.1
101
+ self.assertTrue(uc.gummy.cmp_p is None)
102
+ self.assertTrue(uc.gummy.cmp_k == 2.1)
103
+
104
+ if k is None:
105
+ uc.gummy.cmp_p = p
106
+ else:
107
+ uc.gummy.cmp_k = k
108
+
109
+ try:
110
+ uc.gummy.p_method = 'ccp'
111
+ self.assertTrue(uc.gummy.p_method == 'ccp')
112
+ uc.gummy.p_method = None
113
+ self.assertTrue(uc.gummy.p_method == 'loc')
114
+ finally:
115
+ uc.gummy.p_method = 'loc'
116
+
117
+ d = uc.gummy.max_dof
118
+ uc.gummy.max_dof = 1021
119
+ self.assertTrue(uc.gummy.max_dof == 1021)
120
+ uc.gummy.max_dof = d
121
+
122
+ n = uc.gummy.nsig
123
+ uc.gummy.nsig = n + 1
124
+ self.assertTrue(uc.gummy.nsig == n + 1)
125
+ g = uc.gummy(1,1)
126
+ self.assertTrue(g.nsig == n + 1)
127
+ uc.gummy.nsig = n
128
+
129
+ ts = uc.gummy.thousand_spaces
130
+ self.assertTrue(isinstance(ts,bool))
131
+ uc.gummy.thousand_spaces = not ts
132
+ self.assertTrue(uc.gummy.thousand_spaces is not ts)
133
+ g = uc.gummy(1,1)
134
+ self.assertTrue(g.thousand_spaces is not ts)
135
+ uc.gummy.thousand_spaces = ts
136
+
137
+ def test_init(self):
138
+ g = uc.gummy(1.2,3.4)
139
+ self.assertTrue(g.x == 1.2)
140
+ self.assertTrue(g.u == 3.4)
141
+ self.assertTrue(g.U == g.u)
142
+ self.assertTrue(g.unit is uc.one)
143
+
144
+ gg = uc.gummy(g)
145
+ self.assertTrue(gg is not g)
146
+ self.assertTrue(gg.x == 1.2)
147
+ self.assertTrue(gg.u == 3.4)
148
+ self.assertTrue(g.correlation(gg) == 1)
149
+
150
+ q = uc.Quantity(5.6,unit='m')
151
+ gq = uc.gummy(q)
152
+ self.assertTrue(gq.x == 5.6)
153
+ self.assertTrue(gq.u == 0)
154
+ self.assertTrue(gq.unit is uc.unit('m'))
155
+
156
+ u = uc.ummy(7.8,9.1)
157
+ gu = uc.gummy(u)
158
+ self.assertTrue(gu.x == 7.8)
159
+ self.assertTrue(gu.u == 9.1)
160
+ self.assertTrue(gu.unit is uc.one)
161
+
162
+ ung = uc.gummy(2.1,unit='mm')
163
+ gun = uc.gummy(3.4,u=ung,unit='m')
164
+ self.assertTrue(gun.unit is uc.unit('m'))
165
+ self.assertTrue(gun.x == 3.4)
166
+ self.assertTrue(gun.U == 2.1)
167
+ self.assertTrue(gun.u == 2.1/1000)
168
+ self.assertTrue(gun.uunit is uc.unit('mm'))
169
+
170
+ ung = uc.Quantity(2.1,unit='mm')
171
+ gun = uc.gummy(3.4,u=ung,unit='m')
172
+ self.assertTrue(gun.unit is uc.unit('m'))
173
+ self.assertTrue(gun.x == 3.4)
174
+ self.assertTrue(gun.U == 2.1)
175
+ self.assertTrue(gun.u == 2.1/1000)
176
+ self.assertTrue(gun.uunit is uc.unit('mm'))
177
+
178
+ guu = uc.gummy(1,1,unit='m',uunit='m')
179
+ self.assertTrue(guu.unit is uc.unit('m'))
180
+ self.assertTrue(guu.uunit is None)
181
+
182
+ guuz = uc.gummy(1,unit='m',uunit='mm')
183
+ self.assertTrue(guuz.unit is uc.unit('m'))
184
+ self.assertTrue(guuz.uunit is None)
185
+
186
+ gp = uc.gummy(2,1,p=0.95)
187
+ self.assertTrue(gp.x == 2)
188
+ self.assertTrue(gp.p == 0.95)
189
+ self.assertTrue(abs(gp.k - 1.96) < 0.01)
190
+ self.assertTrue(abs(gp.u - 1/1.96) < 0.01)
191
+
192
+ gk = uc.gummy(3,1,k=2)
193
+ self.assertTrue(gk.x == 3)
194
+ self.assertTrue(gk.k == 2)
195
+ self.assertTrue(abs(gk.p - 0.954) < 0.1)
196
+
197
+ gk = uc.gummy(3,1,k=1.96)
198
+ self.assertTrue(gk.x == 3)
199
+ self.assertTrue(gk.k == 1.96)
200
+ self.assertTrue(abs(gk.p - 0.95) < 0.1)
201
+
202
+ gd = uc.gummy(uc.TriangularDist(2.2,0.73))
203
+ self.assertTrue(gd.x == 2.2)
204
+ self.assertTrue(abs(gd.u - np.sqrt(0.73**2/6)) < 1e-12)
205
+ self.assertTrue(abs(gd.U - np.sqrt(0.73**2/6)) < 1e-12)
206
+
207
+ gd = uc.gummy(uc.TriangularDist(2.2,0.73),k=2.6)
208
+ self.assertTrue(gd.x == 2.2)
209
+ self.assertTrue(abs(gd.u - np.sqrt(0.73**2/6)) < 1e-12)
210
+ self.assertTrue(abs(gd.U - 2.6*np.sqrt(0.73**2/6)) < 1e-12)
211
+
212
+ gd = uc.gummy(uc.TriangularDist(2.2,0.73),k=2.6,unit='m',uunit='cm')
213
+ self.assertTrue(gd.x == 2.2)
214
+ self.assertTrue(abs(gd.u - np.sqrt(0.73**2/6)) < 1e-12)
215
+ self.assertTrue(abs(gd.U - 2.6*100*np.sqrt(0.73**2/6)) < 1e-12)
216
+
217
+ try:
218
+ uc.gummy(3.3,1.3,unit='%',uunit='m')
219
+ self.assertTrue(False)
220
+ except uc.NoUnitConversionFoundError:
221
+ pass
222
+
223
+ gg = uc.gummy(3.3,1.4,unit='%',uunit=uc.one)
224
+ self.assertTrue(abs(gg.u - 100*1.4) < 1e-12)
225
+
226
+ gg = uc.gummy(3.3,1.4,unit='%',uunit='ppm')
227
+ self.assertTrue(abs(gg.u - 3.3*1.4e-6) < 1e-12)
228
+
229
+ gg = uc.gummy(3.3,1.4,unit='m',uunit='%')
230
+ self.assertTrue(abs(gg.u - 3.3*0.014) < 1e-12)
231
+
232
+ gg = uc.gummy(1,1,dof=3.3,utype='abc',name='def')
233
+ self.assertTrue(gg.dof == 3.3)
234
+ self.assertTrue(gg.utype == 'abc')
235
+ self.assertTrue(gg.name == 'def')
236
+
237
+ def test_U(self):
238
+ a = uc.gummy(1.1,2.2)
239
+ self.assertTrue(a.U == 2.2)
240
+ b = uc.gummy(3,4.4)
241
+ c = a + b
242
+ c.ubreakdown = [a,b]
243
+ self.assertTrue(c.U[0] == 2.2)
244
+ self.assertTrue(c.U[1] == 4.4)
245
+
246
+ a = uc.gummy(1.1,2.2,'m')
247
+ self.assertTrue(a.U == 2.2)
248
+ b = uc.gummy(3,4.4,'s')
249
+ c = a/b
250
+ c.ubreakdown = [a,b]
251
+ self.assertTrue(abs(c.U[0] - 2.2/3) < 1e-12)
252
+ self.assertTrue(abs(c.U[1] - 4.4*1.1/3**2) < 1e-12)
253
+
254
+ def test_set_U(self):
255
+ g = uc.gummy(1,1,k=2,unit='cm',uunit='mm')
256
+ self.assertTrue(g.U == 1)
257
+ self.assertTrue(g.uunit is uc.unit('mm'))
258
+ g.unit = 'm'
259
+ self.assertTrue(g.U == 0.001)
260
+
261
+ a = uc.gummy(1.1,2.2)
262
+ b = uc.gummy(3,4.4)
263
+ c = a + b
264
+ c.ubreakdown = [a,b]
265
+ self.assertTrue(c.U[0] == 2.2)
266
+ self.assertTrue(c.U[1] == 4.4)
267
+
268
+ def test_iset_U(self):
269
+ g = uc.gummy(1)
270
+ self.assertTrue(g._iset_U() == 0)
271
+ self.assertTrue(g._iset_U(unit='m').unit is uc.unit('m'))
272
+ self.assertTrue(g._iset_U(unit='m').value == 0)
273
+ self.assertTrue(g._iset_U(u=float('inf')) == float('inf'))
274
+ self.assertTrue(g._iset_U(u=float('inf'),unit='m').value == float('inf'))
275
+ self.assertTrue(g._iset_U(u=float('inf'),unit='m').unit is uc.unit('m'))
276
+
277
+ g = uc.gummy(1,1,k=2,unit='m')
278
+ self.assertTrue(g._iset_U(unit='m').value == 1)
279
+ self.assertTrue(g._iset_U(k=4) == 2)
280
+ self.assertTrue(g._iset_U(unit='%').value == 100)
281
+ self.assertTrue(g._iset_U(unit='%').unit is uc.unit('%'))
282
+ self.assertTrue(g._iset_U(unit='cm').value == 100)
283
+ self.assertTrue(g._iset_U(unit='cm').unit is uc.unit('cm'))
284
+
285
+ try:
286
+ self.assertTrue(g._iset_U(unit='kg'))
287
+ self.assertTrue(False)
288
+ except uc.NoUnitConversionFoundError:
289
+ pass
290
+
291
+ g = uc.gummy(0,1,unit='m')
292
+ g._iset_U(unit='%').value == float('inf')
293
+ g._iset_U(unit='%').unit is uc.unit('%')
294
+
295
+ g = uc.gummy(1,1,unit='degC')
296
+ self.assertTrue(g._iset_U(k=2) == 2)
297
+
298
+ def test_Usim(self):
299
+ g = uc.gummy(-8.5,1,unit='m')
300
+ g.sim()
301
+ self.assertTrue(abs(g.Usim[0] - 1) < 0.5)
302
+ self.assertTrue(abs(g.Usim[1] - 1) < 0.5)
303
+ g.uunit = '%'
304
+ self.assertTrue(abs(g.Usim[0] - 100*1/8.5) < 10)
305
+ self.assertTrue(abs(g.Usim[1] - 100*1/8.5) < 10)
306
+ g.uunit = 'mm'
307
+ self.assertTrue(abs(g.Usim[0] - 1000) < 500)
308
+ self.assertTrue(abs(g.Usim[1] - 1000) < 500)
309
+
310
+ def test_xusim(self):
311
+ """
312
+ tests gummy.xsim and gummy.usim
313
+ """
314
+ g = uc.gummy(-3.3,0.11)
315
+ g.sim()
316
+ self.assertTrue(abs(g.xsim + 3.3) < 0.1)
317
+ self.assertTrue(abs(g.usim - 0.11) < 0.1)
318
+
319
+ def test_cisim(self):
320
+ """
321
+ tests gummy.cisim and gummy.cimethod
322
+ """
323
+ g = uc.gummy(-3.3,0.11)
324
+ g.sim()
325
+
326
+ g.cimethod = 'symmetric'
327
+ ci = g.cisim
328
+ self.assertTrue(abs(ci[0] + 3.41) < 0.1)
329
+ self.assertTrue(abs(ci[1] + 3.19) < 0.1)
330
+
331
+ g.cimethod = 'shortest'
332
+ ci = g.cisim
333
+ self.assertTrue(abs(ci[0] + 3.41) < 0.1)
334
+ self.assertTrue(abs(ci[1] + 3.19) < 0.1)
335
+
336
+ try:
337
+ g.cimethod = 'asdfhasd'
338
+ self.assertTrue(False)
339
+ except ValueError:
340
+ pass
341
+
342
+ a = uc.gummy(uc.UniformDist(center=0,half_width=1))
343
+ b = a**2
344
+ b.p = 0.8
345
+ b.cimethod = 'shortest'
346
+ b.sim()
347
+ ci = b.cisim
348
+ self.assertTrue(abs(ci[0]) < 0.001)
349
+ self.assertTrue(abs(ci[1] - 0.64) < 0.01)
350
+ b.cimethod = 'symmetric'
351
+ ci = b.cisim
352
+ self.assertTrue(abs(ci[0]- 0.01) < 0.001)
353
+ self.assertTrue(abs(ci[1] - 0.81) < 0.01)
354
+
355
+ def test_simdata(self):
356
+ """
357
+ tests gummy.simdata and gummy.simsorted
358
+ """
359
+ g = uc.gummy(1,1)
360
+ g.sim(n=10)
361
+ self.assertTrue(len(g.simdata) == 10)
362
+ self.assertTrue(len(g.simsorted) == 10)
363
+ for i in range(9):
364
+ self.assertTrue(g.simsorted[i+1] >= g.simsorted[i])
365
+
366
+ def test_distribution(self):
367
+ g = uc.gummy(1,1)
368
+ self.assertTrue(isinstance(g.distribution,uc.Distribution))
369
+
370
+ def test_ksim(self):
371
+ g = uc.gummy(1,1)
372
+ g.p = 0.9545
373
+ g.sim()
374
+ self.assertTrue(abs(g.ksim - 2) < 0.1)
375
+
376
+ def test_independent(self):
377
+ a = uc.gummy(1,1)
378
+ b = uc.gummy(-2,2)
379
+ c = a + b
380
+ self.assertTrue(a.independent)
381
+ self.assertTrue(not c.independent)
382
+ d = uc.gummy(1)
383
+ self.assertTrue(not d.independent)
384
+
385
+ def test_name(self):
386
+ g = uc.gummy(1,1)
387
+ self.assertTrue(g.name is None)
388
+ g.name = 'abc'
389
+ self.assertTrue(g.name == 'abc')
390
+ g.name = ['def','g','hi','jkl']
391
+ self.assertTrue(g.name == 'def')
392
+ self.assertTrue(g.get_name() == 'def')
393
+ self.assertTrue(g.get_name(fmt='html') == 'g')
394
+ self.assertTrue(g.get_name(fmt='latex') == 'hi')
395
+ self.assertTrue(g.get_name(fmt='ascii') == 'jkl')
396
+ g.name = 'f'
397
+ self.assertTrue(g.get_name(fmt='html') == '<i>f</i>')
398
+ g.name = 'ff'
399
+ self.assertTrue(g.get_name(fmt='latex') == '\\text{ff}')
400
+ self.assertTrue(g.get_name(fmt='latex',norm=lambda x:'*'+x+'*') == '*ff*')
401
+
402
+ try:
403
+ g.get_name(fmt='asdgfads')
404
+ self.assertTrue(False)
405
+ except ValueError:
406
+ pass
407
+
408
+ g.name = None
409
+ self.assertTrue(g.name is None)
410
+
411
+ try:
412
+ g.name = 3
413
+ self.assertTrue(False)
414
+ except ValueError:
415
+ pass
416
+
417
+ try:
418
+ g.name = ['a','b']
419
+ self.assertTrue(False)
420
+ except ValueError:
421
+ pass
422
+
423
+ try:
424
+ g.name = [1,2]
425
+ self.assertTrue(False)
426
+ except ValueError:
427
+ pass
428
+
429
+ def test_unit(self):
430
+ g = uc.gummy(1,1,unit='m')
431
+ self.assertTrue(g.unit is uc.unit('m'))
432
+ self.assertTrue(str(g.unit) == 'm')
433
+ g.unit = 'cm'
434
+ self.assertTrue(str(g.unit) == 'cm')
435
+ self.assertTrue(g.x == 100)
436
+ self.assertTrue(g.u == 100)
437
+ g.unit = uc.unit('mm')
438
+ self.assertTrue(str(g.unit) == 'mm')
439
+ self.assertTrue(g.x == 1000)
440
+ self.assertTrue(g.u == 1000)
441
+
442
+ def test_uunit(self):
443
+ g = uc.gummy(1,1)
444
+ self.assertTrue(g.uunit is None)
445
+ g = uc.gummy(1,1,unit='m',uunit='cm')
446
+ self.assertTrue(str(g.uunit) == 'cm')
447
+
448
+ g = uc.gummy(1,unit='m',uunit='cm')
449
+ g.uunit = 'mm'
450
+ self.assertTrue(g.uunit is None)
451
+
452
+ g = uc.gummy(1,1,unit='m')
453
+ self.assertTrue(g.uunit is None)
454
+ g.uunit = 'cm'
455
+ self.assertTrue(str(g.uunit) == 'cm')
456
+ self.assertTrue(g.U == 100)
457
+ g.uunit = None
458
+ self.assertTrue(g.uunit is None)
459
+
460
+ def test_uunit_is_rel(self):
461
+ g = uc.gummy(1,1)
462
+ self.assertTrue(not g.uunit_is_rel)
463
+ g.uunit='%'
464
+ self.assertTrue(g.uunit_is_rel)
465
+
466
+ g = uc.gummy(1,1,unit='m')
467
+ self.assertTrue(not g.uunit_is_rel)
468
+ g.uunit = 'mm'
469
+ self.assertTrue(not g.uunit_is_rel)
470
+ g.uunit = '%'
471
+ self.assertTrue(g.uunit_is_rel)
472
+
473
+ def test_k(self):
474
+ g = uc.gummy(1)
475
+ self.assertTrue(g.k is None)
476
+
477
+ g = uc.gummy(1,1,k=2)
478
+ self.assertTrue(g.k == 2)
479
+ g.k = 3
480
+ self.assertTrue(g.k == 3)
481
+ try:
482
+ g.k = -1
483
+ self.assertTrue(False)
484
+ except ValueError:
485
+ pass
96
486
 
97
-
98
- uc.gummy.cmp_k = 2.1
99
- assert uc.gummy.cmp_p is None
100
- assert uc.gummy.cmp_k == 2.1
101
-
102
- if k is None:
103
- uc.gummy.cmp_p = p
104
- else:
105
- uc.gummy.cmp_k = k
106
-
107
- try:
108
- uc.gummy.p_method = 'ccp'
109
- assert uc.gummy.p_method == 'ccp'
110
487
  uc.gummy.p_method = None
111
- assert uc.gummy.p_method == 'loc'
112
- finally:
113
- uc.gummy.p_method = 'loc'
114
-
115
- d = uc.gummy.max_dof
116
- uc.gummy.max_dof = 1021
117
- assert uc.gummy.max_dof == 1021
118
- uc.gummy.max_dof = d
119
-
120
- n = uc.gummy.nsig
121
- uc.gummy.nsig = n + 1
122
- assert uc.gummy.nsig == n + 1
123
- g = uc.gummy(1,1)
124
- assert g.nsig == n + 1
125
- uc.gummy.nsig = n
126
-
127
- ts = uc.gummy.thousand_spaces
128
- assert isinstance(ts,bool)
129
- uc.gummy.thousand_spaces = not ts
130
- assert uc.gummy.thousand_spaces is not ts
131
- g = uc.gummy(1,1)
132
- assert g.thousand_spaces is not ts
133
- uc.gummy.thousand_spaces = ts
134
-
135
- def test_init():
136
- g = uc.gummy(1.2,3.4)
137
- assert g.x == 1.2
138
- assert g.u == 3.4
139
- assert g.U == g.u
140
- assert g.unit is uc.one
141
-
142
- gg = uc.gummy(g)
143
- assert gg is not g
144
- assert gg.x == 1.2
145
- assert gg.u == 3.4
146
- assert g.correlation(gg) == 1
147
-
148
- q = uc.Quantity(5.6,unit='m')
149
- gq = uc.gummy(q)
150
- assert gq.x == 5.6
151
- assert gq.u == 0
152
- assert gq.unit is uc.unit('m')
153
-
154
- u = uc.ummy(7.8,9.1)
155
- gu = uc.gummy(u)
156
- assert gu.x == 7.8
157
- assert gu.u == 9.1
158
- assert gu.unit is uc.one
159
-
160
- ung = uc.gummy(2.1,unit='mm')
161
- gun = uc.gummy(3.4,u=ung,unit='m')
162
- assert gun.unit is uc.unit('m')
163
- assert gun.x == 3.4
164
- assert gun.U == 2.1
165
- assert gun.u == 2.1/1000
166
- assert gun.uunit is uc.unit('mm')
167
-
168
- ung = uc.Quantity(2.1,unit='mm')
169
- gun = uc.gummy(3.4,u=ung,unit='m')
170
- assert gun.unit is uc.unit('m')
171
- assert gun.x == 3.4
172
- assert gun.U == 2.1
173
- assert gun.u == 2.1/1000
174
- assert gun.uunit is uc.unit('mm')
175
-
176
- guu = uc.gummy(1,1,unit='m',uunit='m')
177
- assert guu.unit is uc.unit('m')
178
- assert guu.uunit is None
179
-
180
- guuz = uc.gummy(1,unit='m',uunit='mm')
181
- assert guuz.unit is uc.unit('m')
182
- assert guuz.uunit is None
183
-
184
- gp = uc.gummy(2,1,p=0.95)
185
- assert gp.x == 2
186
- assert gp.p == 0.95
187
- assert abs(gp.k - 1.96) < 0.01
188
- assert abs(gp.u - 1/1.96) < 0.01
189
-
190
- gk = uc.gummy(3,1,k=2)
191
- assert gk.x == 3
192
- assert gk.k == 2
193
- assert abs(gk.p - 0.954) < 0.1
194
-
195
- gk = uc.gummy(3,1,k=1.96)
196
- assert gk.x == 3
197
- assert gk.k == 1.96
198
- assert abs(gk.p - 0.95) < 0.1
199
-
200
- gd = uc.gummy(uc.TriangularDist(2.2,0.73))
201
- assert gd.x == 2.2
202
- assert abs(gd.u - np.sqrt(0.73**2/6)) < 1e-12
203
- assert abs(gd.U - np.sqrt(0.73**2/6)) < 1e-12
204
-
205
- gd = uc.gummy(uc.TriangularDist(2.2,0.73),k=2.6)
206
- assert gd.x == 2.2
207
- assert abs(gd.u - np.sqrt(0.73**2/6)) < 1e-12
208
- assert abs(gd.U - 2.6*np.sqrt(0.73**2/6)) < 1e-12
209
-
210
- gd = uc.gummy(uc.TriangularDist(2.2,0.73),k=2.6,unit='m',uunit='cm')
211
- assert gd.x == 2.2
212
- assert abs(gd.u - np.sqrt(0.73**2/6)) < 1e-12
213
- assert abs(gd.U - 2.6*100*np.sqrt(0.73**2/6)) < 1e-12
214
-
215
- try:
216
- uc.gummy(3.3,1.3,unit='%',uunit='m')
217
- assert False
218
- except uc.NoUnitConversionFoundError:
219
- pass
220
-
221
- gg = uc.gummy(3.3,1.4,unit='%',uunit=uc.one)
222
- assert abs(gg.u - 100*1.4) < 1e-12
223
-
224
- gg = uc.gummy(3.3,1.4,unit='%',uunit='ppm')
225
- assert abs(gg.u - 3.3*1.4e-6) < 1e-12
226
-
227
- gg = uc.gummy(3.3,1.4,unit='m',uunit='%')
228
- assert abs(gg.u - 3.3*0.014) < 1e-12
229
-
230
- gg = uc.gummy(1,1,dof=3.3,utype='abc',name='def')
231
- assert gg.dof == 3.3
232
- assert gg.utype == 'abc'
233
- assert gg.name == 'def'
234
-
235
- def test_U():
236
- a = uc.gummy(1.1,2.2)
237
- assert a.U == 2.2
238
- b = uc.gummy(3,4.4)
239
- c = a + b
240
- c.ubreakdown = [a,b]
241
- assert c.U[0] == 2.2
242
- assert c.U[1] == 4.4
243
-
244
- a = uc.gummy(1.1,2.2,'m')
245
- assert a.U == 2.2
246
- b = uc.gummy(3,4.4,'s')
247
- c = a/b
248
- c.ubreakdown = [a,b]
249
- assert abs(c.U[0] - 2.2/3) < 1e-12
250
- assert abs(c.U[1] - 4.4*1.1/3**2) < 1e-12
251
-
252
- def test_set_U():
253
- g = uc.gummy(1,1,k=2,unit='cm',uunit='mm')
254
- assert g.U == 1
255
- assert g.uunit is uc.unit('mm')
256
- g.unit = 'm'
257
- assert g.U == 0.001
258
-
259
- a = uc.gummy(1.1,2.2)
260
- b = uc.gummy(3,4.4)
261
- c = a + b
262
- c.ubreakdown = [a,b]
263
- assert c.U[0] == 2.2
264
- assert c.U[1] == 4.4
265
-
266
- def test_iset_U():
267
- g = uc.gummy(1)
268
- assert g._iset_U() == 0
269
- assert g._iset_U(unit='m').unit is uc.unit('m')
270
- assert g._iset_U(unit='m').value == 0
271
- assert g._iset_U(u=float('inf')) == float('inf')
272
- assert g._iset_U(u=float('inf'),unit='m').value == float('inf')
273
- assert g._iset_U(u=float('inf'),unit='m').unit is uc.unit('m')
274
-
275
- g = uc.gummy(1,1,k=2,unit='m')
276
- assert g._iset_U(unit='m').value == 1
277
- assert g._iset_U(k=4) == 2
278
- assert g._iset_U(unit='%').value == 100
279
- assert g._iset_U(unit='%').unit is uc.unit('%')
280
- assert g._iset_U(unit='cm').value == 100
281
- assert g._iset_U(unit='cm').unit is uc.unit('cm')
282
-
283
- try:
284
- assert g._iset_U(unit='kg')
285
- assert False
286
- except uc.NoUnitConversionFoundError:
287
- pass
288
-
289
- g = uc.gummy(0,1,unit='m')
290
- g._iset_U(unit='%').value == float('inf')
291
- g._iset_U(unit='%').unit is uc.unit('%')
292
-
293
- g = uc.gummy(1,1,unit='degC')
294
- assert g._iset_U(k=2) == 2
295
-
296
- def test_Usim():
297
- g = uc.gummy(-8.5,1,unit='m')
298
- g.sim()
299
- assert abs(g.Usim[0] - 1) < 0.5
300
- assert abs(g.Usim[1] - 1) < 0.5
301
- g.uunit = '%'
302
- assert abs(g.Usim[0] - 100*1/8.5) < 10
303
- assert abs(g.Usim[1] - 100*1/8.5) < 10
304
- g.uunit = 'mm'
305
- assert abs(g.Usim[0] - 1000) < 500
306
- assert abs(g.Usim[1] - 1000) < 500
307
-
308
- def test_xusim():
309
- """
310
- tests gummy.xsim and gummy.usim
311
- """
312
- g = uc.gummy(-3.3,0.11)
313
- g.sim()
314
- assert abs(g.xsim + 3.3) < 0.1
315
- assert abs(g.usim - 0.11) < 0.1
316
-
317
- def test_cisim():
318
- """
319
- tests gummy.cisim and gummy.cimethod
320
- """
321
- g = uc.gummy(-3.3,0.11)
322
- g.sim()
323
-
324
- g.cimethod = 'symmetric'
325
- ci = g.cisim
326
- assert abs(ci[0] + 3.41) < 0.1
327
- assert abs(ci[1] + 3.19) < 0.1
328
-
329
- g.cimethod = 'shortest'
330
- ci = g.cisim
331
- assert abs(ci[0] + 3.41) < 0.1
332
- assert abs(ci[1] + 3.19) < 0.1
333
-
334
- try:
335
- g.cimethod = 'asdfhasd'
336
- assert False
337
- except ValueError:
338
- pass
339
-
340
- a = uc.gummy(uc.UniformDist(center=0,half_width=1))
341
- b = a**2
342
- b.p = 0.8
343
- b.cimethod = 'shortest'
344
- b.sim()
345
- ci = b.cisim
346
- assert abs(ci[0]) < 0.001
347
- assert abs(ci[1] - 0.64) < 0.01
348
- b.cimethod = 'symmetric'
349
- ci = b.cisim
350
- assert abs(ci[0]- 0.01) < 0.001
351
- assert abs(ci[1] - 0.81) < 0.01
352
-
353
- def test_simdata():
354
- """
355
- tests gummy.simdata and gummy.simsorted
356
- """
357
- g = uc.gummy(1,1)
358
- g.sim(n=10)
359
- assert len(g.simdata) == 10
360
- assert len(g.simsorted) == 10
361
- for i in range(9):
362
- assert g.simsorted[i+1] >= g.simsorted[i]
363
-
364
- def test_distribution():
365
- g = uc.gummy(1,1)
366
- assert isinstance(g.distribution,uc.Distribution)
367
-
368
- def test_ksim():
369
- g = uc.gummy(1,1)
370
- g.p = 0.9545
371
- g.sim()
372
- assert abs(g.ksim - 2) < 0.1
373
-
374
- def test_independent():
375
- a = uc.gummy(1,1)
376
- b = uc.gummy(-2,2)
377
- c = a + b
378
- assert a.independent
379
- assert not c.independent
380
- d = uc.gummy(1)
381
- assert not d.independent
382
-
383
- def test_name():
384
- g = uc.gummy(1,1)
385
- assert g.name is None
386
- g.name = 'abc'
387
- assert g.name == 'abc'
388
- g.name = ['def','g','hi','jkl']
389
- assert g.name == 'def'
390
- assert g.get_name() == 'def'
391
- assert g.get_name(fmt='html') == 'g'
392
- assert g.get_name(fmt='latex') == 'hi'
393
- assert g.get_name(fmt='ascii') == 'jkl'
394
- g.name = 'f'
395
- assert g.get_name(fmt='html') == '<i>f</i>'
396
- g.name = 'ff'
397
- assert g.get_name(fmt='latex') == '\\text{ff}'
398
- assert g.get_name(fmt='latex',norm=lambda x:'*'+x+'*') == '*ff*'
399
-
400
- try:
401
- g.get_name(fmt='asdgfads')
402
- assert False
403
- except ValueError:
404
- pass
405
-
406
- g.name = None
407
- assert g.name is None
408
-
409
- try:
410
- g.name = 3
411
- assert False
412
- except ValueError:
413
- pass
414
-
415
- try:
416
- g.name = ['a','b']
417
- assert False
418
- except ValueError:
419
- pass
420
-
421
- try:
422
- g.name = [1,2]
423
- assert False
424
- except ValueError:
425
- pass
426
-
427
- def test_unit():
428
- g = uc.gummy(1,1,unit='m')
429
- assert g.unit is uc.unit('m')
430
- assert str(g.unit) == 'm'
431
- g.unit = 'cm'
432
- assert str(g.unit) == 'cm'
433
- assert g.x == 100
434
- assert g.u == 100
435
- g.unit = uc.unit('mm')
436
- assert str(g.unit) == 'mm'
437
- assert g.x == 1000
438
- assert g.u == 1000
439
-
440
- def test_uunit():
441
- g = uc.gummy(1,1)
442
- assert g.uunit is None
443
- g = uc.gummy(1,1,unit='m',uunit='cm')
444
- assert str(g.uunit) == 'cm'
445
-
446
- g = uc.gummy(1,unit='m',uunit='cm')
447
- g.uunit = 'mm'
448
- assert g.uunit is None
449
-
450
- g = uc.gummy(1,1,unit='m')
451
- assert g.uunit is None
452
- g.uunit = 'cm'
453
- assert str(g.uunit) == 'cm'
454
- assert g.U == 100
455
- g.uunit = None
456
- assert g.uunit is None
457
-
458
- def test_uunit_is_rel():
459
- g = uc.gummy(1,1)
460
- assert not g.uunit_is_rel
461
- g.uunit='%'
462
- assert g.uunit_is_rel
463
-
464
- g = uc.gummy(1,1,unit='m')
465
- assert not g.uunit_is_rel
466
- g.uunit = 'mm'
467
- assert not g.uunit_is_rel
468
- g.uunit = '%'
469
- assert g.uunit_is_rel
470
-
471
- def test_k():
472
- g = uc.gummy(1)
473
- assert g.k is None
474
-
475
- g = uc.gummy(1,1,k=2)
476
- assert g.k == 2
477
- g.k = 3
478
- assert g.k == 3
479
- try:
480
- g.k = -1
481
- assert False
482
- except ValueError:
483
- pass
484
-
485
- uc.gummy.p_method = None
486
- g.p = 0.68
487
- assert abs(g.k - 0.99) < 0.01
488
- g.p = 0.95
489
- assert abs(g.k - 1.96) < 0.01
490
-
491
- def test_p():
492
- uc.gummy.p_method = None
493
- g = uc.gummy(1,1)
494
- g.p = 0.95
495
- assert g.p == 0.95
496
- g.k = 2
497
- assert abs(g.p - 0.9545) < 0.0001
498
-
499
- try:
500
- g.p = -0.1
501
- assert False
502
- except ValueError:
503
- pass
504
- try:
505
- g.p = 1.1
506
- assert False
507
- except ValueError:
508
- pass
509
-
510
- def test_correlation():
511
- a = uc.gummy(1,1)
512
- b = uc.gummy(1,2)
513
- c = a + b
514
- assert a.correlation(b) == 0
515
- assert a.correlation(1) == 0
516
- assert abs(c.correlation(a) - 1/c.u) < 1e-4
517
- assert abs(a.correlation(c) - 1/c.u) < 1e-4
518
- assert abs(c.correlation(b) - 2/c.u) < 1e-4
519
- assert abs(b.correlation(c) - 2/c.u) < 1e-4
520
- assert a.correlation(a) == 1
521
-
522
- def test_covariance():
523
- a = uc.gummy(1,1)
524
- b = uc.gummy(1,2)
525
- c = a + b
526
- assert a.covariance(b) == 0
527
- assert a.covariance(1) == 0
528
- assert abs(c.covariance(a) - 1) < 1e-4
529
- assert abs(a.covariance(c) - 1) < 1e-4
530
- assert abs(c.covariance(b) - 4) < 1e-4
531
- assert abs(b.covariance(c) - 4) < 1e-4
532
- assert a.covariance(a) == 1
533
- assert b.covariance(b) == 4
534
-
535
- def test_correlation_matrix():
536
- a = uc.gummy(1,1)
537
- b = uc.gummy(1,2)
538
- c = a + b
539
- m = uc.gummy.correlation_matrix([a,b,c])
540
- assert m[0][0] == m[1][1] == m[2,2] == 1
541
- assert m[0][1] == m[1][0] == 0
542
- assert abs(m[2][0] - 1/c.u) < 1e-4
543
- assert abs(m[0][2] - 1/c.u) < 1e-4
544
- assert abs(m[2][1] - 2/c.u) < 1e-4
545
- assert abs(m[1][2] - 2/c.u) < 1e-4
546
-
547
- def test_covariance_matrix():
548
- a = uc.gummy(1,1)
549
- b = uc.gummy(1,2)
550
- c = a + b
551
- m = uc.gummy.covariance_matrix([a,b,c])
552
- assert m[0][0] == 1
553
- assert m[1][1] == 4
554
- assert abs(m[2][2] - 5) < 1e-4
555
- assert m[0][1] == m[1][0] == 0
556
- assert abs(m[2][0] - 1) < 1e-4
557
- assert abs(m[0][2] - 1) < 1e-4
558
- assert abs(m[2][1] - 4) < 1e-4
559
- assert abs(m[1][2] - 4) < 1e-4
560
-
561
- def test_correlation_sim():
562
- a = uc.gummy(1,1)
563
- b = uc.gummy(1,2)
564
- c = a + b
565
- uc.gummy.simulate([a,b,c])
566
- assert abs(a.correlation_sim(b)) < 1e-1
567
- assert abs(c.correlation_sim(a) - 1/c.u) < 1e-1
568
- assert abs(a.correlation_sim(c) - 1/c.u) < 1e-1
569
- assert abs(c.correlation_sim(b) - 2/c.u) < 1e-1
570
- assert abs(b.correlation_sim(c) - 2/c.u) < 1e-1
571
- assert abs(a.correlation_sim(a) - 1) < 1e-6
572
-
573
- def test_covariance_sim():
574
- a = uc.gummy(1,1)
575
- b = uc.gummy(1,2)
576
- c = a + b
577
- uc.gummy.simulate([a,b,c])
578
- assert abs(a.covariance_sim(b)) < 1e-1
579
- assert abs(c.covariance_sim(a) - 1) < 1e-1
580
- assert abs(a.covariance_sim(c) - 1) < 1e-1
581
- assert abs(c.covariance_sim(b) - 4) < 1e-1
582
- assert abs(b.covariance_sim(c) - 4) < 1e-1
583
- assert abs(a.covariance_sim(a) - 1) < 1e-1
584
- assert abs(b.covariance_sim(b) - 4) < 1e-1
585
-
586
- def test_correlation_matrix():
587
- a = uc.gummy(1,1)
588
- b = uc.gummy(1,2)
589
- c = a + b
590
- uc.gummy.simulate([a,b,c])
591
- m = uc.gummy.correlation_matrix_sim([a,b,c])
592
- assert abs(m[0][0] - 1) < 1e-1
593
- assert abs(m[1][1] - 1) < 1e-1
594
- assert abs(m[2][2] - 1) < 1e-1
595
- assert abs(m[0][1]) < 1e-1
596
- assert abs(m[1][0]) < 1e-1
597
- assert (m[2][0] - 1/c.u) < 1e-1
598
- assert (m[0][2] - 1/c.u) < 1e-1
599
- assert (m[2][1] - 2/c.u) < 1e-1
600
- assert (m[1][2] - 2/c.u) < 1e-1
601
-
602
- def test_covariance_matrix():
603
- a = uc.gummy(1,1)
604
- b = uc.gummy(1,2)
605
- c = a + b
606
- uc.gummy.simulate([a,b,c])
607
- m = uc.gummy.covariance_matrix_sim([a,b,c])
608
- assert abs(m[0][0] - 1) < 1e-1
609
- assert abs(m[1][1] - 4) < 1e-1
610
- assert abs(m[2][2] - 5) < 1e-1
611
- assert abs(m[0][1]) < 1e-1
612
- assert abs(m[1][0]) < 1e-1
613
- assert (m[2][0] - 1) < 1e-1
614
- assert (m[0][2] - 1) < 1e-1
615
- assert (m[2][1] - 4) < 1e-1
616
- assert (m[1][2] - 4) < 1e-1
617
-
618
- def test_finfo():
619
- a = uc.gummy(1,1)
620
- assert a.finfo.rel_u == 0
621
-
622
- def test_real():
623
- a = uc.gummy(1.1,0.3)
624
- b = a.real
625
- assert not a is b
626
- assert a.x == b.x
627
- assert a.u == b.u
628
- assert a.correlation(b) == 1
629
-
630
- def test_conjugate():
631
- a = uc.gummy(1.1,0.3)
632
- b = a.conjugate()
633
- assert not a is b
634
- assert a.x == b.x
635
- assert a.u == b.u
636
- assert a.correlation(b) == 1
637
-
638
- def test_angle():
639
- assert uc.gummy(1.1,0.3).angle() == 0
640
- assert abs(abs(uc.gummy(-1.1,0.3).angle()) - np.pi) < 1e-10
641
-
642
- def test_utype():
643
- a = uc.gummy(1.2,1,1,utype='A')
644
- assert a.utype == 'A'
645
- b = uc.gummy(1.2,1,1,utype='xyz')
646
- assert b.utype == 'xyz'
647
-
648
- def test_ufrom():
649
- a = uc.gummy(1.2,0.2,utype='A')
650
- b = uc.gummy(3.2,0.5,utype='A')
651
- c = uc.gummy(0.9,0.2,utype='B')
652
- d = a + b + c
653
- assert abs(d.ufrom('A') - np.sqrt(0.2**2+0.5**2)) < 1e-8
654
- uc.gummy.simulate([d,'A'])
655
- assert abs(d.ufrom('A',sim=True) - np.sqrt(0.2**2+0.5**2)) < 1e-2
656
- assert d.ufrom(c) == 0.2
657
-
658
- def test_dof_from():
659
- a = uc.gummy(1.2,0.2,dof=5,utype='A')
660
- b = uc.gummy(3.2,0.5,dof=7,utype='A')
661
- c = uc.gummy(0.9,0.2,utype='B')
662
- d = a + b + c
663
- assert abs(d.doffrom('A') - (0.2**2+0.5**2)**2/(0.2**4/5 + 0.5**4/7)) < 1e-10
664
- assert d.doffrom(a) == 5
665
-
488
+ g.p = 0.68
489
+ self.assertTrue(abs(g.k - 0.99) < 0.01)
490
+ g.p = 0.95
491
+ self.assertTrue(abs(g.k - 1.96) < 0.01)
492
+
493
+ def test_p(self):
494
+ uc.gummy.p_method = None
495
+ g = uc.gummy(1,1)
496
+ g.p = 0.95
497
+ self.assertTrue(g.p == 0.95)
498
+ g.k = 2
499
+ self.assertTrue(abs(g.p - 0.9545) < 0.0001)
500
+
501
+ try:
502
+ g.p = -0.1
503
+ self.assertTrue(False)
504
+ except ValueError:
505
+ pass
506
+ try:
507
+ g.p = 1.1
508
+ self.assertTrue(False)
509
+ except ValueError:
510
+ pass
511
+
512
+ def test_correlation(self):
513
+ a = uc.gummy(1,1)
514
+ b = uc.gummy(1,2)
515
+ c = a + b
516
+ self.assertTrue(a.correlation(b) == 0)
517
+ self.assertTrue(a.correlation(1) == 0)
518
+ self.assertTrue(abs(c.correlation(a) - 1/c.u) < 1e-4)
519
+ self.assertTrue(abs(a.correlation(c) - 1/c.u) < 1e-4)
520
+ self.assertTrue(abs(c.correlation(b) - 2/c.u) < 1e-4)
521
+ self.assertTrue(abs(b.correlation(c) - 2/c.u) < 1e-4)
522
+ self.assertTrue(a.correlation(a) == 1)
523
+
524
+ def test_covariance(self):
525
+ a = uc.gummy(1,1)
526
+ b = uc.gummy(1,2)
527
+ c = a + b
528
+ self.assertTrue(a.covariance(b) == 0)
529
+ self.assertTrue(a.covariance(1) == 0)
530
+ self.assertTrue(abs(c.covariance(a) - 1) < 1e-4)
531
+ self.assertTrue(abs(a.covariance(c) - 1) < 1e-4)
532
+ self.assertTrue(abs(c.covariance(b) - 4) < 1e-4)
533
+ self.assertTrue(abs(b.covariance(c) - 4) < 1e-4)
534
+ self.assertTrue(a.covariance(a) == 1)
535
+ self.assertTrue(b.covariance(b) == 4)
536
+
537
+ def test_correlation_matrix(self):
538
+ a = uc.gummy(1,1)
539
+ b = uc.gummy(1,2)
540
+ c = a + b
541
+ m = uc.gummy.correlation_matrix([a,b,c])
542
+ self.assertTrue(m[0][0] == m[1][1] == m[2,2] == 1)
543
+ self.assertTrue(m[0][1] == m[1][0] == 0)
544
+ self.assertTrue(abs(m[2][0] - 1/c.u) < 1e-4)
545
+ self.assertTrue(abs(m[0][2] - 1/c.u) < 1e-4)
546
+ self.assertTrue(abs(m[2][1] - 2/c.u) < 1e-4)
547
+ self.assertTrue(abs(m[1][2] - 2/c.u) < 1e-4)
548
+
549
+ def test_covariance_matrix(self):
550
+ a = uc.gummy(1,1)
551
+ b = uc.gummy(1,2)
552
+ c = a + b
553
+ m = uc.gummy.covariance_matrix([a,b,c])
554
+ self.assertTrue(m[0][0] == 1)
555
+ self.assertTrue(m[1][1] == 4)
556
+ self.assertTrue(abs(m[2][2] - 5) < 1e-4)
557
+ self.assertTrue(m[0][1] == m[1][0] == 0)
558
+ self.assertTrue(abs(m[2][0] - 1) < 1e-4)
559
+ self.assertTrue(abs(m[0][2] - 1) < 1e-4)
560
+ self.assertTrue(abs(m[2][1] - 4) < 1e-4)
561
+ self.assertTrue(abs(m[1][2] - 4) < 1e-4)
562
+
563
+ def test_correlation_sim(self):
564
+ a = uc.gummy(1,1)
565
+ b = uc.gummy(1,2)
566
+ c = a + b
567
+ uc.gummy.simulate([a,b,c])
568
+ self.assertTrue(abs(a.correlation_sim(b)) < 1e-1)
569
+ self.assertTrue(abs(c.correlation_sim(a) - 1/c.u) < 1e-1)
570
+ self.assertTrue(abs(a.correlation_sim(c) - 1/c.u) < 1e-1)
571
+ self.assertTrue(abs(c.correlation_sim(b) - 2/c.u) < 1e-1)
572
+ self.assertTrue(abs(b.correlation_sim(c) - 2/c.u) < 1e-1)
573
+ self.assertTrue(abs(a.correlation_sim(a) - 1) < 1e-6)
574
+
575
+ def test_covariance_sim(self):
576
+ a = uc.gummy(1,1)
577
+ b = uc.gummy(1,2)
578
+ c = a + b
579
+ uc.gummy.simulate([a,b,c])
580
+ self.assertTrue(abs(a.covariance_sim(b)) < 1e-1)
581
+ self.assertTrue(abs(c.covariance_sim(a) - 1) < 1e-1)
582
+ self.assertTrue(abs(a.covariance_sim(c) - 1) < 1e-1)
583
+ self.assertTrue(abs(c.covariance_sim(b) - 4) < 1e-1)
584
+ self.assertTrue(abs(b.covariance_sim(c) - 4) < 1e-1)
585
+ self.assertTrue(abs(a.covariance_sim(a) - 1) < 1e-1)
586
+ self.assertTrue(abs(b.covariance_sim(b) - 4) < 1e-1)
587
+
588
+ def test_correlation_matrix(self):
589
+ a = uc.gummy(1,1)
590
+ b = uc.gummy(1,2)
591
+ c = a + b
592
+ uc.gummy.simulate([a,b,c])
593
+ m = uc.gummy.correlation_matrix_sim([a,b,c])
594
+ self.assertTrue(abs(m[0][0] - 1) < 1e-1)
595
+ self.assertTrue(abs(m[1][1] - 1) < 1e-1)
596
+ self.assertTrue(abs(m[2][2] - 1) < 1e-1)
597
+ self.assertTrue(abs(m[0][1]) < 1e-1)
598
+ self.assertTrue(abs(m[1][0]) < 1e-1)
599
+ self.assertTrue((m[2][0] - 1/c.u) < 1e-1)
600
+ self.assertTrue((m[0][2] - 1/c.u) < 1e-1)
601
+ self.assertTrue((m[2][1] - 2/c.u) < 1e-1)
602
+ self.assertTrue((m[1][2] - 2/c.u) < 1e-1)
603
+
604
+ def test_covariance_matrix(self):
605
+ a = uc.gummy(1,1)
606
+ b = uc.gummy(1,2)
607
+ c = a + b
608
+ uc.gummy.simulate([a,b,c])
609
+ m = uc.gummy.covariance_matrix_sim([a,b,c])
610
+ self.assertTrue(abs(m[0][0] - 1) < 1e-1)
611
+ self.assertTrue(abs(m[1][1] - 4) < 1e-1)
612
+ self.assertTrue(abs(m[2][2] - 5) < 1e-1)
613
+ self.assertTrue(abs(m[0][1]) < 1e-1)
614
+ self.assertTrue(abs(m[1][0]) < 1e-1)
615
+ self.assertTrue((m[2][0] - 1) < 1e-1)
616
+ self.assertTrue((m[0][2] - 1) < 1e-1)
617
+ self.assertTrue((m[2][1] - 4) < 1e-1)
618
+ self.assertTrue((m[1][2] - 4) < 1e-1)
619
+
620
+ def test_finfo(self):
621
+ a = uc.gummy(1,1)
622
+ self.assertTrue(a.finfo.rel_u == 0)
623
+
624
+ def test_real(self):
625
+ a = uc.gummy(1.1,0.3)
626
+ b = a.real
627
+ self.assertTrue(not a is b)
628
+ self.assertTrue(a.x == b.x)
629
+ self.assertTrue(a.u == b.u)
630
+ self.assertTrue(a.correlation(b) == 1)
631
+
632
+ def test_conjugate(self):
633
+ a = uc.gummy(1.1,0.3)
634
+ b = a.conjugate()
635
+ self.assertTrue(not a is b)
636
+ self.assertTrue(a.x == b.x)
637
+ self.assertTrue(a.u == b.u)
638
+ self.assertTrue(a.correlation(b) == 1)
639
+
640
+ def test_angle(self):
641
+ self.assertTrue(uc.gummy(1.1,0.3).angle() == 0)
642
+ self.assertTrue(abs(abs(uc.gummy(-1.1,0.3).angle()) - np.pi) < 1e-10)
643
+
644
+ def test_utype(self):
645
+ a = uc.gummy(1.2,1,1,utype='A')
646
+ self.assertTrue(a.utype == 'A')
647
+ b = uc.gummy(1.2,1,1,utype='xyz')
648
+ self.assertTrue(b.utype == 'xyz')
649
+
650
+ def test_ufrom(self):
651
+ a = uc.gummy(1.2,0.2,utype='A')
652
+ b = uc.gummy(3.2,0.5,utype='A')
653
+ c = uc.gummy(0.9,0.2,utype='B')
654
+ d = a + b + c
655
+ self.assertTrue(abs(d.ufrom('A') - np.sqrt(0.2**2+0.5**2)) < 1e-8)
656
+ uc.gummy.simulate([d,'A'])
657
+ self.assertTrue(abs(d.ufrom('A',sim=True) - np.sqrt(0.2**2+0.5**2)) < 1e-2)
658
+ self.assertTrue(d.ufrom(c) == 0.2)
666
659
 
660
+ def test_dof_from(self):
661
+ a = uc.gummy(1.2,0.2,dof=5,utype='A')
662
+ b = uc.gummy(3.2,0.5,dof=7,utype='A')
663
+ c = uc.gummy(0.9,0.2,utype='B')
664
+ d = a + b + c
665
+ self.assertTrue(abs(d.doffrom('A') - (0.2**2+0.5**2)**2/(0.2**4/5 + 0.5**4/7)) < 1e-10)
666
+ self.assertTrue(d.doffrom(a) == 5)
667
667
 
668
-
668
+
669
+ if __name__ == '__main__':
670
+ unittest.main()