metrolopy 0.6.2__py3-none-any.whl → 0.6.4__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.
@@ -0,0 +1,670 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # module test_misc
4
+
5
+ # Copyright (C) 2025 National Research Council Canada
6
+ # Author: Harold Parks
7
+
8
+ # This file is part of MetroloPy.
9
+
10
+ # MetroloPy is free software: you can redistribute it and/or modify it under
11
+ # the terms of the GNU General Public License as published by the Free Software
12
+ # Foundation, either version 3 of the License, or (at your option) any later
13
+ # version.
14
+
15
+ # MetroloPy is distributed in the hope that it will be useful, but WITHOUT ANY
16
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18
+ # details.
19
+
20
+ # You should have received a copy of the GNU General Public License along with
21
+ # MetroloPy. If not, see <http://www.gnu.org/licenses/>.
22
+ """
23
+ Simple unit tests for the gummy module
24
+ """
25
+
26
+ import metrolopy as uc
27
+ import numpy as np
28
+ import unittest
29
+
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
486
+
487
+ uc.gummy.p_method = None
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)
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
+
668
+
669
+ if __name__ == '__main__':
670
+ unittest.main()