def select_icons(xmrs, left=None, relation=None, right=None):
    """
    Return the list of matching ICONS for *xmrs*.

    :class:`~delphin.mrs.components.IndividualConstraint` objects for
    *xmrs* match if their `left` matches *left*, `relation` matches
    *relation*, and `right` matches *right*. The *left*, *relation*,
    and *right* filters are ignored if they are `None`.

    Args:
        xmrs (:class:`~delphin.mrs.xmrs.Xmrs`): semantic structure to
            query
        left (str, optional): left variable to match
        relation (str, optional): individual constraint relation to match
        right (str, optional): right variable to match
    Returns:
        list: matching ICONS
    """
    icmatch = lambda ic: (
        (left is None or ic.left == left) and
        (relation is None or ic.relation == relation) and
        (right is None or ic.right == right))
    return list(filter(icmatch, xmrs.icons()))