(*args, **kwargs)
return plots
Plots a 3D surface plot.

    Usage
    =====

    Single plot

    ``plot3d(expr, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plot with the same range.

    ``plot3d(expr1, expr2, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plots with different ranges.

    ``plot3d((expr1, range_x, range_y), (expr2, range_x, range_y), ..., **kwargs)``

    Ranges have to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr`` : Expression representing the function along x.

    ``range_x``: (x, 0, 5), A 3-tuple denoting the range of the x
    variable.

    ``range_y``: (y, 0, 5), A 3-tuple denoting the range of the y
     variable.

    Keyword Arguments
    =================

    Arguments for ``SurfaceOver2DRangeSeries`` class:

    ``nb_of_points_x``: int. The x range is sampled uniformly at
    ``nb_of_points_x`` of points.

    ``nb_of_points_y``: int. The y range is sampled uniformly at
    ``nb_of_points_y`` of points.

    Aesthetics:

    ``surface_color``: Function which returns a float. Specifies the color for
    the surface of the plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same series arguments are applied to
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.

    Arguments for ``Plot`` class:

    ``title`` : str. Title of the plot.

    Examples
    ========

    >>> from sympy import symbols
    >>> from sympy.plotting import plot3d
    >>> x, y = symbols('x y')

    Single plot

    >>> plot3d(x*y, (x, -5, 5), (y, -5, 5))
    Plot object containing:
    [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)


    Multiple plots with same range

    >>> plot3d(x*y, -x*y, (x, -5, 5), (y, -5, 5))
    Plot object containing:
    [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)
    [1]: cartesian surface: -x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)


    Multiple plots with different ranges.

    >>> plot3d((x**2 + y**2, (x, -5, 5), (y, -5, 5)),
    ...     (x*y, (x, -3, 3), (y, -3, 3)))
    Plot object containing:
    [0]: cartesian surface: x**2 + y**2 for x over (-5.0, 5.0) and y over (-5.0, 5.0)
    [1]: cartesian surface: x*y for x over (-3.0, 3.0) and y over (-3.0, 3.0)


    See Also
    ========
    Plot, SurfaceOver2DRangeSeries
Plots a 3D surface plot.
Plots a 3D surface plot .
def plot3d(*args, **kwargs):
    """
    Plots a 3D surface plot.

    Usage
    =====

    Single plot

    ``plot3d(expr, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plot with the same range.

    ``plot3d(expr1, expr2, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plots with different ranges.

    ``plot3d((expr1, range_x, range_y), (expr2, range_x, range_y), ..., **kwargs)``

    Ranges have to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr`` : Expression representing the function along x.

    ``range_x``: (x, 0, 5), A 3-tuple denoting the range of the x
    variable.

    ``range_y``: (y, 0, 5), A 3-tuple denoting the range of the y
     variable.

    Keyword Arguments
    =================

    Arguments for ``SurfaceOver2DRangeSeries`` class:

    ``nb_of_points_x``: int. The x range is sampled uniformly at
    ``nb_of_points_x`` of points.

    ``nb_of_points_y``: int. The y range is sampled uniformly at
    ``nb_of_points_y`` of points.

    Aesthetics:

    ``surface_color``: Function which returns a float. Specifies the color for
    the surface of the plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same series arguments are applied to
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.

    Arguments for ``Plot`` class:

    ``title`` : str. Title of the plot.

    Examples
    ========

    >>> from sympy import symbols
    >>> from sympy.plotting import plot3d
    >>> x, y = symbols('x y')

    Single plot

    >>> plot3d(x*y, (x, -5, 5), (y, -5, 5))
    Plot object containing:
    [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)


    Multiple plots with same range

    >>> plot3d(x*y, -x*y, (x, -5, 5), (y, -5, 5))
    Plot object containing:
    [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)
    [1]: cartesian surface: -x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)


    Multiple plots with different ranges.

    >>> plot3d((x**2 + y**2, (x, -5, 5), (y, -5, 5)),
    ...     (x*y, (x, -3, 3), (y, -3, 3)))
    Plot object containing:
    [0]: cartesian surface: x**2 + y**2 for x over (-5.0, 5.0) and y over (-5.0, 5.0)
    [1]: cartesian surface: x*y for x over (-3.0, 3.0) and y over (-3.0, 3.0)


    See Also
    ========
    Plot, SurfaceOver2DRangeSeries

    """

    args = list(map(sympify, args))
    show = kwargs.pop('show', True)
    series = []
    plot_expr = check_arguments(args, 1, 2)
    series = [SurfaceOver2DRangeSeries(*arg, **kwargs) for arg in plot_expr]
    plots = Plot(*series, **kwargs)
    if show:
        plots.show()
    return plots
def plot3d ( * args , * * kwargs ) : args = list ( map ( sympify , args ) ) show = kwargs . pop ( 'show' , True ) series = [ ] plot_expr = check_arguments ( args , 1 , 2 ) series = [ SurfaceOver2DRangeSeries ( * arg , * * kwargs ) for arg in plot_expr ] plots = Plot ( * series , * * kwargs ) if show : plots . show ( ) return plots