_is_peer

        Low-level api: Return True if node_self and node_other are considered
        as peer with regards to a set of keys.

        Parameters
        ----------

        keys : `list`
            A list of keys in `{url}tagname` notation.

        node_self : `Element`
            An Element node on this side.

        node_other : `Element`
            An Element node on the other side.

        Returns
        -------

        list
            True if node_self is a peer of node_other, otherwise, return False.

def _is_peer(self, keys, node_self, node_other):
        '''_is_peer

        Low-level api: Return True if node_self and node_other are considered
        as peer with regards to a set of keys.

        Parameters
        ----------

        keys : `list`
            A list of keys in `{url}tagname` notation.

        node_self : `Element`
            An Element node on this side.

        node_other : `Element`
            An Element node on the other side.

        Returns
        -------

        list
            True if node_self is a peer of node_other, otherwise, return False.
        '''

        for key in keys:
            s = list(node_self.iterchildren(tag=key))
            o = list(node_other.iterchildren(tag=key))
            if len(s) < 1 or len(o) < 1:
                raise ConfigError("cannot find key '{}' in node {}" \
                                  .format(key,
                                          self.device.get_xpath(node_self)))
            if len(s) > 1 or len(o) > 1:
                raise ConfigError("not unique key '{}' in node {}" \
                                  .format(key,
                                          self.device.get_xpath(node_self)))
            if s[0].text != o[0].text:
                return False
        return True