'Compute the estimator bandwidth with given method.
The new bandwidth calculated after a call to `set_bandwidth` is used
for subsequent evaluations of the estimated density.
Parameters
bw_method : str, scalar or callable, optional
The method used to calculate the estimator bandwidth.  This can be
\'scott\', \'silverman\', a scalar constant or a callable.  If a
scalar, this will be used directly as `kde.factor`.  If a callable,
it should take a `gaussian_kde` instance as only parameter and
return a scalar.  If None (default), nothing happens; the current
`kde.covariance_factor` method is kept.
Notes
.. versionadded:: 0.11
Examples
>>> import scipy.stats as stats
>>> x1 = np.array([-7, -5, 1, 4, 5.])
>>> kde = stats.gaussian_kde(x1)
>>> xs = np.linspace(-10, 10, num=50)
>>> y1 = kde(xs)
>>> kde.set_bandwidth(bw_method=\'silverman\')
>>> y2 = kde(xs)
>>> kde.set_bandwidth(bw_method=kde.factor / 3.)
>>> y3 = kde(xs)
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots()
>>> ax.plot(x1, np.ones(x1.shape) / (4. * x1.size), \'bo\',
...         label=\'Data points (rescaled)\')
>>> ax.plot(xs, y1, label=\'Scott (default)\')
>>> ax.plot(xs, y2, label=\'Silverman\')
>>> ax.plot(xs, y3, label=\'Const (1/3 * Silverman)\')
>>> ax.legend()
>>> plt.show()'

def set_bandwidth(self, bw_method=None):

    if (bw_method is None):
        pass
    elif (bw_method == 'scott'):
        self.covariance_factor = self.scotts_factor
    elif (bw_method == 'silverman'):
        self.covariance_factor = self.silverman_factor
    elif (np.isscalar(bw_method) and (not isinstance(bw_method, string_types))):
        self._bw_method = 'use    constant'
        self.covariance_factor = (lambda : bw_method)
    elif callable(bw_method):
        self._bw_method = bw_method
        self.covariance_factor = (lambda : self._bw_method(self))
    else:
        msg = "`bw_method`    should    be    'scott',    'silverman',    a    scalar    or    a    callable."
        raise ValueError(msg)
    self._compute_covariance()
