'Returns an iterator over the edges in this chart.
See ``Chart.select`` for more information about the
``restrictions`` on the edges.'

def select(self, **restrictions):

    if (restrictions == {}):
        return iter(self._edges)
    restr_keys = sorted(restrictions.keys())
    restr_keys = tuple(restr_keys)
    if (restr_keys not in self._indexes):
        self._add_index(restr_keys)
    vals = tuple((self._get_type_if_possible(restrictions[key]) for key in restr_keys))
    return iter(self._indexes[restr_keys].get(vals, []))
