##Exercice 1247
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

##b)
def f(x,y):
    return x**3-3*x*(1+y**2)

##Tests
print(f(0,0),f(1,0),f(-1,0),f(0,1),f(0,-1))

##
f=np.vectorize(f)
X=np.arange(-2,2,0.01)
Y=np.arange(-2,2,0.01)
X,Y=np.meshgrid(X,Y)
Z = f(X,Y)
plt.axis('equal')
plt.contour(X,Y,Z,[k for k in range(-5,6)])
plt.show()

##d)
def g(x):
    return f(1+x,x)

##Tests
print(g(0),g(1),g(-1))

##
X=np.arange(-2,2,0.01)
Y=g(X)
plt.plot(X,Y)
plt.show()