class_docstr: Univariate and bivariate kernel density estimator.
class_docstr_tok: ["Univariate","and","bivariate","kernel","density","estimator","."]
docstr: Fit and evaluate a univariate on bivariate data.
docstr_tok: ["Fit","and","evaluate","a","univariate","on","bivariate","data","."]
code: def _eval_bivariate(self, x1, x2, weights=None):
      """Fit and evaluate a univariate on bivariate data."""
      support = self.support
      if support is None:
          support = self.define_support(x1, x2, cache=False)
  
      kde = self._fit([x1, x2], weights)
  
      if self.cumulative:
          grid1, grid2 = support
          density = np.zeros((grid1.size, grid2.size))
          p0 = grid1.min(), grid2.min()
          for i, xi in enumerate(grid1):
              for j, xj in enumerate(grid2):
                  density[i, j] = kde.integrate_box(p0, (xi, xj))
  
      else:
          xx1, xx2 = np.meshgrid(*support)
          density = kde([xx1.ravel(), xx2.ravel()]).reshape(xx1.shape)
  
      return density, support
  
imports: from numbers import Number
  from statistics import NormalDist
  import numpy
  import pandas
  from .algorithms import bootstrap
  from .utils import _check_argument
label_desc: Use image node_id 8 for calling the KDE obj's underlying member method code with example usage: obj._eval_bivariate(x1, x2, weights) and returns: density,  support