import “selection”;

d3_selectionPrototype.filter = function(filter) {

var subgroups = [],
    subgroup,
    group,
    node;

if (typeof filter !== "function") filter = d3_selection_filter(filter);

for (var j = 0, m = this.length; j < m; j++) {
  subgroups.push(subgroup = []);
  subgroup.parentNode = (group = this[j]).parentNode;
  for (var i = 0, n = group.length; i < n; i++) {
    if ((node = group[i]) && filter.call(node, node.__data__, i)) {
      subgroup.push(node);
    }
  }
}

return d3_selection(subgroups);

};

function d3_selection_filter(selector) {

return function() {
  return d3_selectMatches(this, selector);
};

}