from polinomio import Polinomio

def main():
    # crie lista de coeficientes
    coefs = [5, 1, -2, 0, -3, 0, 0, 0, 0]

    # crie um objeto da classe Polinomio
    print("--------------------------")
    print(" 1. Polinomio.__init__()")
    p = Polinomio(coefs) # __init__()
    coefs[0] = 1000

    # exiba a lista (list) de seus coeficientes
    print("\n--------------------------")
    print(" 2. Polinomio.coeficientes()")
    pcoefs = p.coeficientes()
    print(f"coeficientes de p = {pcoefs}")
    pcoefs[0] = 1000
    print(f"coeficientes de p = {p.coeficientes()}")
    
    # exiba o polinÃ´mio
    print("\n--------------------------")
    print(" 3. Polinomio.__str__()")
    print(f"polinomio p(x) = {p}")   # __str__()

    # exiba o grau do polinÃ´mio
    print("\n--------------------------")
    print(" 4. Polinomio.grau()")
    print(f"grau de p = {p.grau()}") # grau()
    
    # crie um polinomio que represente a derivada de p
    print("\n--------------------------")
    print(" 5. Polinomio.derive()")
    dp = p.derive()  # derive()
    print(f"derivada de p Ã© dp(x) = {dp}") # __str__() 
    ddp = dp.derive() # __derive__()
    print(f"derivada de dp Ã© ddp(x) = {ddp}") # __str__()

    # exiba coeficiente de p, dp e ddp
    print("\n--------------------------")
    print(" 6. Polinomio.coeficientes()")
    print(f"coeficientes de   p(x) = {p.coeficientes()}")
    print(f"coeficientes de  dp(x) = {dp.coeficientes()}")
    print(f"coeficientes de ddp(x) = {ddp.coeficientes()}")

    # calcule o valor dos polinÃ´mios em alguns pontos
    print("\n--------------------------")
    print(" 7. Polinomio.__call__()")
    valores = [0, 1, 0.5, 3] # depois tente com complex(1,1)
    for x in valores:
        print(f"p({x}) = {p(x)},", end=" ")    # __call__() 
        print(f"dp({x}) = {dp(x)},", end=" ")  # __call__() 
        print(f"ddp({x}) = {ddp(x)}")         # __call__() 
        
    # calcule a soma de polinÃ´mios
    print("\n--------------------------")
    print(" 8. Polinomio.__add__()")
    p1 = Polinomio([5, 1, -2, 0, 3])
    p2 = Polinomio([-2, 5, 1])
    print(f"p1(x) = {p1}")
    print(f"p2(x) = {p2}")
    p3 = p1 + p2  # __add__()
    print(f"p1(x) + p2(x) = {p3}")
    p5 = p1 + 1   # __add__()
    print(f"p1(x) + 1 = {p5}")

    # calcule a soma de polinÃ´mios
    print("\n--------------------------")
    print(" 9. Polinomio.__radd__()")
    p6 = 2  + p1   # __radd__()
    print(f"2 + p1(x) = {p6}")

    # calcule a diferenÃ§a de polinÃ´mios
    print("\n--------------------------")
    print("10. Polinomio.__sub__()")
    p4 = p1 - p1  # __sub__()
    print(f"p1(x) - p1(x) = {p4}")

    
    # calcule o produto de polinÃ´nios
    print("\n--------------------------")
    print("11. Polinomio.__mul__()")
    p1 = Polinomio([5, 1, -2, 0, 3])
    p2 = Polinomio([-2, 5, 1])
    print(f"p1(x) = {p1}")
    print(f"p2(x) = {p2}")
    p3 = p1 * p2   # __mul__()
    print(f"p1(x) * p2(x) = {p3}")
    p4 = p1 * p1   # __mul__()
    print(f"p1(x) * p1(x) = {p4}")
    p5 = p1 * -2   # __mul__()
    print(f"p1(x) * -2 = {p5}")

    # calcule o produto de polinÃ´nios
    print("\n--------------------------")
    print("12. Polinomio.__rmul__()")
    p6 = 3 * p1    # __rmul__()
    print(f"3 * p1(x) = {p6}")
        
#----------------------------------------------------------
if __name__ == "__main__":
    main()
