def subset(self, ns_uris):
        """Return a subset of this NamespaceSet containing only data for the
        given namespaces.

        Args:
            ns_uris (iterable): An iterable of namespace URIs which select the
                namespaces for the subset.

        Returns:
            The subset

        Raises:
            NamespaceNotFoundError: If any namespace URIs in `ns_uris` don't
                match any namespaces in this set.
        """
        sub_ns = NamespaceSet()

        for ns_uri in ns_uris:
            ni = self.__lookup_uri(ns_uri)
            new_ni = copy.deepcopy(ni)

            # We should be able to reach into details of our own
            # implementation on another obj, right??  This makes the subset
            # operation faster.  We can set up the innards directly from a
            # cloned _NamespaceInfo.
            sub_ns._NamespaceSet__add_namespaceinfo(new_ni)

        return sub_ns
Return a subset of this NamespaceSet containing only data for the
        given namespaces.

        Args:
            ns_uris (iterable): An iterable of namespace URIs which select the
                namespaces for the subset.

        Returns:
            The subset

        Raises:
            NamespaceNotFoundError: If any namespace URIs in `ns_uris` don't
                match any namespaces in this set.