human
Write me a the Python program you requested given the following:
3D plots
Jupyter can also display 3D plots produced by Matplotlib.  To enable 3D plots, you must load the Axes3D object with the following import statement:
from mpl_toolkits.mplot3d import Axes3D

The, you will be able to initialize a 3D figure by calling the add_subplot function in the following way:
ax = fig.add_subplot(1, 1, 1, projection='3d')

Within a 3D figure, you can plot individual curves in 3D by calling plt.plot with $x$, $y$, and $z$ arrays, rather than just $x$ and $y$ arrays.
Plotting 2D surfaces in a 3D figure is a little more complicated.  The following example program shows how to plot the hyperboloid $x^2 + y^2 - z^2 = c^2$. The method is to parameterize and triangulate the surface.  Then, convert the parameterization into $x$, $y$, and $z$ coordinates, and call plot_trisurf, giving it the coordinates along with the the triangulation data.  For more information, see the Matplotlib documentation on 3D plots.
There are a couple of other minor things to point out in this program:

In the first line, instead of the usual %matplotlib inline rendering method, we invoke %matplotlib notebook. This is an alternative rendering method which includes a nice toolbar for the figure. Also, for 3D plots, this rendering method allows the perspective to be adjusted by clicking and dragging.
When invoking the FloatSlider, we supply the option continuous_update=False.  This tells Jupyter that we should wait for the user to finish dragging the slider before re-drawing the figure, rather than re-drawing continuously.  This is recommended if computing the figure is expensive.
assistant
#Here is the Python program you requested.
%matplotlib notebook
from scipy import *
import matplotlib.pyplot as plt

from ipywidgets import interact, FloatSlider
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.tri import Triangulation
from IPython.display import display

def interact_hyperboloid():
    ## Parameters
    rmax, nr = 3.0, 25
    phimin, phimax, nphi = -pi, pi, 40
    camz, camera_angle = 10., 30.
    col1, col2 = "cornflowerblue", "sandybrown"

    ## Initialize numerical data for the hyperboloid.
    ## First, parameterize it using polar coordinates.
    r0vec   = linspace(0.0, 1.0, nr) # Unscaled radius
    phivec  = linspace(phimin, phimax, nphi)
    r0, phi = meshgrid(r0vec, phivec)
    r0, phi = r0.flatten(), phi.flatten()
    ## Note: we triangulate the polar coordinates.  The order
    ## is preserved, so this triangulation is usable for the
    ## Cartesian plot later.
    tri = Triangulation(r0, phi).triangles

    ## Set up the 3D plot.
    fig = plt.figure(figsize=(12,6))
    ax = fig.add_subplot(1, 1, 1, projection='3d')
    ax.set_xlim3d(-rmax, rmax)
    ax.set_ylim3d(-rmax, rmax)
    ax.set_zlim3d(-pi, pi)
    ax.view_init(elev=camz, azim=camera_angle)
    plt.close()

    def plot_hyperboloid(c):
        r = r0 * (rmax - c) + c
        x, y = r*cos(phi), r*sin(phi)
        z    = sqrt(x*x + y*y - c*c + 1e-9)
        ## Plot the hyperboloid.
        ax.clear()
        ax.plot_trisurf(x, y,  z, triangles=tri, linewidth=0.1, alpha=1.0, color=col1)
        ax.plot_trisurf(x, y, -z, triangles=tri, linewidth=0.1, alpha=1.0, color=col2)
        ## Set plot axes, etc.
        ax.set_title(r"$x^2 + y^2 - z^2 = c^2$")
        ax.set_xlabel(r'$x$')
        ax.set_ylabel(r'$y$')
        ax.set_zlabel(r'$z$')
        display(fig)
        
    interact(plot_hyperboloid,
             c = FloatSlider(min=0., max=2., step=0.1, value=1.0,
                             continuous_update=False, description='Waist radius'))

interact_hyperboloid();