Obtain bond lengths for all bond orders from bond length database

    Args:
        sp1 (Specie): First specie.
        sp2 (Specie): Second specie.
        default_bl: If a particular type of bond does not exist, use this
            bond length as a default value (bond order = 1).
            If None, a ValueError will be thrown.

    Return:
        A dict mapping bond order to bond length in angstrom

def obtain_all_bond_lengths(sp1, sp2, default_bl=None):
    """
    Obtain bond lengths for all bond orders from bond length database

    Args:
        sp1 (Specie): First specie.
        sp2 (Specie): Second specie.
        default_bl: If a particular type of bond does not exist, use this
            bond length as a default value (bond order = 1).
            If None, a ValueError will be thrown.

    Return:
        A dict mapping bond order to bond length in angstrom
    """
    if isinstance(sp1, Element):
        sp1 = sp1.symbol
    if isinstance(sp2, Element):
        sp2 = sp2.symbol
    syms = tuple(sorted([sp1, sp2]))
    if syms in bond_lengths:
        return bond_lengths[syms].copy()
    elif default_bl is not None:
        return {1: default_bl}
    else:
        raise ValueError("No bond data for elements {} - {}".format(*syms))