code: def _register_descriptor_keys(self, descriptor, keys):
          
  
          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
docs: 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.