import math

import sympy as sym
import pyfiglet

def to_color(string, color):
    color_code = {'blue': '\033[34m',
                    'yellow': '\033[33m',
                    'green': '\033[32m',
                    'red': '\033[31m'
                    }
    return color_code[color] + str(string) + '\033[0m'

text = pyfiglet.figlet_format(text = "__Calculator__", font = 'Slant')
print(to_color(text,'blue'))

active = True

while active:

    print("1. Addition")
    print("2. Subtraction")
    print("3. Multiplication")
    print("4. Division")
    print("5. Exponential")
    print("6. Squared_root")
    print("7. Differentiation")
    print("8. Integration")
    print("9. Exit")
    print

    try:

        answer = input("Option: ")
        print

        if (answer == "1"):
            a = int(input("Enter the number: "))
            ask = "Y"
            while (ask == "Y"):
                b = int(input("Enter the number: "))
                c = b + a
                a = c
                ask = input("Do you want to add more numbers(Y/N): ")
                print(c)

        elif (answer == "2"):
            a = int(input("Enter the number: "))
            ask = "Y"
            while (ask == "Y"):
                b = int(input("Enter the number: "))
                c = a - b
                a = c
                ask = input("Do you want to add more numbers(Y/N): ")
                print(c)


        elif (answer == "3"):
            a = int(input("Enter the number: "))
            ask = "Y"
            while (ask == "Y"):
                b = int(input("Enter the number: "))
                c = a * b
                a = c
                ask = input("Do you want to add more numbers(Y/N): ")
                print(c)


        elif (answer == "4"):
            num1 = int(input("Enter the number: "))
            num2 = int(input("Enter the number: "))
            div = num1 / num2
            print(div)

        elif (answer == "5"):
            num1 = int(input("Enter the number: "))
            num2 = int(input("Enter the number: "))
            exp = num1 ** num2
            print(exp)

        elif (answer == "6"):
            num1 = int(input("Enter the number: "))
            sq = math.sqrt(num1)
            print(sq)

        elif (answer == "7"):
            x = sym.Symbol('x')
            y = sym.Symbol('y')
            z = sym.Symbol('z')
            exp = input("Enter the expression: ")
            var = input("With respect to: ")

            if (var == 'x'):
                derivative_f = sym.diff(exp, x)
                print(derivative_f)

            elif (var == 'y'):
                derivative_f = sym.diff(exp, y)
                print(derivative_f)

        elif (answer == "8"):
            x = sym.Symbol('x')
            y = sym.Symbol('y')
            z = sym.Symbol('z')
            exp = input("Enter the expression: ")
            var = input("With respect to: ")

            if (var == 'x'):
                integrate_f = sym.integrate(exp, x)
                print(integrate_f)

            elif (var == 'y'):
                integrate_f = sym.integrate(exp, y)
                print(integrate_f)

        elif (answer == "9"):
            print("Thank you for using this calculator....")
   
            active = False

        else:
            print
            print ("Please select a valid option number")
            print

    except NameError:
        print
        print ("NameError: Please Use Numbers Only")
        print
    except SyntaxError:  
        print
        print ("SyntaxError: Please Use Numbers Only")
        print
    except TypeError:
        print
        print ("TypeError: Please Use Numbers Only")
        print
    except AttributeError:  
        print
        print ("AttributeError: Please Use Numbers Only")
        print