Ejemplo n.º 1
0
class CheckLib(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary('../bubble1L_ebr/bubble1L_ebr_pylink.so')

        # set global options
        self.real_parameters = [4., 0.002, 1.]
        self.complex_parameters = []
        self.maxeval = 10**6
        self.epsrel = 1e-4
        self.epsabs = 1e-7

        self.target_result_with_prefactor = \
        {
              -2:                   0    +                     0j,
              -1:                 1.0    +                   0.0j,
               0:  4.509087643808781e-02 + 3.138451060936178e+00j # obtained from high precision run of pysecdec
        }
        self.order_min = -2
        self.order_max =  0

    def check_result(self, computed_series, target_series, epsrel, epsabs):
        # convert result to sympy expressions
        computed_series = sp.sympify(  computed_series.replace(',','+I*').replace('+/-','*value+error*')  )

        for order in range(self.order_min, self.order_max+1):
            value = complex( computed_series.coeff('eps',order).coeff('value') )
            error = complex( computed_series.coeff('eps',order).coeff('error') )

            # check that the uncertainties are reasonable
            self.assertLessEqual(error.real, abs(2*epsrel * target_series[order].real))
            if target_series[order].imag != 0.0:
                self.assertLessEqual(error.imag, abs(2*epsrel * target_series[order].imag))

            # check that the desired uncertainties are reached
            self.assertLessEqual(error.real, abs(epsrel * value.real) )
            if target_series[order].imag == 0.0:
                self.assertLessEqual(error.imag, max( abs(epsrel * value), epsabs) )
            else:
                self.assertLessEqual(error.imag, abs(epsrel * value.imag) )

            # check integral value
            self.assertAlmostEqual(  value.real, target_series[order].real, delta=3.*epsrel*abs(target_series[order].real)  )
            if target_series[order].imag == 0.0:
                self.assertAlmostEqual(  value.imag, target_series[order].imag, delta=max( 3.*epsrel*abs(target_series[order]), 3.*epsabs)  )
            else:
                self.assertAlmostEqual(  value.imag, target_series[order].imag, delta=3.*epsrel*abs(target_series[order].imag)  )

    def test_Qmc(self):
        # choose integrator
        self.lib.use_Qmc(epsrel=self.epsrel, maxeval=self.maxeval, epsabs=self.epsabs, verbosity=0, seed=143, transform='korobov3')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor, self.target_result_with_prefactor, self.epsrel, self.epsabs)
Ejemplo n.º 2
0
class CheckQmcErrorMessages(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary(
            '../one_integration_variable/one_integration_variable_pylink.so')

    def test_setting_errormode(self):
        self.assertRaisesRegex(ValueError,
                               'Unknown `errormode` "foo"',
                               self.lib.use_Qmc,
                               transform='korobov3',
                               errormode='foo')

        # test known errormodes
        self.lib.use_Qmc(errormode='default', transform='korobov3')
        self.lib.use_Qmc(errormode='all', transform='korobov3')
        self.lib.use_Qmc(errormode='largest', transform='korobov3')
Ejemplo n.º 3
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp
import os

if __name__ == "__main__":

    # load c++ library
    integral = IntegralLibrary('bubble/bubble_pylink.so')

    # choose integrator
    integral.use_Qmc(verbosity=2,
                     minn=10**5,
                     maxeval=0,
                     minm=10,
                     transform='korobov3')

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = integral(
        real_parameters=[-0.01],
        number_of_presamples=10000,
        deformation_parameters_maximum=0.01,
        deformation_parameters_minimum=0.00000001)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
    str_prefactor = str_prefactor.replace(',', '+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(
        ',', '+I*')
Ejemplo n.º 4
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary

if __name__ == "__main__":

    # load c++ library
    box2L = IntegralLibrary('Nbox2L_split_b/Nbox2L_split_b_pylink.so')

    # choose integrator
    box2L.use_Qmc(verbosity=0,
                  minn=10**9,
                  maxeval=1,
                  transform='korobov6',
                  fitfunction='polysingular')

    # integrator settings used to run the timings
    #box2L.use_Qmc(verbosity=2,minn=10**7,maxeval=1,transform='korobov6',fitfunction='polysingular')
    #box2L.use_Qmc(verbosity=2,minn=10**6,maxeval=1,transform='korobov6',fitfunction='polysingular',devices=[-1])
    #box2L.use_Vegas(flags=2,maxeval=10**7,epsrel=1e-100,epsabs=1e-100)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = box2L(
        real_parameters=[-1.0, -0.8, 0.1], verbose=True)

    # print results
    print('Numerical Result')
    print('integral without prefactor', str_integral_without_prefactor)
    print('prefactor', str_prefactor)
    print('integral with prefactor', str_integral_with_prefactor)
Ejemplo n.º 5
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
from math import pi
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    two_regulators = IntegralLibrary('two_regulators/two_regulators_pylink.so')

    # choose integrator
    #two_regulators.use_Vegas()
    two_regulators.use_Qmc(transform='korobov3x1')

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = two_regulators(verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(',','+I*')
    str_prefactor = str_prefactor.replace(',','+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(',','+I*')

    # convert result to sympy expressions
    integral_with_prefactor = sp.sympify(str_integral_with_prefactor.replace('+/-','*value+error*'))
    integral_with_prefactor_err = sp.sympify(str_integral_with_prefactor.replace('+/-','*value+error*'))
    prefactor = sp.sympify(str_prefactor)
    integral_without_prefactor = sp.sympify(str_integral_without_prefactor.replace('+/-','*value+error*'))
    integral_without_prefactor_err = sp.sympify(str_integral_without_prefactor.replace('+/-','*value+error*'))

    # numerical result
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    name = "formfactor1L_massive_ebr"
    intlib = IntegralLibrary(f"{name}/{name}_pylink.so")
    intlib.use_Qmc(transform="korobov3", verbosity=1)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = intlib(
        real_parameters=[100, 0.01])

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')

    # convert result to sympy expressions
    integral_result = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))
    integral_result_err = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))

    # examples how to access individual orders
    print('Numerical Result')
    for power in [-2, -1, 0]:
        valreal, valimg = integral_result.coeff(
            'eps', power).coeff('value').as_real_imag()
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

# load c++ library
name = "box2L_small_loop_massive_ebr"
intlib = IntegralLibrary("{0}/{0}_pylink.so".format(name))
intlib.use_Qmc(transform="korobov3", fitfunction="polysingular")

# integrate
str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = intlib(
    real_parameters=[4.0, -2.82842712475, -2.82842712475, 0.1])

# convert complex numbers from c++ to sympy notation
str_integral_with_prefactor = str_integral_with_prefactor.replace(',', '+I*')

# convert result to sympy expressions
integral_result = sp.sympify(
    str_integral_with_prefactor.replace('+/-', '*value+error*'))
integral_result_err = sp.sympify(
    str_integral_with_prefactor.replace('+/-', '*value+error*'))

# examples how to access individual orders
print('Numerical Result')
for power in [0]:
    valreal, valimg = integral_result.coeff(
        'eps', power).coeff('value').as_real_imag()
    errreal, errimg = integral_result.coeff(
        'eps', power).coeff('error').as_real_imag()
    print("eps^{:<2} {: .5f}{:+.5f}*I +/- {: .5f}{:+.5f}*I".format(
Ejemplo n.º 8
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary

if __name__ == "__main__":

    # load c++ library
    banana_3mass = IntegralLibrary('banana_3mass/banana_3mass_pylink.so')

    # choose integrator
    banana_3mass.use_Qmc(verbosity=0,minn=10**6,maxeval=1,transform='korobov2')

    # integrator settings used to run the timings
    #banana_3mass.use_Qmc(verbosity=2,minn=10**5,maxeval=10**5,transform='korobov2')
    #banana_3mass.use_Qmc(verbosity=2,minn=10**5,maxeval=10**5,transform='korobov2',devices=[-1])
    #banana_3mass.use_Vegas(flags=2,maxeval=10**6,epsrel=1e-100,epsabs=1e-100)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = banana_3mass(real_parameters=[30.0,1.0,1.3,0.7], deformation_parameters_maximum=0.1, verbose=True)

    # print results
    print('Numerical Result')
    print('integral without prefactor', str_integral_without_prefactor)
    print('prefactor', str_prefactor)
    print('integral with prefactor', str_integral_with_prefactor)

Ejemplo n.º 9
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    hypergeo5F4 = IntegralLibrary('hypergeo5F4/hypergeo5F4_pylink.so')

    # choose integrator
    hypergeo5F4.use_Qmc()

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = hypergeo5F4(
        [0.5], epsrel=1e-4, verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
    str_prefactor = str_prefactor.replace(',', '+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(
        ',', '+I*')

    # convert result to sympy expressions
    integral_with_prefactor = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))
    integral_with_prefactor_err = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))
    prefactor = sp.sympify(str_prefactor)
    integral_without_prefactor = sp.sympify(
Ejemplo n.º 10
0
class CheckLib(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary('../issue7/issue7_pylink.so')

        # set global options
        self.real_parameters = [0.1]
        self.complex_parameters = []
        self.maxeval = 10**6
        self.epsrel = 1e-4
        self.epsabs = 1e-7

        self.target_result_with_prefactor = \
        {
              -1: -3.1415926535897932385 + 0.0j, # eps ** -1
        }
        self.order_min_1 = -1
        self.order_max_1 = -1

    def check_result(self, computed_series, target_series, epsrel, epsabs,
                     order_min, order_max):
        # convert result to sympy expressions
        computed_series = sp.sympify(
            computed_series.replace(',',
                                    '+I*').replace('+/-', '*value+error*'))

        for order in range(order_min, order_max + 1):
            value = complex(computed_series.coeff('eps', order).coeff('value'))
            error = complex(computed_series.coeff('eps', order).coeff('error'))

            # check that the uncertainties are reasonable
            if target_series[order].real != 0.0:
                self.assertLessEqual(
                    error.real, abs(2 * epsrel * target_series[order].real))
            if target_series[order].imag != 0.0:
                self.assertLessEqual(
                    error.imag, abs(2 * epsrel * target_series[order].imag))

            # check that the desired uncertainties are reached
            if target_series[order].real == 0.0:
                self.assertLessEqual(error.real,
                                     max(abs(epsrel * value), epsabs))
            else:
                self.assertLessEqual(error.real, abs(epsrel * value.real))
            if target_series[order].imag == 0.0:
                self.assertLessEqual(error.imag,
                                     max(abs(epsrel * value), epsabs))
            else:
                self.assertLessEqual(error.imag, abs(epsrel * value.imag))

            # check integral value
            if target_series[order].real == 0.0:
                self.assertAlmostEqual(
                    value.real,
                    target_series[order].real,
                    delta=max(3. * epsrel * abs(target_series[order]),
                              3. * epsabs))
            else:
                self.assertAlmostEqual(value.real,
                                       target_series[order].real,
                                       delta=3. * epsrel *
                                       abs(target_series[order].real))
            if target_series[order].imag == 0.0:
                self.assertAlmostEqual(
                    value.imag,
                    target_series[order].imag,
                    delta=max(3. * epsrel * abs(target_series[order]),
                              3. * epsabs))
            else:
                self.assertAlmostEqual(value.imag,
                                       target_series[order].imag,
                                       delta=3. * epsrel *
                                       abs(target_series[order].imag))

    def test_Qmc(self):
        # choose integrator
        self.lib.use_Qmc(epsrel=self.epsrel,
                         maxeval=self.maxeval,
                         epsabs=self.epsabs,
                         verbosity=0,
                         seed=143,
                         transform='korobov3')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
            self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor,
                          self.target_result_with_prefactor, self.epsrel,
                          self.epsabs, self.order_min_1, self.order_max_1)
Ejemplo n.º 11
0
    msq = complex(msq)
    s = 0
    for j in range(1, 1 + order):
        s -= pow(msq / psq, j) / j
    return (s + np.log(-psq / msq)) / psq


if __name__ == "__main__":

    psq, msq = 4, 0.002
    name = "bubble1L_dotted_z"
    real_parameters = [psq, msq, 1]  # z set to 1

    # load c++ library
    intlib = IntegralLibrary(f"{name}/{name}_pylink.so".format(name))
    intlib.use_Qmc(transform="korobov3")

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = intlib(
        real_parameters)

    # convert the result to sympy expressions
    result, error = map(sp.sympify,
                        series_to_sympy(str_integral_with_prefactor))

    # access and print individual terms of the expansion
    print("Numerical Result")
    for power in [-2, -1, 0]:
        val = complex(result.coeff("eps", power))
        err = complex(error.coeff("eps", power))
        print(f"eps^{power:<2} {val: .5f} +/- {err:.5e}")
Ejemplo n.º 12
0
temp3 = 3 * topmass * topmass * s3
temp4 = 3 * topmass * topmass * s3 * s1 * s2
output1 = 4 / temp3
output2 = 4 / temp1
output3 = 4 / temp2
output4 = (4 * (s1 * s2 + s2 * s3 + s1 * s3)) / temp4

if __name__ == "__main__":

    # load c++ library
    amp1 = IntegralLibrary('F212/F212_pylink.so')
    amp2 = IntegralLibrary('F312/F312_pylink.so')

    # choose Qmc integrator
    # amp.use_Qmc()  # Qmc doesnt work as of now for new version, try Vegas  # amp.use_Vegas()
    amp1.use_Qmc()
    amp2.use_Qmc()

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = amp1(
        [s1, s2, s3, topmass * topmass, hmass * hmass],
        verbose=True,
        epsrel=1e-4,
        epsabs=1e-14)  # [s12 , s13, s23, mtsq , mhsq]

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
    str_prefactor = str_prefactor.replace(',', '+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(
        ',', '+I*')
Ejemplo n.º 13
0
from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    int5 = IntegralLibrary('crossint5/crossint5_pylink.so')

    # choose integrator
    #int5.use_Vegas(nstart=10**5, nincrease=5*10**4, epsrel=1e-3, epsabs=1e-7, maxeval=10**6, real_complex_together=True, flags=2) # ``flags=2``: verbose --> see Cuba manual
    int5.use_Qmc(minn=10**8,
                 minm=64,
                 epsrel=1e-3,
                 epsabs=1e-5,
                 maxeval=10**10,
                 verbosity=3,
                 devices=[0, 1, 2, 3],
                 cudablocks=128,
                 cudathreadsperblock=64,
                 transform='korobov3')

    number_of_real_parameters = int(int5.info['number_of_real_parameters'])
    number_of_complex_parameters = int(
        int5.info['number_of_complex_parameters'])

    with open('kinematics.input') as f:
        with open('results_crossint5.out', 'w') as resultsfile:
            for line in f:
                point = line.split()
                assert len(
                    point
Ejemplo n.º 14
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    box = IntegralLibrary('ladder2g/ladder2g_pylink.so')

    # choose integrator
    box.use_Qmc(verbosity=2, minn=10**7, maxeval=1, transform='korobov3')

    # integrator settings used to run the timings
    #box.use_Qmc(verbosity=2,minn=10**6,maxeval=1,transform='korobov3',fitfunction='polysingular')
    #box.use_Qmc(verbosity=2,minn=10**5,maxeval=1,transform='korobov3',fitfunction='polysingular',devices=[-1])
    #box.use_Vegas(flags=2,maxeval=10**6,epsrel=1e-100,epsabs=1e-100)

    # integrate non-Euclidean point;
    # s12, s23, s34, s45, s51, msq, mhsq = [2408664.483714835,-554153.4928655404,1496874.6133096598,735785.915792151,-517267.51076904044,256998.,41487.7]
    s12, s23, s34, s45, s51, msq, mhsq = [
        512775.5889493924, -75616.7189298124, 211810.77151387237,
        187097.41183131794, -198221.48657428243, 256998., 41487.7
    ]
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = \
            box([s12/s12,s23/s12,s34/s12,s45/s12,s51/s12,msq/s12,mhsq/s12],number_of_presamples=10**7)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
    str_prefactor = str_prefactor.replace(',', '+I*')
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    name = 'triangle2L_largem_ebr'
    intlib = IntegralLibrary(f'{name}/{name}_pylink.so')
    intlib.use_Qmc(transform='korobov3',
                   epsrel=1e-4,
                   minn=50000,
                   maxeval=100000000)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = intlib(
        real_parameters=[0.002, 4], verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')

    # convert result to sympy expressions
    integral_result = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))
    integral_result_err = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))

    # examples how to access individual orders
    print('Numerical Result')
Ejemplo n.º 16
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary

if __name__ == "__main__":

    # load c++ library
    bubble_6L = IntegralLibrary('bubble6L/bubble6L_pylink.so')

    # choose integrator
    bubble_6L.use_Qmc(verbosity=2,
                      minn=10**7,
                      maxeval=1,
                      transform='korobov3',
                      fitfunction='polysingular')

    # integrator settings used to run the timings
    #bubble_6L.use_Qmc(verbosity=2,minn=10**6,maxeval=1,transform='baker',fitfunction='polysingular')
    #bubble_6L.use_Qmc(verbosity=2,minn=4*10**4,maxeval=1,transform='baker',fitfunction='polysingular',devices=[-1])
    #bubble_6L.use_Vegas(flags=2,maxeval=10**5,epsrel=1e-100,epsabs=1e-100)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = bubble_6L(
    )

    # examples how to access individual orders
    print('Numerical Result')
    print('integral without prefactor', str_integral_without_prefactor)
    print('prefactor', str_prefactor)
    print('integral with prefactor', str_integral_with_prefactor)
Ejemplo n.º 17
0
class CheckLib(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary(
            '../one_integration_variable/one_integration_variable_pylink.so')
        self.target_result = {-1: 0.0, 0: -0.5, 1: -0.25}
        self.epsrel = 1e-11
        self.epsabs = 1e-10
        self.maxeval = 10**5

    def check_result(self, computed_series, epsrel, epsabs):
        # convert result to sympy expressions
        integral_with_prefactor = sp.sympify(
            computed_series.replace(',',
                                    '+I*').replace('+/-', '*value+error*'))

        for order in range(-1, 2):
            value = complex(
                integral_with_prefactor.coeff('eps', order).coeff('value'))
            error = complex(
                integral_with_prefactor.coeff('eps', order).coeff('error'))

            # check that the desired uncertainties are reached
            self.assertLessEqual(error.real, epsabs)
            self.assertLessEqual(error.imag, epsabs)

            # check integral value
            self.assertAlmostEqual(value.real,
                                   self.target_result[order].real,
                                   delta=3. * epsabs)
            self.assertAlmostEqual(value.imag,
                                   self.target_result[order].imag,
                                   delta=3. * epsabs)

    def test_Vegas(self):
        # choose integrator
        # can only reach ~2e-9 accuracy with Vegas
        self.lib.use_Vegas(
            flags=0, epsrel=self.epsrel, epsabs=2e-9,
            maxeval=self.maxeval)  # ``flags=2``: verbose --> see Cuba manual

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel, 2e-9)

    def test_Suave(self):
        # choose integrator
        self.lib.use_Suave(
            flags=0, epsrel=self.epsrel, epsabs=self.epsabs,
            maxeval=5000)  # ``flags=2``: verbose --> see Cuba manual

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Divonne(self):
        # choose integrator
        self.lib.use_Divonne(
            flags=0,
            epsrel=self.epsrel,
            epsabs=self.epsabs,
            border=1e-8,
            maxeval=self.maxeval)  # ``flags=2``: verbose --> see Cuba manual

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Cuhre(self):
        # choose integrator
        self.lib.use_Cuhre(
            flags=0,
            epsrel=self.epsrel,
            epsabs=self.epsabs,
            maxeval=self.maxeval)  # ``flags=2``: verbose --> see Cuba manual

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_CQuad(self):
        # choose integrator
        self.lib.use_CQuad(verbose=False,
                           epsrel=self.epsrel,
                           epsabs=self.epsabs)

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Qmc_default_transform(self):
        # choose integrator
        self.lib.use_Qmc(verbosity=0,
                         epsrel=self.epsrel,
                         epsabs=self.epsabs,
                         seed=3212,
                         transform='korobov3',
                         fitfunction='polysingular')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Qmc_no_transform(self):
        # choose integrator
        self.lib.use_Qmc(verbosity=0,
                         epsrel=self.epsrel,
                         epsabs=self.epsabs,
                         seed=3212,
                         transform='none',
                         fitfunction='none')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Qmc_Korobov2x1_transform(self):
        # choose integrator
        self.lib.use_Qmc(verbosity=0,
                         epsrel=self.epsrel,
                         epsabs=self.epsabs,
                         seed=3212,
                         transform='Korobov2x1')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
        )

        # check
        self.check_result(str_integral_with_prefactor, self.epsrel,
                          self.epsabs)
Ejemplo n.º 18
0
#!/usr/bin/env python3

import math
from pySecDec.integral_interface import IntegralLibrary


# Analytic result (for comparison)
def yyyy1L_analytic(t, u):
    s = -t - u
    ltu = math.log(t / u)
    return -8*( 1 + (t-u)/s*ltu  + (t*t + u*u)/(2*s*s)*\
    ( math.pi*math.pi + ltu**2 ) )


if __name__ == "__main__":

    # load c++ library
    amp = IntegralLibrary('yyyy1L/yyyy1L_pylink.so')

    # choose Qmc integrator
    amp.use_Qmc()

    # integrate
    _, _, result = amp([-1.3, -0.8])  # t, u

    # print result
    print('Numerical Result:', result)
    print('Analytic Result:', yyyy1L_analytic(-1.3, -0.8))
Ejemplo n.º 19
0
class CheckLib(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary('../mixed_packages/mixed_packages_pylink.so')

        # set global options
        self.real_parameters = [10., 2.]
        self.complex_parameters = []
        self.maxeval = 10**7
        self.epsrel = 1e-4
        self.epsabs = 1e-7
        
        # s/msq * bub(s,msq,msq) + msq/s* Integrate[1/(s z1 + msq z2 z3), {z1, 0, 1}, {z2, 0, 1}, {z3, 0, 1}]
        self.target_result_with_prefactor = \
        {
              -1:  5.0              +  0.0j,
               0: 10.63956085778167 +  7.024814731040726j,
        }
        self.order_min = -1
        self.order_max =  0

    def check_result(self, computed_series, target_series, epsrel, epsabs):
        # convert result to sympy expressions
        computed_series = sp.sympify(  computed_series.replace(',','+I*').replace('+/-','*value+error*')  )

        for order in range(self.order_min, self.order_max+1):
            value = complex( computed_series.coeff('eps',order).coeff('value') )
            error = complex( computed_series.coeff('eps',order).coeff('error') )

            # check that the uncertainties are reasonable
            self.assertLessEqual(error.real, abs(2*epsrel * target_series[order].real))
            if target_series[order].imag != 0.0:
                self.assertLessEqual(error.imag, abs(2*epsrel * target_series[order].imag))

            # check that the desired uncertainties are reached
            self.assertLessEqual(error.real, abs(epsrel * value.real) )
            if target_series[order].imag == 0.0:
                self.assertLessEqual(error.imag, epsabs)
            else:
                self.assertLessEqual(error.imag, abs(epsrel * value.imag) )

            # check integral value
            self.assertAlmostEqual(  value.real, target_series[order].real, delta=3.*epsrel*abs(target_series[order].real)  )
            if target_series[order].imag == 0.0:
                self.assertAlmostEqual(  value.imag, target_series[order].imag, delta=3.*epsabs  )
            else:
                self.assertAlmostEqual(  value.imag, target_series[order].imag, delta=3.*epsrel*abs(target_series[order].imag)  )

    def test_Cuhre(self):
        # choose integrator
        self.lib.use_Cuhre(epsrel=self.epsrel, maxeval=self.maxeval, epsabs=self.epsabs, real_complex_together=True, flags=0)

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor, self.target_result_with_prefactor, self.epsrel, self.epsabs)

    def test_Cuhre_CQuad(self):
        # choose integrator
        self.lib.use_Cuhre(epsrel=self.epsrel, maxeval=self.maxeval, epsabs=self.epsabs, real_complex_together=True, flags=0)
        self.lib.use_CQuad(epsrel=self.epsrel, epsabs=self.epsabs, verbose=False)

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor, self.target_result_with_prefactor, self.epsrel, self.epsabs)

    def test_Qmc_default_integral_transform(self):
        # choose integrator
        self.lib.use_Qmc(epsrel=self.epsrel, maxeval=self.maxeval, epsabs=self.epsabs, verbosity=0, seed=143, transform='korobov3')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor, self.target_result_with_prefactor, self.epsrel, self.epsabs)
Ejemplo n.º 20
0
from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    triangle2L = IntegralLibrary('ff3_massive/ff3_massive_pylink.so')

    # choose integrator
    #triangle2L.use_Vegas(nstart=10**4, maxeval=10**8, flags=2, real_complex_together=True) # ``flags=2``: verbose --> see Cuba manual
    #triangle2L.use_Suave(maxeval=10**5, flags=2, real_complex_together=True) # ``flags=2``: verbose --> see Cuba manual
    triangle2L.use_Qmc(verbosity=3,
                       cudablocks=1024,
                       cudathreadsperblock=256,
                       minn=10**7,
                       transform='baker',
                       epsrel=1e-4,
                       epsabs=1e-7,
                       maxeval=10**6,
                       maxmperpackage=16)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = triangle2L(
        real_parameters=[0.72135, 1.0],
        number_of_presamples=1000000,
        deformation_parameters_maximum=0.1,
        deformation_parameters_minimum=1e-10,
        together=True)

    print('Numerical Result')
    print(str_integral_without_prefactor)
Ejemplo n.º 21
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary

if __name__ == "__main__":

    # load c++ library
    box2L = IntegralLibrary('Nbox2L_split_c/Nbox2L_split_c_pylink.so')

    # choose integrator
    box2L.use_Qmc(verbosity=0,
                  minn=15173222401,
                  maxeval=1,
                  transform='korobov3',
                  generatingvectors='cbcpt_cfftw1_6')

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = box2L(
        real_parameters=[-1.0, -0.8, 0.1], verbose=True)

    # print results
    print('Numerical Result')
    print('integral without prefactor', str_integral_without_prefactor)
    print('prefactor', str_prefactor)
    print('integral with prefactor', str_integral_with_prefactor)
Ejemplo n.º 22
0
class CheckLib(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary(
            '../bubble1L_dot_rank4/bubble1L_dot_rank4_pylink.so')

        # set global options
        self.real_parameters = [1.275, 1.275]
        self.complex_parameters = [30.886875, 30.886875, 123.5475]
        self.maxeval = 10**6
        self.epsrel = 1e-4
        self.epsabs = 1e-7

        self.target_result_with_prefactor = \
        {
              -1:  1.0    + 0.0j,
               0: -1.2708 + 2.4179j
        }
        self.order_min = -1
        self.order_max = 0

    def check_result(self, computed_series, target_series, epsrel, epsabs):
        # convert result to sympy expressions
        computed_series = sp.sympify(
            computed_series.replace(',',
                                    '+I*').replace('+/-', '*value+error*'))

        for order in range(self.order_min, self.order_max + 1):
            value = complex(computed_series.coeff('eps', order).coeff('value'))
            error = complex(computed_series.coeff('eps', order).coeff('error'))

            # check that the uncertainties are reasonable
            self.assertLessEqual(error.real,
                                 abs(2 * epsrel * target_series[order].real))
            if target_series[order].imag != 0.0:
                self.assertLessEqual(
                    error.imag, abs(2 * epsrel * target_series[order].imag))

            # check that the desired uncertainties are reached
            self.assertLessEqual(error.real, abs(epsrel * value.real))
            if target_series[order].imag == 0.0:
                self.assertLessEqual(error.imag, epsabs)
            else:
                self.assertLessEqual(error.imag, abs(epsrel * value.imag))

            # check integral value
            self.assertAlmostEqual(value.real,
                                   target_series[order].real,
                                   delta=3. * epsrel *
                                   abs(target_series[order].real))
            if target_series[order].imag == 0.0:
                self.assertAlmostEqual(value.imag,
                                       target_series[order].imag,
                                       delta=3. * epsabs)
            else:
                self.assertAlmostEqual(value.imag,
                                       target_series[order].imag,
                                       delta=3. * epsrel *
                                       abs(target_series[order].imag))

    def test_Cuhre(self):
        # choose integrator
        self.lib.use_Cuhre(epsrel=self.epsrel,
                           maxeval=self.maxeval,
                           epsabs=self.epsabs,
                           real_complex_together=True,
                           flags=0)

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
            self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor,
                          self.target_result_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Cuhre_CQuad(self):
        # choose integrator
        self.lib.use_Cuhre(epsrel=self.epsrel,
                           maxeval=self.maxeval,
                           epsabs=self.epsabs,
                           real_complex_together=True,
                           flags=0)
        self.lib.use_CQuad(epsrel=self.epsrel,
                           epsabs=self.epsabs,
                           verbose=False)

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
            self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor,
                          self.target_result_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Qmc_default_integral_transform(self):
        # choose integrator
        self.lib.use_Qmc(epsrel=self.epsrel,
                         maxeval=self.maxeval,
                         epsabs=self.epsabs,
                         verbosity=0,
                         seed=143,
                         transform='korobov3')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
            self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor,
                          self.target_result_with_prefactor, self.epsrel,
                          self.epsabs)

    def test_Qmc_baker_transform(self):
        # choose integrator
        self.lib.use_Qmc(epsrel=self.epsrel,
                         maxeval=self.maxeval,
                         epsabs=self.epsabs,
                         verbosity=0,
                         seed=143,
                         transform='baker',
                         evaluateminn=0,
                         fitfunction='polysingular')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
            self.real_parameters, self.complex_parameters)

        # check integral
        self.check_result(str_integral_with_prefactor,
                          self.target_result_with_prefactor, self.epsrel,
                          self.epsabs)
Ejemplo n.º 23
0
#!/usr/bin/env python3
from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    pentabox = IntegralLibrary('pentabox_fin/pentabox_fin_pylink.so')

    # choose integrator
    pentabox.use_Qmc(verbosity=0,
                     minn=10**8,
                     maxeval=1,
                     transform='korobov3',
                     fitfunction='polysingular')

    # integrator settings used to run the timings
    #pentabox.use_Qmc(verbosity=2,minn=10**6,maxeval=1,transform='korobov3',fitfunction='polysingular')
    #pentabox.use_Qmc(verbosity=2,minn=10**5,maxeval=1,transform='korobov3',fitfunction='polysingular',devices=[-1])
    #pentabox.use_Vegas(flags=2,maxeval=10**6,epsrel=1e-100,epsabs=1e-100)

    # integrate non-Euclidean point;
    s12, s23, s34, s45, s51 = [5., -4., 2., -6., 3.]
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = pentabox(
        [s12, s23, s34, s45, s51],
        deformation_parameters_maximum=0.1,
        verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
Ejemplo n.º 24
0
from pySecDec.integral_interface import IntegralLibrary

if __name__ == "__main__":

    # load c++ library
    ff = IntegralLibrary('formfactor4L/formfactor4L_pylink.so')

    # choose integrator
    ff.use_Qmc(
        minn=35 * 10**5,

        # settings used for timings
        #minn=5*10**3, devices = [-1],
        #minn=2*10**5,
        maxeval=1,
        minm=64,
        cudablocks=128,
        cudathreadsperblock=64,
        maxnperpackage=8,
        maxmperpackage=8,
        verbosity=2,
        transform='baker',
        fitfunction='polysingular',
    )
    #ff.use_Vegas(flags=2,maxeval=10**5,epsrel=1e-100,epsabs=1e-100) # used for timings

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = ff(
        verbose=True)

    # print results
    print('Numerical Result')
Ejemplo n.º 25
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    bowtie = IntegralLibrary('bowtie/bowtie_pylink.so')

    # choose integrator
    bowtie.use_Qmc(verbosity=3,
                   devices=[-1, 0, 1, 2, 3],
                   minn=10**8,
                   transform='korobov3')
    #bowtie.use_Vegas(flags=2,epsrel=1e-2,epsabs=1e-10,nstart=10000,nincrease=1000,maxeval=10000000) #

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = bowtie(
        real_parameters=[10.0, -0.75, 1.0])

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
    str_prefactor = str_prefactor.replace(',', '+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(
        ',', '+I*')

    # convert result to sympy expressions
    integral_with_prefactor = sp.sympify(
        str_integral_with_prefactor.replace('+/-', '*value+error*'))
Ejemplo n.º 26
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    hyperelliptic = IntegralLibrary('hyperelliptic/hyperelliptic_pylink.so')

    # choose integrator
    hyperelliptic.use_Qmc(verbosity=0,maxeval=1,minn=10**8,transform='korobov3',fitfunction='polysingular')

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = hyperelliptic(real_parameters=[10.0, -0.75, 1.0, 1.3, 0.7], verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(',','+I*')
    str_prefactor = str_prefactor.replace(',','+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(',','+I*')

    # convert result to sympy expressions
    integral_with_prefactor = sp.sympify(str_integral_with_prefactor.replace('+/-','*value+error*'))
    integral_with_prefactor_err = sp.sympify(str_integral_with_prefactor.replace('+/-','*value+error*'))
    prefactor = sp.sympify(str_prefactor)
    integral_without_prefactor = sp.sympify(str_integral_without_prefactor.replace('+/-','*value+error*'))
    integral_without_prefactor_err = sp.sympify(str_integral_without_prefactor.replace('+/-','*value+error*'))

    # examples how to access individual orders
    print('Numerical Result')
    print('prefactor', prefactor)
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    elliptic2L_physical = IntegralLibrary(
        'elliptic2L_physical/elliptic2L_physical_pylink.so')

    # choose integrator
    elliptic2L_physical.use_Qmc(verbosity=0,
                                minn=2147483647,
                                maxeval=1,
                                transform='korobov1',
                                fitfunction='polysingular')

    # integrator settings used to run the timings
    #elliptic2L_physical.use_Qmc(verbosity=2,minn=3*10**6,maxeval=3*10**6,transform='korobov1',fitfunction='polysingular')
    #elliptic2L_physical.use_Qmc(verbosity=2,minn=3*10**6,maxeval=3*10**6,transform='korobov1',fitfunction='polysingular',devices=[-1])
    #elliptic2L_physical.use_Vegas(flags=2,maxeval=3*10**7,epsrel=1e-100,epsabs=1e-100)

    # integrate non-Euclidean point;
    s, t, pp4, msq = [90., -2.5, 1.6, 1.]
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = elliptic2L_physical(
        [s, t, pp4, msq], verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
Ejemplo n.º 28
0
class CheckLib(unittest.TestCase):
    def setUp(self):
        # load c++ library
        self.lib = IntegralLibrary('../easy_sum/easy_sum_pylink.so')

        # set global options
        self.real_parameters = [0.1]
        self.complex_parameters = []
        self.maxeval = 10**6
        self.epsrel = 1e-4
        self.epsabs = 1e-7

        self.target_result_with_prefactor_1 = \
        {
              -1:                     0.2 + 0.0j, # eps ** -1
               0:  0.22962348064032504712 + 0.0j, # eps **  0
        }
        self.order_min_1 = -1
        self.order_max_1 = 0

        self.target_result_with_prefactor_2 = \
        {
              -2:                     0.05 + 0.0j, # eps ** -2
              -1:  0.015342640972002734529 + 0.0j, # eps ** -1
               0: 0.0033313156240476989125 + 0.0j, # eps **  0
        }
        self.order_min_2 = -2
        self.order_max_2 = 0

    def check_result(self, computed_series, target_series, epsrel, epsabs,
                     order_min, order_max):
        # convert result to sympy expressions
        computed_series = sp.sympify(
            computed_series.replace(',',
                                    '+I*').replace('+/-', '*value+error*'))

        for order in range(order_min, order_max + 1):
            value = complex(computed_series.coeff('eps', order).coeff('value'))
            error = complex(computed_series.coeff('eps', order).coeff('error'))

            # check that the uncertainties are reasonable
            if target_series[order].real != 0.0:
                self.assertLessEqual(
                    error.real, abs(2 * epsrel * target_series[order].real))
            if target_series[order].imag != 0.0:
                self.assertLessEqual(
                    error.imag, abs(2 * epsrel * target_series[order].imag))

            # check that the desired uncertainties are reached
            if target_series[order].real == 0.0:
                self.assertLessEqual(error.real,
                                     max(abs(epsrel * value), epsabs))
            else:
                self.assertLessEqual(error.real, abs(epsrel * value.real))
            if target_series[order].imag == 0.0:
                self.assertLessEqual(error.imag,
                                     max(abs(epsrel * value), epsabs))
            else:
                self.assertLessEqual(error.imag, abs(epsrel * value.imag))

            # check integral value
            if target_series[order].real == 0.0:
                self.assertAlmostEqual(
                    value.real,
                    target_series[order].real,
                    delta=max(3. * epsrel * abs(target_series[order]),
                              3. * epsabs))
            else:
                self.assertAlmostEqual(value.real,
                                       target_series[order].real,
                                       delta=3. * epsrel *
                                       abs(target_series[order].real))
            if target_series[order].imag == 0.0:
                self.assertAlmostEqual(
                    value.imag,
                    target_series[order].imag,
                    delta=max(3. * epsrel * abs(target_series[order]),
                              3. * epsabs))
            else:
                self.assertAlmostEqual(value.imag,
                                       target_series[order].imag,
                                       delta=3. * epsrel *
                                       abs(target_series[order].imag))

    def test_Qmc(self):
        # choose integrator
        self.lib.use_Qmc(epsrel=self.epsrel,
                         maxeval=self.maxeval,
                         epsabs=self.epsabs,
                         verbosity=0,
                         seed=143,
                         transform='korobov3')

        # integrate
        str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = self.lib(
            self.real_parameters, self.complex_parameters)

        str_integral_with_prefactor_1, str_integral_with_prefactor_2 = str_integral_with_prefactor.strip(
        ).split('\n')

        # check integral
        self.check_result(str_integral_with_prefactor_1,
                          self.target_result_with_prefactor_1, self.epsrel,
                          self.epsabs, self.order_min_1, self.order_max_1)
        self.check_result(str_integral_with_prefactor_2,
                          self.target_result_with_prefactor_2, self.epsrel,
                          self.epsabs, self.order_min_2, self.order_max_2)
Ejemplo n.º 29
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary, series_to_sympy
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    name = "bubble1L_ebr_large_mass"
    bubble1L = IntegralLibrary(f"{name}/{name}_pylink.so")
    bubble1L.use_Qmc(transform="korobov3", verbosity=1)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = bubble1L(
        real_parameters=[0.002, 4])

    # convert the result to sympy expressions
    result, error = map(sp.sympify,
                        series_to_sympy(str_integral_with_prefactor))

    # examples how to access individual orders
    print('Numerical Result')
    for power in [-1, 0]:
        valreal, valimg = result.coeff('eps', power).as_real_imag()
        errreal, errimg = error.coeff('eps', power).as_real_imag()
        print("eps^{:<2} {: .15f}{:+.15f}*I +/- {:.15f}{:+.15f}*I".format(
            power, float(valreal), float(valimg), float(errreal),
            float(errimg)))
Ejemplo n.º 30
0
#!/usr/bin/env python3

from pySecDec.integral_interface import IntegralLibrary
import sympy as sp

if __name__ == "__main__":

    # load c++ library
    HZ2L_nonplanar = IntegralLibrary('hz2L_nonplanar/hz2L_nonplanar_pylink.so')

    # choose integrator
    HZ2L_nonplanar.use_Qmc(verbosity=0, maxeval=10**6, transform='korobov3')

    # integrator settings used to run the timings
    #HZ2L_nonplanar.use_Qmc(verbosity=2,minn=10**6,maxeval=10**6,transform='korobov3')
    #HZ2L_nonplanar.use_Qmc(verbosity=2,minn=10**5,maxeval=10**5,transform='korobov3',devices=[-1])
    #HZ2L_nonplanar.use_Vegas(flags=2,maxeval=5*10**5,epsrel=1e-100,epsabs=1e-100)

    # integrate
    str_integral_without_prefactor, str_prefactor, str_integral_with_prefactor = HZ2L_nonplanar(
        real_parameters=[200., -23., 9., 1.56, 0.81], verbose=True)

    # convert complex numbers from c++ to sympy notation
    str_integral_with_prefactor = str_integral_with_prefactor.replace(
        ',', '+I*')
    str_prefactor = str_prefactor.replace(',', '+I*')
    str_integral_without_prefactor = str_integral_without_prefactor.replace(
        ',', '+I*')

    # convert result to sympy expressions
    integral_with_prefactor = sp.sympify(