def do_remove_data(self, data, distance, mtree):
		for child in self.children.itervalues():
			if abs(distance - child.distance_to_parent) <= child.radius:   # TODO: confirm
				distance_to_child = mtree.distance_function(data, child.data)
				if distance_to_child <= child.radius:
					try:
						child.remove_data(data, distance_to_child, mtree)
					except __HOLE__:
						# If KeyError was raised, then the data was not found in the child
						pass
					except _NodeUnderCapacity:
						expanded_child = self.balance_children(child, mtree)
						self.update_radius(expanded_child)
						return
					else:
						self.update_radius(child)
						return
		raise KeyError()
dataset/ETHPy150Open erdavila/M-Tree/py/mtree/__init__.py/_NonLeafNodeTrait.do_remove_data