Ejemplo n.º 1
0
def base_types(value, base):
    if isinstance(value, Fraction) and isinstance(base, Fraction):
        result = int(str(int(value)), int(base))  # value must be string
        return Fraction(result, 1)

    elif isinstance(value, Fraction) and isinstance(base, str):
        return [Fraction(int(str(int(value)), toOrd(c))) for c in base]
    elif isinstance(value, str) and isinstance(base, Fraction):
        result = int(value, int(base))
        return Fraction(result, 1)

    elif isinstance(value, str) and isinstance(base, str):
        if len(base) == 1:
            return base_types(value, Fraction(toOrd(base)))
        else:
            return [base_types(value, Fraction(toOrd(b))) for b in base]

    elif isinstance(value, Fraction) and isinstance(base, list):
        return [base_types(value, b) for b in base]
    elif isinstance(value, list) and isinstance(base, Fraction):
        return [base_types(v, base) for v in value]

    elif isinstance(value, str) and isinstance(base, list):
        return [base_types(value, b) for b in base]
    elif isinstance(value, list) and isinstance(base, str):
        return [base_types(v, base) for v in value]

    # base can be a char, use codepage value to convert
    elif isinstance(value, list) and isinstance(base, list):
        if len(value) > len(base):
            return [base_types(i, j) for (i, j) in zip(value, cycle(base))]
        else:
            return [base_types(i, j) for (i, j) in zip(cycle(value), base)]
Ejemplo n.º 2
0
def addition_types(x, y):
    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return x + y

    elif isinstance(x, Fraction) and isinstance(y, str):
        return ''.join([toChr(toOrd(c) + int(x)) for c in y])
    elif isinstance(x, str) and isinstance(y, Fraction):
        return ''.join([toChr(toOrd(c) + int(y)) for c in x])

    elif isinstance(x, str) and isinstance(y, str):
        return x + y

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [addition_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [addition_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [addition_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [addition_types(i, y) for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [addition_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [addition_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 3
0
def make_ord_types(x):
    if isinstance(x, Fraction):
        return [Fraction(toOrd(c)) for c in str(x)]
    elif isinstance(x, str):
        return [Fraction(toOrd(c)) for c in x]
    elif isinstance(x, list):
        return [make_ord_types(i) for i in x]
Ejemplo n.º 4
0
def toInt(x):
    if isinstance(x, Fraction):
        return int(x)
    elif isinstance(x, str):
        return toOrd(x)
    elif isinstance(x, list):
        return len(x)
Ejemplo n.º 5
0
def index_types(x, y):
    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return x.numerator if isTrue(y) else x.denominator

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [x.numerator if isTrue(c) else x.denominator for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return x[int(y) % len(x)]

    elif isinstance(x, str) and isinstance(y, str):
        return [x[toOrd(c) % len(x)] for c in y]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [index_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return x[int(y)]

    elif isinstance(x, str) and isinstance(y, list):
        return [[index_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[index_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [index_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [index_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 6
0
def apply_not_types(x):
    if isinstance(x, Fraction):
        return Fraction(1) if x == 0 else Fraction(0)
    elif isinstance(x, str):
        return [apply_not_types(Fraction(toOrd(c))) for c in x]
    elif isinstance(x, list):
        return [apply_not_types(i) for i in x]
Ejemplo n.º 7
0
def dec_types(x):
    if isinstance(x, Fraction):
        return x - 1
    elif isinstance(x, str):
        return ''.join([toChr(toOrd(c) - 1) for c in x])
    elif isinstance(x, list):
        return [dec_types(i) for i in x]
Ejemplo n.º 8
0
def prime_types(x):
    if isinstance(x, Fraction):
        result = nth_prime_number(int(x))
        return Fraction(result)
    elif isinstance(x, str):
        result = nth_prime_number(toOrd(x))
        return Fraction(result)
    elif isinstance(x, list):
        return [prime_types(i) for i in x]
Ejemplo n.º 9
0
def sci_format_types(x):
    if isinstance(x, Fraction):
        if x == int(x):
            return Fraction(10**x).limit_denominator(10**abs(int(x)))
        else:
            return Fraction(10**x).limit_denominator(10**abs(int(x)) * 1000)
    elif isinstance(x, str):
        return [sci_format_types(Fraction(toOrd(c))) for c in x]
    elif isinstance(x, list):
        return [sci_format_types(i) for i in x]
Ejemplo n.º 10
0
def factorial_types(x):
    if isinstance(x, Fraction):
        fact = Fraction(1)
        for i in range(1, 1 + int(x)):
            fact = fact * i
        return fact
    elif isinstance(x, str):
        return [factorial_types(Fraction(toOrd(c))) for c in x]
    elif isinstance(x, list):
        return [factorial_types(i) for i in x]
Ejemplo n.º 11
0
def make_sum_types(x):
    if isinstance(x, Fraction):
        digits = str(int(x))
        result = 0
        for d in digits:
            result += int(d)
        return Fraction(result)
    elif isinstance(x, str):
        return Fraction(sum([int(toOrd(c)) for c in x]))
    elif isinstance(x, list):
        return Fraction(sum([make_sum_types(i) for i in x]))
Ejemplo n.º 12
0
def power_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return x**y

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(x**toOrd(c)) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(toOrd(c)**y) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(toOrd(i)**toOrd(j)) for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(toOrd(i)**toOrd(j)) for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [power_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [power_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[power_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[power_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [power_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [power_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 13
0
def fraction_types(x, y):
    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(x, y).limit_denominator()

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(x, toOrd(c)) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(toOrd(c), y) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(toOrd(i), toOrd(j)) for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(toOrd(i), toOrd(j)) for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [fraction_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [fraction_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[fraction_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[fraction_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [fraction_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [fraction_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 14
0
def module_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return x % y

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(x % toOrd(c)) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(toOrd(c) % y) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(toOrd(i) % toOrd(j)) for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(toOrd(i) % toOrd(j)) for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [module_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [module_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[module_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[module_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [module_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [module_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 15
0
def quocient_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(x // y)

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(x // toOrd(c)) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(toOrd(c) // y) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(toOrd(i) // toOrd(j)) for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(toOrd(i) // toOrd(j)) for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [quocient_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [quocient_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[quocient_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[quocient_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [quocient_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [quocient_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 16
0
def less_than_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(1) if x < y else Fraction(0)

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(1) if x < toOrd(c) else Fraction(0) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(1) if toOrd(c) < y else Fraction(0) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(1) if i < j else Fraction(0)
                for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(1) if i < j else Fraction(0)
                for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [less_than_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [less_than_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[less_than_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[less_than_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [less_than_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [less_than_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 17
0
def different_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(1) if x != y else Fraction(0)

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(1) if x != toOrd(c) else Fraction(0) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(1) if toOrd(c) != y else Fraction(0) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(1) if i != j else Fraction(0)
                for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(1) if i != j else Fraction(0)
                for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [different_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [different_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[different_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[different_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [different_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [different_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 18
0
def greater_eq_than_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(1) if x >= y else Fraction(0)

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(1) if x >= toOrd(c) else Fraction(0) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(1) if toOrd(c) >= y else Fraction(0) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(1) if i >= j else Fraction(0)
                for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(1) if i >= j else Fraction(0)
                for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [greater_eq_than_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [greater_eq_than_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[greater_eq_than_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[greater_eq_than_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [greater_eq_than_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [greater_eq_than_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 19
0
def equal_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(1) if x == y else Fraction(0)

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [Fraction(1) if x == toOrd(c) else Fraction(0) for c in y]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [Fraction(1) if toOrd(c) == y else Fraction(0) for c in x]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(1) if i == j else Fraction(0)
                for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(1) if i == j else Fraction(0)
                for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [equal_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [equal_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[equal_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[equal_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [equal_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [equal_types(i, j) for (i, j) in zip(cycle(x), y)]
Ejemplo n.º 20
0
def make_any_types(x):
    if isinstance(x, Fraction):
        return Fraction(1) if x != 0 else Fraction(0)
    elif isinstance(x, str):
        ords = [int(toOrd(c)) for c in x]
        result = 0
        for d in ords:
            result += d
        return Fraction(1) if result > 0 else Fraction(0)
    elif isinstance(x, list):
        prods = [make_any_types(i) for i in x]
        result = 0
        for d in prods:
            result += d
        return Fraction(1) if result > 0 else Fraction(0)
Ejemplo n.º 21
0
def make_prod_types(x):
    if isinstance(x, Fraction):
        digits = str(int(x))
        result = 1
        for d in digits:
            result *= int(d)
        return Fraction(result)
    elif isinstance(x, str):
        ords = [int(toOrd(c)) for c in x]
        result = 1
        for d in ords:
            result *= d
        return Fraction(result)
    elif isinstance(x, list):
        prods = [make_prod_types(i) for i in x]
        result = 1
        for d in prods:
            result *= d
        return Fraction(result)
Ejemplo n.º 22
0
def makeRange1_types(x):
    if isinstance(x, Fraction):
        return [Fraction(i) for i in range(1, int(x) + 1)]
    elif isinstance(x, str):
        if x.islower():
            id_a = toOrd('a')
            id_x = toOrd(x)
            return list(codepage[id_a:id_x + 1])
        elif x.isupper():
            id_A = toOrd('A')
            id_x = toOrd(x)
            return list(codepage[id_A:id_x + 1])
        elif x.isdigit():
            id_0 = toOrd('1')
            id_x = toOrd(x)
            return list(codepage[id_0:id_x + 1])
        else:
            return ''  # otherwise do nothing
    elif isinstance(x, list):
        return [makeRange1_types(i) for i in x]
Ejemplo n.º 23
0
def apply_and_types(x, y):

    if isinstance(x, Fraction) and isinstance(y, Fraction):
        return Fraction(1) if x != 0 and y != 0 else Fraction(0)

    elif isinstance(x, Fraction) and isinstance(y, str):
        return [
            Fraction(1) if x != 0 and toOrd(c) != 0 else Fraction(0) for c in y
        ]
    elif isinstance(x, str) and isinstance(y, Fraction):
        return [
            Fraction(1) if toOrd(c) != 0 and y != 0 else Fraction(0) for c in x
        ]

    elif isinstance(x, str) and isinstance(y, str):
        if len(x) > len(y):
            return [
                Fraction(1) if toOrd(i) != 0 and toOrd(j) != 0 else Fraction(0)
                for (i, j) in zip(x, cycle(y))
            ]
        else:
            return [
                Fraction(1) if toOrd(i) != 0 and toOrd(j) != 0 else Fraction(0)
                for (i, j) in zip(cycle(x), y)
            ]

    elif isinstance(x, Fraction) and isinstance(y, list):
        return [apply_and_types(x, i) for i in y]
    elif isinstance(x, list) and isinstance(y, Fraction):
        return [apply_and_types(i, y) for i in x]

    elif isinstance(x, str) and isinstance(y, list):
        return [[apply_and_types(x, i)] for i in y]
    elif isinstance(x, list) and isinstance(y, str):
        return [[apply_and_types(i, y)] for i in x]

    elif isinstance(x, list) and isinstance(y, list):
        if len(x) > len(y):
            return [apply_and_types(i, j) for (i, j) in zip(x, cycle(y))]
        else:
            return [apply_and_types(i, j) for (i, j) in zip(cycle(x), y)]