<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _register_descriptor_keys(self, descriptor, keys):
 """ Register the given descriptor keys for the given descriptor at the class. :param descriptor: The descriptor for which the `keys` shall be registered. :type descriptor: :class:`AbstractDescriptor` instance :param keys: An iterable of descriptor keys :raises TypeError: if the specified keys are already handled by a descriptor. :raises TypeError: if this class has subclasses or if it is not the :attr:`~AbstractDescriptor.root_class` of the given descriptor. If the method raises, the caller must assume that registration was not successful. .. note:: The intended audience for this method are developers of :class:`AbstractDescriptor` subclasses, which are generally only expected to live in the :mod:`aioxmpp` package. Thus, you should not expect this API to be stable. If you have a use-case for using this function outside of :mod:`aioxmpp`, please let me know through the usual issue reporting means. """


        if descriptor.root_class is not self or self.__subclasses__():
            raise TypeError(
                "descriptors cannot be modified on classes with subclasses"
            )

        meta = type(self)
        descriptor_info = meta._upcast_descriptor_map(
            self.DESCRIPTOR_MAP,
            "{}.{}".format(self.__module__, self.__qualname__),
        )

        # this would raise on conflict
        meta._merge_descriptors(
            descriptor_info,
            [
                (key, (descriptor, "<added via _register_descriptor_keys>"))
                for key in keys
            ]
        )

        for key in keys:
            self.DESCRIPTOR_MAP[key] = descriptor