Example #1
0
def test_lookup_table():
    table = defaultdict(list)
    _create_lookup_table(table)
    for _, l in sorted(table.items(), key=default_sort_key):
        for formula, terms, cond, hint in sorted(l, key=default_sort_key):
            subs = {}
            for a in list(formula.free_symbols) + [z_dummy]:
                if hasattr(a, 'properties') and a.properties:
                    # these Wilds match positive integers
                    subs[a] = randrange(1, 10)
                else:
                    subs[a] = uniform(1.5, 2.0)
            if not isinstance(terms, list):
                terms = terms(subs)

            # First test that hyperexpand can do this.
            expanded = [hyperexpand(g) for (_, g) in terms]
            assert all(x.is_Piecewise or not x.has(meijerg) for x in expanded)

            # Now test that the meijer g-function is indeed as advertised.
            expanded = Add(*[f*x for (f, x) in terms])
            a, b = formula.evalf(subs=subs, strict=False), expanded.evalf(subs=subs, strict=False)
            r = min(abs(a), abs(b))
            if r < 1:
                assert abs(a - b).evalf(strict=False) <= 1e-10
            else:
                assert (abs(a - b)/r).evalf(strict=False) <= 1e-10
Example #2
0
def test_lookup_table():
    table = defaultdict(list)
    _create_lookup_table(table)
    for _, l in sorted(table.items(), key=default_sort_key):
        for formula, terms, cond, hint in sorted(l, key=default_sort_key):
            subs = {}
            for a in list(formula.free_symbols) + [z_dummy]:
                if hasattr(a, 'properties') and a.properties:
                    # these Wilds match positive integers
                    subs[a] = randrange(1, 10)
                else:
                    subs[a] = uniform(1.5, 2.0)
            if not isinstance(terms, list):
                terms = terms(subs)

            # First test that hyperexpand can do this.
            expanded = [hyperexpand(g) for (_, g) in terms]
            assert all(x.is_Piecewise or not x.has(meijerg) for x in expanded)

            # Now test that the meijer g-function is indeed as advertised.
            expanded = Add(*[f * x for (f, x) in terms])
            a, b = formula.evalf(subs=subs,
                                 strict=False), expanded.evalf(subs=subs,
                                                               strict=False)
            r = min(abs(a), abs(b))
            if r < 1:
                assert abs(a - b).evalf(strict=False) <= 1e-10
            else:
                assert (abs(a - b) / r).evalf(strict=False) <= 1e-10
Example #3
0
""" This module cooks up a docstring when imported. Its only purpose is to
    be displayed in the sphinx documentation. """

from diofant.integrals.meijerint import _create_lookup_table
from diofant import latex, Eq, Add, Symbol, default_sort_key

t = {}
_create_lookup_table(t)

doc = ""

for about, category in sorted(t.items(), key=default_sort_key):
    if about == ():
        doc += 'Elementary functions:\n\n'
    else:
        doc += 'Functions involving ' + ', '.join(
            '`%s`' % latex(list(category[0][0].atoms(func))[0])
            for func in about) + ':\n\n'
    for formula, gs, cond, hint in category:
        if not isinstance(gs, list):
            g = Symbol('\\text{generated}')
        else:
            g = Add(*[fac * f for (fac, f) in gs])
        obj = Eq(formula, g)
        if cond is True:
            cond = ""
        else:
            cond = ',\\text{ if } %s' % latex(cond)
        doc += ".. math::\n  %s%s\n\n" % (latex(obj), cond)

__doc__ = doc