My filling is that your contours are not computed, because your surface is not defined as z=f(x,y). Your surface is given only by its z-values. Theoretically the algorithm computing the countour lines on a surface solves the system z=f(x,y), z=cst to get their equation or you don’t have any function of x,y.
Try the following trick: if
haf is a numpy array of shape (m,n) choose some intervals for x, and y, such that to interpret your surface as being of equation z=haf(x,y), x in [a,b], y in [c,d]
x=np.linspace(a, b, n)
surf2=dict(x=x, y=y, z=haf,
opacity=0.8, showlegend=True, type='surface',