docs: def add(self, variant, arch, image):
          """
          Assign an :class:`.Image` object to variant and arch.
  
          :param variant: compose variant UID
          :type  variant: str
          :param arch:    compose architecture
          :type  arch:    str
          :param image:   image
          :type  image:   :class:`.Image`
          """
  
          if arch not in productmd.common.RPM_ARCHES:
              raise ValueError("Arch not found in RPM_ARCHES: %s" % arch)
          if arch in ["src", "nosrc"]:
              raise ValueError("Source arch is not allowed. Map source files under binary arches.")
          if self.header.version_tuple >= (1, 1):
              # disallow adding a different image with same 'unique'
              # attributes. can't do this pre-1.1 as we couldn't truly
              # identify images before subvariant
              for checkvar in self.images:
                  for checkarch in self.images[checkvar]:
                      for curimg in self.images[checkvar][checkarch]:
                          if identify_image(curimg) == identify_image(image) and curimg.checksums != image.checksums:
                              raise ValueError("Image {0} shares all UNIQUE_IMAGE_ATTRIBUTES with "
                                               "image {1}! This is forbidden.".format(image, curimg))
          self.images.setdefault(variant, {}).setdefault(arch, set()).add(image)