'Find all rows matching the given key.
Parameters
key : tuple
Column values
Returns
matching_rows : list
List of rows matching the input key'

def find(self, key):

    begin = 0
    end = len(self.row_index)
    for i in range(self.num_cols):
        key_slice = self._get_key_slice(i, begin, end)
        t = _searchsorted(key_slice, key[i])
        if ((t == len(key_slice)) or (key_slice[t] != key[i])):
            return []
        elif ((t == 0) and (len(key_slice) > 0) and (key[i] < key_slice[0])):
            return []
        end = (begin + _searchsorted(key_slice, key[i], side=u'right'))
        begin += t
        if (begin >= len(self.row_index)):
            return []
    return self.row_index[begin:end]
