

def plot_covariance(kernel, x=None, label=None, plot_limits=None, visible_dims=None, resolution=None, projection='2d', levels=20, **kwargs):
    '\n    Plot a kernel covariance w.r.t. another x.\n\n    :param array-like x: the value to use for the other kernel argument (kernels are a function of two variables!)\n    :param plot_limits: the range over which to plot the kernel\n    :type plot_limits: Either (xmin, xmax) for 1D or (xmin, xmax, ymin, ymax) / ((xmin, xmax), (ymin, ymax)) for 2D\n    :param array-like visible_dims: input dimensions (!) to use for x. Make sure to select 2 or less dimensions to plot.\n    :resolution: the resolution of the lines used in plotting. for 2D this defines the grid for kernel evaluation.\n    :param {2d|3d} projection: What projection shall we use to plot the kernel?\n    :param int levels: for 2D projection, how many levels for the contour plot to use?\n    :param kwargs:  valid kwargs for your specific plotting library\n    '
    X = (np.ones((2, kernel._effective_input_dim)) * [[(- 3)], [3]])
    (_, free_dims, Xgrid, xx, yy, _, _, resolution) = helper_for_plot_data(kernel, X, plot_limits, visible_dims, None, resolution)
    from numbers import Number
    if (x is None):
        from ...kern.src.stationary import Stationary
        x = (np.ones((1, kernel._effective_input_dim)) * (not isinstance(kernel, Stationary)))
    elif isinstance(x, Number):
        x = (np.ones((1, kernel._effective_input_dim)) * x)
    K = kernel.K(Xgrid, x)
    if (projection == '3d'):
        xlabel = 'X[:,0]'
        ylabel = 'X[:,1]'
        zlabel = 'k(X, {!s})'.format(np.asanyarray(x).tolist())
    else:
        xlabel = 'X'
        ylabel = 'k(X, {!s})'.format(np.asanyarray(x).tolist())
        zlabel = None
    (canvas, kwargs) = pl().new_canvas(projection=projection, xlabel=xlabel, ylabel=ylabel, zlabel=zlabel, **kwargs)
    if (len(free_dims) <= 2):
        if (len(free_dims) == 1):
            update_not_existing_kwargs(kwargs, pl().defaults.meanplot_1d)
            plots = dict(covariance=[pl().plot(canvas, Xgrid[:, free_dims], K, label=label, **kwargs)])
        elif (projection == '2d'):
            update_not_existing_kwargs(kwargs, pl().defaults.meanplot_2d)
            plots = dict(covariance=[pl().contour(canvas, xx[:, 0], yy[0, :], K.reshape(resolution, resolution), levels=levels, label=label, **kwargs)])
        elif (projection == '3d'):
            update_not_existing_kwargs(kwargs, pl().defaults.meanplot_3d)
            plots = dict(covariance=[pl().surface(canvas, xx, yy, K.reshape(resolution, resolution), label=label, **kwargs)])
        return pl().add_to_canvas(canvas, plots)
    else:
        raise NotImplementedError('Cannot plot a kernel with more than two input dimensions')

dataset/ETHPy150Open SheffieldML/GPy/GPy/plotting/gpy_plot/kernel_plots.py plot_covariance/original