def getarrlen()

in source/predictive_maintenance/numpy/f2py/crackfortran.py [0:0]


def getarrlen(dl, args, star='*'):
    edl = []
    try:
        edl.append(myeval(dl[0], {}, {}))
    except Exception:
        edl.append(dl[0])
    try:
        edl.append(myeval(dl[1], {}, {}))
    except Exception:
        edl.append(dl[1])
    if isinstance(edl[0], int):
        p1 = 1 - edl[0]
        if p1 == 0:
            d = str(dl[1])
        elif p1 < 0:
            d = '%s-%s' % (dl[1], -p1)
        else:
            d = '%s+%s' % (dl[1], p1)
    elif isinstance(edl[1], int):
        p1 = 1 + edl[1]
        if p1 == 0:
            d = '-(%s)' % (dl[0])
        else:
            d = '%s-(%s)' % (p1, dl[0])
    else:
        d = '%s-(%s)+1' % (dl[1], dl[0])
    try:
        return repr(myeval(d, {}, {})), None, None
    except Exception:
        pass
    d1, d2 = getlincoef(dl[0], args), getlincoef(dl[1], args)
    if None not in [d1[0], d2[0]]:
        if (d1[0], d2[0]) == (0, 0):
            return repr(d2[1] - d1[1] + 1), None, None
        b = d2[1] - d1[1] + 1
        d1 = (d1[0], 0, d1[2])
        d2 = (d2[0], b, d2[2])
        if d1[0] == 0 and d2[2] in args:
            if b < 0:
                return '%s * %s - %s' % (d2[0], d2[2], -b), d2[2], '+%s)/(%s)' % (-b, d2[0])
            elif b:
                return '%s * %s + %s' % (d2[0], d2[2], b), d2[2], '-%s)/(%s)' % (b, d2[0])
            else:
                return '%s * %s' % (d2[0], d2[2]), d2[2], ')/(%s)' % (d2[0])
        if d2[0] == 0 and d1[2] in args:

            if b < 0:
                return '%s * %s - %s' % (-d1[0], d1[2], -b), d1[2], '+%s)/(%s)' % (-b, -d1[0])
            elif b:
                return '%s * %s + %s' % (-d1[0], d1[2], b), d1[2], '-%s)/(%s)' % (b, -d1[0])
            else:
                return '%s * %s' % (-d1[0], d1[2]), d1[2], ')/(%s)' % (-d1[0])
        if d1[2] == d2[2] and d1[2] in args:
            a = d2[0] - d1[0]
            if not a:
                return repr(b), None, None
            if b < 0:
                return '%s * %s - %s' % (a, d1[2], -b), d2[2], '+%s)/(%s)' % (-b, a)
            elif b:
                return '%s * %s + %s' % (a, d1[2], b), d2[2], '-%s)/(%s)' % (b, a)
            else:
                return '%s * %s' % (a, d1[2]), d2[2], ')/(%s)' % (a)
        if d1[0] == d2[0] == 1:
            c = str(d1[2])
            if c not in args:
                if _varname_match(c):
                    outmess('\tgetarrlen:variable "%s" undefined\n' % (c))
                c = '(%s)' % c
            if b == 0:
                d = '%s-%s' % (d2[2], c)
            elif b < 0:
                d = '%s-%s-%s' % (d2[2], c, -b)
            else:
                d = '%s-%s+%s' % (d2[2], c, b)
        elif d1[0] == 0:
            c2 = str(d2[2])
            if c2 not in args:
                if _varname_match(c2):
                    outmess('\tgetarrlen:variable "%s" undefined\n' % (c2))
                c2 = '(%s)' % c2
            if d2[0] == 1:
                pass
            elif d2[0] == -1:
                c2 = '-%s' % c2
            else:
                c2 = '%s*%s' % (d2[0], c2)

            if b == 0:
                d = c2
            elif b < 0:
                d = '%s-%s' % (c2, -b)
            else:
                d = '%s+%s' % (c2, b)
        elif d2[0] == 0:
            c1 = str(d1[2])
            if c1 not in args:
                if _varname_match(c1):
                    outmess('\tgetarrlen:variable "%s" undefined\n' % (c1))
                c1 = '(%s)' % c1
            if d1[0] == 1:
                c1 = '-%s' % c1
            elif d1[0] == -1:
                c1 = '+%s' % c1
            elif d1[0] < 0:
                c1 = '+%s*%s' % (-d1[0], c1)
            else:
                c1 = '-%s*%s' % (d1[0], c1)

            if b == 0:
                d = c1
            elif b < 0:
                d = '%s-%s' % (c1, -b)
            else:
                d = '%s+%s' % (c1, b)
        else:
            c1 = str(d1[2])
            if c1 not in args:
                if _varname_match(c1):
                    outmess('\tgetarrlen:variable "%s" undefined\n' % (c1))
                c1 = '(%s)' % c1
            if d1[0] == 1:
                c1 = '-%s' % c1
            elif d1[0] == -1:
                c1 = '+%s' % c1
            elif d1[0] < 0:
                c1 = '+%s*%s' % (-d1[0], c1)
            else:
                c1 = '-%s*%s' % (d1[0], c1)

            c2 = str(d2[2])
            if c2 not in args:
                if _varname_match(c2):
                    outmess('\tgetarrlen:variable "%s" undefined\n' % (c2))
                c2 = '(%s)' % c2
            if d2[0] == 1:
                pass
            elif d2[0] == -1:
                c2 = '-%s' % c2
            else:
                c2 = '%s*%s' % (d2[0], c2)

            if b == 0:
                d = '%s%s' % (c2, c1)
            elif b < 0:
                d = '%s%s-%s' % (c2, c1, -b)
            else:
                d = '%s%s+%s' % (c2, c1, b)
    return d, None, None