def hash_contact(atom_pair, selector1=None, selector2=None):
    """Return a unique hash for a pair of atoms.

    Parameters
    ----------
    atom_pair : tuple[`Atom`, `Atom`]
        A pair of atom objects.
    selector1, selector2 : callable, optional
        a callable that takes an `Atom` as input and returns
        some of its attributes. If a selectors is None, all
        attributes of the Atom will be considered.

    Returns
    -------
    a unique hash string to the input atom pair.

    Examples
    --------
    >>> from fccpy.contacts import BY_CHAIN
    >>> a1 = Atom("A", 1, 1, "", "N")
    >>> a2 = Atom("B", 1, 2, "", "N")
    >>> hash_contact(a1, a2)
    >>> hash_contact(a1, a2, selector1=BY_CHAIN, selector2=BY_CHAIN)
    """

    selector1 = selector1 if selector1 is not None else tuple
    selector2 = selector2 if selector2 is not None else tuple

    atom1, atom2 = atom_pair

    return str(hash((selector1(atom1), selector2(atom2))))