(g, x, helper=False)
return Or(*conds)
Return a condition under which the mellin transform of g exists.
    Any power of x has already been absorbed into the G function,
    so this is just int_0^\infty g dx.

    See [L, section 5.6.1]. (Note that s=1.)

    If ``helper`` is True, only check if the MT exists at infinity, i.e. if
    int_1^\infty g dx exists.
Return a condition under which the mellin transform of g exists.
    Any power of x has already been absorbed into the G function,
    so this is just int_0^\infty g dx.
Return a condition under which the mellin transform of g exists . Any power of x has already been absorbed into the G function so this is just int_0^ \ infty g dx .
def _check_antecedents_1(g, x, helper=False):
    """
    Return a condition under which the mellin transform of g exists.
    Any power of x has already been absorbed into the G function,
    so this is just int_0^\infty g dx.

    See [L, section 5.6.1]. (Note that s=1.)

    If ``helper`` is True, only check if the MT exists at infinity, i.e. if
    int_1^\infty g dx exists.
    """
    # NOTE if you update these conditions, please update the documentation as well
    from sympy import Eq, Not, ceiling, Ne, re, unbranched_argument as arg
    delta = g.delta
    eta, _ = _get_coeff_exp(g.argument, x)
    m, n, p, q = S([len(g.bm), len(g.an), len(g.ap), len(g.bq)])
    xi = m + n - p

    if p > q:
        def tr(l):
            return [1 - x for x in l]
        return _check_antecedents_1(meijerg(tr(g.bm), tr(g.bother),
                                            tr(g.an), tr(g.aother), x/eta),
                                    x)

    tmp = []
    for b in g.bm:
        tmp += [-re(b) < 1]
    for a in g.an:
        tmp += [1 < 1 - re(a)]
    cond_3 = And(*tmp)

    for b in g.bother:
        tmp += [-re(b) < 1]
    for a in g.aother:
        tmp += [1 < 1 - re(a)]
    cond_3_star = And(*tmp)

    cond_4 = (-re(g.nu) + (q + 1 - p)/2 > q - p)

    def debug(*msg):
        _debug(*msg)

    debug('Checking antecedents for 1 function:')
    debug('  delta=%s, eta=%s, m=%s, n=%s, p=%s, q=%s'
          % (delta, eta, m, n, p, q))
    debug('  ap = %s, %s' % (list(g.an), list(g.aother)))
    debug('  bq = %s, %s' % (list(g.bm), list(g.bother)))
    debug('  cond_3=%s, cond_3*=%s, cond_4=%s' % (cond_3, cond_3_star, cond_4))

    conds = []

    # case 1
    case1 = []
    tmp1 = [1 <= n, p < q, 1 <= m]
    tmp2 = [1 <= p, 1 <= m, Eq(q, p + 1), Not(And(Eq(n, 0), Eq(m, p + 1)))]
    tmp3 = [1 <= p, Eq(q, p)]
    for k in range(ceiling(delta/2) + 1):
        tmp3 += [Ne(abs(arg(eta)), (delta - 2*k)*pi)]
    tmp = [delta > 0, abs(arg(eta)) < delta*pi]
    extra = [Ne(eta, 0), cond_3]
    if helper:
        extra = []
    for t in [tmp1, tmp2, tmp3]:
        case1 += [And(*(t + tmp + extra))]
    conds += case1
    debug('  case 1:', case1)

    # case 2
    extra = [cond_3]
    if helper:
        extra = []
    case2 = [And(Eq(n, 0), p + 1 <= m, m <= q,
                 abs(arg(eta)) < delta*pi, *extra)]
    conds += case2
    debug('  case 2:', case2)

    # case 3
    extra = [cond_3, cond_4]
    if helper:
        extra = []
    case3 = [And(p < q, 1 <= m, delta > 0, Eq(abs(arg(eta)), delta*pi),
                 *extra)]
    case3 += [And(p <= q - 2, Eq(delta, 0), Eq(abs(arg(eta)), 0), *extra)]
    conds += case3
    debug('  case 3:', case3)

    # TODO altered cases 4-7

    # extra case from wofram functions site:
    # (reproduced verbatim from prudnikov, section 2.24.2)
    # http://functions.wolfram.com/HypergeometricFunctions/MeijerG/21/02/01/
    case_extra = []
    case_extra += [Eq(p, q), Eq(delta, 0), Eq(arg(eta), 0), Ne(eta, 0)]
    if not helper:
        case_extra += [cond_3]
    s = []
    for a, b in zip(g.ap, g.bq):
        s += [b - a]
    case_extra += [re(Add(*s)) < 0]
    case_extra = And(*case_extra)
    conds += [case_extra]
    debug('  extra case:', [case_extra])

    case_extra_2 = [And(delta > 0, abs(arg(eta)) < delta*pi)]
    if not helper:
        case_extra_2 += [cond_3]
    case_extra_2 = And(*case_extra_2)
    conds += [case_extra_2]
    debug('  second extra case:', [case_extra_2])

    # TODO This leaves only one case from the three listed by prudnikov.
    #      Investigate if these indeed cover everything; if so, remove the rest.

    return Or(*conds)
def _check_antecedents_1 ( g , x , helper = False ) : # NOTE if you update these conditions, please update the documentation as well from sympy import Eq , Not , ceiling , Ne , re , unbranched_argument as arg delta = g . delta eta , _ = _get_coeff_exp ( g . argument , x ) m , n , p , q = S ( [ len ( g . bm ) , len ( g . an ) , len ( g . ap ) , len ( g . bq ) ] ) xi = m + n - p if p > q : def tr ( l ) : return [ 1 - x for x in l ] return _check_antecedents_1 ( meijerg ( tr ( g . bm ) , tr ( g . bother ) , tr ( g . an ) , tr ( g . aother ) , x / eta ) , x ) tmp = [ ] for b in g . bm : tmp += [ - re ( b ) < 1 ] for a in g . an : tmp += [ 1 < 1 - re ( a ) ] cond_3 = And ( * tmp ) for b in g . bother : tmp += [ - re ( b ) < 1 ] for a in g . aother : tmp += [ 1 < 1 - re ( a ) ] cond_3_star = And ( * tmp ) cond_4 = ( - re ( g . nu ) + ( q + 1 - p ) / 2 > q - p ) def debug ( * msg ) : _debug ( * msg ) debug ( 'Checking antecedents for 1 function:' ) debug ( '  delta=%s, eta=%s, m=%s, n=%s, p=%s, q=%s' % ( delta , eta , m , n , p , q ) ) debug ( '  ap = %s, %s' % ( list ( g . an ) , list ( g . aother ) ) ) debug ( '  bq = %s, %s' % ( list ( g . bm ) , list ( g . bother ) ) ) debug ( '  cond_3=%s, cond_3*=%s, cond_4=%s' % ( cond_3 , cond_3_star , cond_4 ) ) conds = [ ] # case 1 case1 = [ ] tmp1 = [ 1 <= n , p < q , 1 <= m ] tmp2 = [ 1 <= p , 1 <= m , Eq ( q , p + 1 ) , Not ( And ( Eq ( n , 0 ) , Eq ( m , p + 1 ) ) ) ] tmp3 = [ 1 <= p , Eq ( q , p ) ] for k in range ( ceiling ( delta / 2 ) + 1 ) : tmp3 += [ Ne ( abs ( arg ( eta ) ) , ( delta - 2 * k ) * pi ) ] tmp = [ delta > 0 , abs ( arg ( eta ) ) < delta * pi ] extra = [ Ne ( eta , 0 ) , cond_3 ] if helper : extra = [ ] for t in [ tmp1 , tmp2 , tmp3 ] : case1 += [ And ( * ( t + tmp + extra ) ) ] conds += case1 debug ( '  case 1:' , case1 ) # case 2 extra = [ cond_3 ] if helper : extra = [ ] case2 = [ And ( Eq ( n , 0 ) , p + 1 <= m , m <= q , abs ( arg ( eta ) ) < delta * pi , * extra ) ] conds += case2 debug ( '  case 2:' , case2 ) # case 3 extra = [ cond_3 , cond_4 ] if helper : extra = [ ] case3 = [ And ( p < q , 1 <= m , delta > 0 , Eq ( abs ( arg ( eta ) ) , delta * pi ) , * extra ) ] case3 += [ And ( p <= q - 2 , Eq ( delta , 0 ) , Eq ( abs ( arg ( eta ) ) , 0 ) , * extra ) ] conds += case3 debug ( '  case 3:' , case3 ) # TODO altered cases 4-7 # extra case from wofram functions site: # (reproduced verbatim from prudnikov, section 2.24.2) # http://functions.wolfram.com/HypergeometricFunctions/MeijerG/21/02/01/ case_extra = [ ] case_extra += [ Eq ( p , q ) , Eq ( delta , 0 ) , Eq ( arg ( eta ) , 0 ) , Ne ( eta , 0 ) ] if not helper : case_extra += [ cond_3 ] s = [ ] for a , b in zip ( g . ap , g . bq ) : s += [ b - a ] case_extra += [ re ( Add ( * s ) ) < 0 ] case_extra = And ( * case_extra ) conds += [ case_extra ] debug ( '  extra case:' , [ case_extra ] ) case_extra_2 = [ And ( delta > 0 , abs ( arg ( eta ) ) < delta * pi ) ] if not helper : case_extra_2 += [ cond_3 ] case_extra_2 = And ( * case_extra_2 ) conds += [ case_extra_2 ] debug ( '  second extra case:' , [ case_extra_2 ] ) # TODO This leaves only one case from the three listed by prudnikov. #      Investigate if these indeed cover everything; if so, remove the rest. return Or ( * conds )