_node_le

        Low-level api: Return True if all descendants of one node exist in the
        other node. Otherwise False. This is a recursive method.

        Parameters
        ----------

        node_self : `Element`
            A node to be compared.

        node_other : `Element`
            Another node to be compared.

        Returns
        -------

        bool
            True if all descendants of node_self exist in node_other, otherwise
            False.

def _node_le(self, node_self, node_other):
        '''_node_le

        Low-level api: Return True if all descendants of one node exist in the
        other node. Otherwise False. This is a recursive method.

        Parameters
        ----------

        node_self : `Element`
            A node to be compared.

        node_other : `Element`
            Another node to be compared.

        Returns
        -------

        bool
            True if all descendants of node_self exist in node_other, otherwise
            False.
        '''

        for x in ['tag', 'text', 'tail']:
            if node_self.__getattribute__(x) != node_other.__getattribute__(x):
                return False
        for a in node_self.attrib:
            if a not in node_other.attrib or \
               node_self.attrib[a] != node_other.attrib[a]:
                return False
        for child in node_self.getchildren():
            peers = self._get_peers(child, node_other)
            if len(peers) < 1:
                return False
            elif len(peers) > 1:
                raise ConfigError('not unique peer of node {}' \
                                  .format(self.device.get_xpath(child)))
            else:
                schma_node = self.device.get_schema_node(child)
                if schma_node.get('ordered-by') == 'user' and \
                   schma_node.get('type') == 'leaf-list' or \
                   schma_node.get('ordered-by') == 'user' and \
                   schma_node.get('type') == 'list':
                    elder_siblings = list(child.itersiblings(tag=child.tag,
                                                             preceding=True))
                    if elder_siblings:
                        immediate_elder_sibling = elder_siblings[0]
                        peers_of_immediate_elder_sibling = \
                            self._get_peers(immediate_elder_sibling,
                                            node_other)
                        if len(peers_of_immediate_elder_sibling) < 1:
                            return False
                        elif len(peers_of_immediate_elder_sibling) > 1:
                            p = self.device.get_xpath(immediate_elder_sibling)
                            raise ConfigError('not unique peer of node {}' \
                                              .format(p))
                        elder_siblings_of_peer = \
                            list(peers[0].itersiblings(tag=child.tag,
                                                       preceding=True))
                        if peers_of_immediate_elder_sibling[0] not in \
                           elder_siblings_of_peer:
                            return False
                if not self._node_le(child, peers[0]):
                    return False
        return True