mirror of
				https://github.com/fjosw/pyerrors.git
				synced 2025-11-04 09:35:45 +01:00 
			
		
		
		
	Merge branch 'develop' into documentation
This commit is contained in:
		
				commit
				
					
						6f3abd0b36
					
				
			
		
					 4 changed files with 141 additions and 2 deletions
				
			
		
							
								
								
									
										51
									
								
								tests/integrate_test.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								tests/integrate_test.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
import numpy as np
 | 
			
		||||
import autograd.numpy as anp
 | 
			
		||||
import pyerrors as pe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_integration():
 | 
			
		||||
    def f(p, x):
 | 
			
		||||
        return p[0] * x + p[1] * x**2 - p[2] / x
 | 
			
		||||
 | 
			
		||||
    def F(p, x):
 | 
			
		||||
        return p[0] * x**2 / 2. + p[1] * x**3 / 3. - anp.log(x) * p[2]
 | 
			
		||||
 | 
			
		||||
    def check_ana_vs_int(p, l, u, **kwargs):
 | 
			
		||||
        numint_full = pe.integrate.quad(f, p, l, u, **kwargs)
 | 
			
		||||
        numint = numint_full[0]
 | 
			
		||||
 | 
			
		||||
        anaint = F(p, u) - F(p, l)
 | 
			
		||||
        diff = (numint - anaint)
 | 
			
		||||
 | 
			
		||||
        if isinstance(numint, pe.Obs):
 | 
			
		||||
            numint.gm()
 | 
			
		||||
            anaint.gm()
 | 
			
		||||
 | 
			
		||||
            assert(diff.is_zero())
 | 
			
		||||
        else:
 | 
			
		||||
            assert(np.isclose(0, diff))
 | 
			
		||||
 | 
			
		||||
    pobs = np.array([pe.cov_Obs(1., .1**2, '0'), pe.cov_Obs(2., .2**2, '1'), pe.cov_Obs(2.2, .17**2, '2')])
 | 
			
		||||
    lobs = pe.cov_Obs(.123, .012**2, 'l')
 | 
			
		||||
    uobs = pe.cov_Obs(1., .05**2, 'u')
 | 
			
		||||
 | 
			
		||||
    check_ana_vs_int(pobs, lobs, uobs)
 | 
			
		||||
    check_ana_vs_int(pobs, lobs.value, uobs)
 | 
			
		||||
    check_ana_vs_int(pobs, lobs, uobs.value)
 | 
			
		||||
    check_ana_vs_int(pobs, lobs.value, uobs.value)
 | 
			
		||||
    for i in range(len(pobs)):
 | 
			
		||||
        p = [pi for pi in pobs]
 | 
			
		||||
        p[i] = pobs[i].value
 | 
			
		||||
        check_ana_vs_int(p, lobs, uobs)
 | 
			
		||||
 | 
			
		||||
    check_ana_vs_int([pi.value for pi in pobs], lobs, uobs)
 | 
			
		||||
    check_ana_vs_int([pi.value for pi in pobs], lobs.value, uobs.value)
 | 
			
		||||
 | 
			
		||||
    check_ana_vs_int(pobs, lobs, uobs, epsabs=1.e-9, epsrel=1.236e-10, limit=100)
 | 
			
		||||
    assert(len(pe.integrate.quad(f, pobs, lobs, uobs, full_output=True)) > 2)
 | 
			
		||||
 | 
			
		||||
    r1, _ = pe.integrate.quad(F, pobs, 1, 0.1)
 | 
			
		||||
    r2, _ = pe.integrate.quad(F, pobs, 0.1, 1)
 | 
			
		||||
    assert r1 == -r2
 | 
			
		||||
    iamzero, _ = pe.integrate.quad(F, pobs, 1, 1)
 | 
			
		||||
    assert iamzero == 0
 | 
			
		||||
| 
						 | 
				
			
			@ -14,9 +14,9 @@ def get_real_matrix(dimension):
 | 
			
		|||
        exponent_imag = np.random.normal(0, 1)
 | 
			
		||||
        base_matrix[n, m] = pe.Obs([np.random.normal(1.0, 0.1, 100)], ['t'])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    return base_matrix
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_complex_matrix(dimension):
 | 
			
		||||
    base_matrix = np.empty((dimension, dimension), dtype=object)
 | 
			
		||||
    for (n, m), entry in np.ndenumerate(base_matrix):
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,6 @@ def test_einsum():
 | 
			
		|||
        assert np.all([o.imag.is_zero_within_error(0.001) for o in arr])
 | 
			
		||||
        assert np.all([o.imag.dvalue < 0.001 for o in arr])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    tt = [get_real_matrix(4), get_real_matrix(3)]
 | 
			
		||||
    q = np.tensordot(tt[0], tt[1], 0)
 | 
			
		||||
    c1 = tt[1] @ q
 | 
			
		||||
| 
						 | 
				
			
			@ -355,3 +354,4 @@ def test_complex_matrix_real_entries():
 | 
			
		|||
    my_mat[0, 1] = 4
 | 
			
		||||
    my_mat[2, 0] = pe.Obs([np.random.normal(1.0, 0.1, 100)], ['t'])
 | 
			
		||||
    assert np.all((my_mat @ pe.linalg.inv(my_mat) - np.identity(4)) == 0)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue