def is_an_upcast(type1, type2):
    """Given two data types (as strings), check if converting to
    type2 from type1 constitutes an upcast.
    Differs from theano.scalar.upcast

    """
    category = {'bool': (0, 0), 'uint8': (1, 1), 'uint16': (1, 2), 'uint32':
        (1, 3), 'uint64': (1, 4), 'int8': (2, 1), 'int16': (2, 2), 'int32':
        (2, 3), 'int64': (2, 4), 'float16': (3, 1.5), 'float32': (3, 2.5),
        'float64': (3, 3.5), 'complex64': (4, 3), 'complex128': (4, 4)}
    cat1 = category[type1]
    cat2 = category[type2]
    if cat2[0] >= cat1[0] and cat2[1] > cat1[1]:
        return True
    else:
        return False
