<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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